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 an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.