are detected between the PVM and SVM, COLO withholds transmission of the
outbound packets until it has successfully synchronized the PVM state to the SVM.
- Primary Node Secondary Node
- +------------+ +-----------------------+ +------------------------+ +------------+
- | | | HeartBeat |<----->| HeartBeat | | |
- | Primary VM | +-----------|-----------+ +-----------|------------+ |Secondary VM|
- | | | | | |
- | | +-----------|-----------+ +-----------|------------+ | |
- | | |QEMU +---v----+ | |QEMU +----v---+ | | |
- | | | |Failover| | | |Failover| | | |
- | | | +--------+ | | +--------+ | | |
- | | | +---------------+ | | +---------------+ | | |
- | | | | VM Checkpoint |-------------->| VM Checkpoint | | | |
- | | | +---------------+ | | +---------------+ | | |
- | | | | | | | |
- |Requests<---------------------------^------------------------------------------>Requests|
- |Responses----------------------\ /--|--------------\ /------------------------Responses|
- | | | | | | | | | | | | |
- | | | +-----------+ | | | | | | | +------------+ | | |
- | | | | COLO disk | | | | | | | | | COLO disk | | | |
- | | | | Manager |-|-|--|--------------|--|->| Manager | | | |
- | | | +|----------+ | | | | | | | +-----------|+ | | |
- | | | | | | | | | | | | | | |
- +------------+ +--|------------|-|--|--+ +---|--|--------------|--+ +------------+
- | | | | | | |
- +-------------+ | +----------v-v--|--+ +---|--v-----------+ | +-------------+
- | VM Monitor | | | COLO Proxy | | COLO Proxy | | | VM Monitor |
- | | | |(compare packet) | | (adjust sequence)| | | |
- +-------------+ | +----------|----^--+ +------------------+ | +-------------+
- | | | |
- +------------------|------------|----|--+ +---------------------|------------------+
- | Kernel | | | | | Kernel | |
- +------------------|------------|----|--+ +---------------------|------------------+
- | | | |
- +--------------v+ +--------v----|--+ +------------------+ +v-------------+
- | Storage | |External Network| | External Network | | Storage |
- +---------------+ +----------------+ +------------------+ +--------------+
+ Primary Node Secondary Node
++------------+ +-----------------------+ +------------------------+ +------------+
+| | | HeartBeat +<----->+ HeartBeat | | |
+| Primary VM | +-----------+-----------+ +-----------+------------+ |Secondary VM|
+| | | | | |
+| | +-----------|-----------+ +-----------|------------+ | |
+| | |QEMU +---v----+ | |QEMU +----v---+ | | |
+| | | |Failover| | | |Failover| | | |
+| | | +--------+ | | +--------+ | | |
+| | | +---------------+ | | +---------------+ | | |
+| | | | VM Checkpoint +-------------->+ VM Checkpoint | | | |
+| | | +---------------+ | | +---------------+ | | |
+|Requests<--------------------------\ /-----------------\ /--------------------->Requests|
+| | | ^ ^ | | | | | | |
+|Responses+---------------------\ /-|-|------------\ /-------------------------+Responses|
+| | | | | | | | | | | | | | | |
+| | | +-----------+ | | | | | | | | | | +----------+ | | |
+| | | | COLO disk | | | | | | | | | | | | COLO disk| | | |
+| | | | Manager +---------------------------->| Manager | | | |
+| | | ++----------+ v v | | | | | v v | +---------++ | | |
+| | | |+-----------+-+-+-++| | ++-+--+-+---------+ | | | |
+| | | || COLO Proxy || | | COLO Proxy | | | | |
+| | | || (compare packet || | |(adjust sequence | | | | |
+| | | ||and mirror packet)|| | | and ACK) | | | | |
+| | | |+------------+---+-+| | +-----------------+ | | | |
++------------+ +-----------------------+ +------------------------+ +------------+
++------------+ | | | | +------------+
+| VM Monitor | | | | | | VM Monitor |
++------------+ | | | | +------------+
++---------------------------------------+ +----------------------------------------+
+| Kernel | | | | | Kernel | |
++---------------------------------------+ +----------------------------------------+
+ | | | |
+ +--------------v+ +---------v---+--+ +------------------+ +v-------------+
+ | Storage | |External Network| | External Network | | Storage |
+ +---------------+ +----------------+ +------------------+ +--------------+
+
== Components introduction ==
COLO Proxy:
Delivers packets to Primary and Seconday, and then compare the responses from
both side. Then decide whether to start a checkpoint according to some rules.
-Please refer to docs/colo-proxy.txt for more informations.
+Please refer to docs/colo-proxy.txt for more information.
Note:
HeartBeat has not been implemented yet, so you need to trigger failover process
== Test procedure ==
1. Startup qemu
Primary:
-# qemu-kvm -enable-kvm -m 2048 -smp 2 -qmp stdio -vnc :7 -name primary \
- -device piix3-usb-uhci \
+# qemu-system-x86_64 -accel kvm -m 2048 -smp 2 -qmp stdio -name primary \
+ -device piix3-usb-uhci -vnc :7 \
-device usb-tablet -netdev tap,id=hn0,vhost=off \
-device virtio-net-pci,id=net-pci0,netdev=hn0 \
-drive if=virtio,id=primary-disk0,driver=quorum,read-pattern=fifo,vote-threshold=1,\
children.0.file.filename=1.raw,\
children.0.driver=raw -S
Secondary:
-# qemu-kvm -enable-kvm -m 2048 -smp 2 -qmp stdio -vnc :7 -name secondary \
- -device piix3-usb-uhci \
+# qemu-system-x86_64 -accel kvm -m 2048 -smp 2 -qmp stdio -name secondary \
+ -device piix3-usb-uhci -vnc :7 \
-device usb-tablet -netdev tap,id=hn0,vhost=off \
-device virtio-net-pci,id=net-pci0,netdev=hn0 \
-drive if=none,id=secondary-disk0,file.filename=1.raw,driver=raw,node-name=node0 \