From: Eric Blake <eblake@redhat.com>
To: Ori Mamluk <omamluk@zerto.com>
Cc: Kevin Wolf <kwolf@redhat.com>,
dlaor@redhat.com, Stefan Hajnoczi <stefanha@gmail.com>,
Roni Luxenberg <rluxenbe@redhat.com>,
qemu-devel@nongnu.org, Anthony Liguori <anthony@codemonkey.ws>,
Oded Kedem <oded@zerto.com>, Yair Kuszpet <yairk@zerto.com>,
Paolo Bonzini <pbonzini@redhat.com>
Subject: Re: [Qemu-devel] [RFC PATCH v2] Replication agent module
Date: Mon, 02 Apr 2012 10:31:45 -0600 [thread overview]
Message-ID: <4F79D471.9000704@redhat.com> (raw)
In-Reply-To: <784abc7963831751c395cda0ba47e0b1@mail.gmail.com>
[-- Attachment #1: Type: text/plain, Size: 5999 bytes --]
On 04/01/2012 06:05 AM, Ori Mamluk wrote:
> Repagent is a new block driver that allows an external replication system
> to hook to the Qemu storage stack to replicate a volume of a VM.
> This RFC patch adds the repagent client module to Qemu.
>
Completely non-technical review of just your documentation (that is, I
have no opinions on the code or the technical validity of things, but
will leave that to the block layer experts):
>
> From: Ori Mamluk <orim@orim-fedora.(none)>
Fix your git setup to use a valid email for author.
>
> Added replication agent module to Qemu
>
> Added build options to ./configure: --enable-replication
> --disable-replicat
Are these intended to be asymmetrical spellings?
> Added a commandline option to enable: -repagent <rep hub IP>
Is this always an IP address and port number, or can it also be a file
descriptor?
> +++ b/block/repagent/qemu-repagent.txt
> @@ -0,0 +1,73 @@
> + repagent - replication agent - a Qemu module for enabling continuous
> async replication of VM volumes
> +
> +Introduction
> + This document describes a feature in Qemu - a replication agent
> (named Repagent).
> + The Repagent is a new module that exposes an API to an external
> replication system (AKA Rephub).
> + This API allows a Rephub to communicate with a Qemu VM and
> continuously replicate its volumes.
> + The imlementation of a Rephub is outside of the scope of this
s/imlementation/implementation/
> document. There may be several various Rephub
> + implenetations using the same repagent in Qemu.
s/implenetations/implementations/
> + The Repagent is storage driver that acts like a filter driver.
> + It can be regarded as a 'plugin' that is activated when the
> management system enables replication.
> +
> +Main feature of Repagent
> + Repagent has the following main features:
> + * Report volumes - report a list of all volumes in a VM to the
> Rephub.
> + * Mirror writes - Report writes to a volume - send all writes made to
> a protected volume to the Rephub.
> + The reporting of an IO is asyncronuous - i.e. the IO is not
s/asyncronuous/asynchronous/
> delayed by the Repagent to get any acknowledgement from the Rephub.
s/acknowledgement/acknowledgment/
long lines; it would be worth re-wrapping this text
> + It is only copied to the Rephub.
> + * Remote IO - Read/write a volume - allows the Rephub to read a
> protected volume, to enable the protected hub to syncronize
s/syncronize/synchronize/
> + the content of a protected volume.
> + Also used to read/write to a recovery volume - the replica of a
> protected volume.
> +
> +Description of the Repagent module
> +
> +Build and run options
> + New configure option: --enable-repagent
> + New command line option:
> + -repagent [hub IP/name]
> + Enable replication support for disks
> + hub is the ip or name of the machine running the
> replication hub.
port number? Can we pass in an already-opened socket fd?
> +
> +Module APIs
> + The Repagent module interfaces two main components:
> + 1. The Rephub - An external API based on socket messages
> + See detailed comments about each message in rephub_cmds.h
> + 2. The generic block layer- block.c
> + Repagent is a block driver. Most of the block driver functions
> are just a pass-through
> + to the next driver.
> + Writes are mirrors to the hub for replication
> + Open function is used for registering each volume in Repagent.
> +
> +
> +General description of a Rephub - a replication system the repagent
> connects to
> + This section describes in high level a sample Rephub - a replication
> system that uses the repagent API
> + to replicate disks.
> + It describes a simple Rephub that comntinuously maintains a mirror of
s/comntinuously/continuously/
> the volumes of a VM.
> +
> + Say we have a VM we want to protect - call it PVM, say it has 2
> volumes - V1, V2.
> + Our Rephub is called SingleRephub - a Rephub protecting a single VM.
> +
> + Preparations
> + 1. The user chooses a host to rub SingleRephub - a different host
s/rub/run/
> than PVM, call it Host2
> + 2. The user creates two volumes on Host2 - same sizes of V1 and V2,
> call them V1R (V1 recovery) and V2R.
> + 3. The user runs SingleRephub process on Host2, and gives V1R and V2R
> as command line arguments.
> + From now on SingleRephub waits for the protected VM repagent to
> connect.
> + 4. The user runs the protected VM PVM - and uses the switch -repagent
> <Host2 IP>.
> +
> + Runtime
> + 1. The repagent module connects to SingleRephub on startup.
> + 2. repagent reports V1 and V2 to SingleRephub.
> + 3. SingleRephub starts to perform an initial synchronization of the
> protected volumes-
> + it reads each protected volume (V1 and V2) - using read volume
> requests - and copies the data into the
> + recovery volume V1R and V2R.
> + 4. SingleRephub enters 'protection' mode - each write to the
> protected volume is sent by the repagent to the Rephub,
> + and the Rephub performs the write on the matching recovery
> volume.
> +
> + * Note that during stage 3 writes to the protected volumes are not
> ignored - they're kept in a bitmap,
> + and will be read again when stage 3 ends, in an interative
> convergin process.
s/convergin/converging/
> +
> + This flow continuously maintains an updated recovery volume.
> + If the protected system is damaged, the user can create a new VM on
> Host2 with the replicated volumes attached to it.
> + The new VM is a replica of the protected system.
> +
> +
--
Eric Blake eblake@redhat.com +1-919-301-3266
Libvirt virtualization library http://libvirt.org
[-- Attachment #2: OpenPGP digital signature --]
[-- Type: application/pgp-signature, Size: 620 bytes --]
prev parent reply other threads:[~2012-04-02 16:32 UTC|newest]
Thread overview: 4+ messages / expand[flat|nested] mbox.gz Atom feed top
2012-04-01 12:05 [Qemu-devel] [RFC PATCH v2] Replication agent module Ori Mamluk
2012-04-02 11:22 ` Stefan Hajnoczi
2012-04-04 13:23 ` Ori Mamluk
2012-04-02 16:31 ` Eric Blake [this message]
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=4F79D471.9000704@redhat.com \
--to=eblake@redhat.com \
--cc=anthony@codemonkey.ws \
--cc=dlaor@redhat.com \
--cc=kwolf@redhat.com \
--cc=oded@zerto.com \
--cc=omamluk@zerto.com \
--cc=pbonzini@redhat.com \
--cc=qemu-devel@nongnu.org \
--cc=rluxenbe@redhat.com \
--cc=stefanha@gmail.com \
--cc=yairk@zerto.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).