docs: Use double quotes instead of single quotes for COLO

Signed-off-by: Lei Rao <lei.rao@intel.com>
Message-Id: <1637567387-28250-2-git-send-email-lei.rao@intel.com>
Reviewed-by: Markus Armbruster <armbru@redhat.com>
Signed-off-by: Thomas Huth <thuth@redhat.com>
This commit is contained in:
Rao, Lei 2021-11-22 15:49:47 +08:00 committed by Thomas Huth
parent 8f75cae2dd
commit eff708a876
2 changed files with 79 additions and 79 deletions

View File

@ -209,9 +209,9 @@ children.0=childs0 \
3. On Secondary VM's QEMU monitor, issue command 3. On Secondary VM's QEMU monitor, issue command
{'execute':'qmp_capabilities'} {"execute":"qmp_capabilities"}
{'execute': 'nbd-server-start', 'arguments': {'addr': {'type': 'inet', 'data': {'host': '0.0.0.0', 'port': '9999'} } } } {"execute": "nbd-server-start", "arguments": {"addr": {"type": "inet", "data": {"host": "0.0.0.0", "port": "9999"} } } }
{'execute': 'nbd-server-add', 'arguments': {'device': 'parent0', 'writable': true } } {"execute": "nbd-server-add", "arguments": {"device": "parent0", "writable": true } }
Note: Note:
a. The qmp command nbd-server-start and nbd-server-add must be run a. The qmp command nbd-server-start and nbd-server-add must be run
@ -222,11 +222,11 @@ Note:
will be merged into the parent disk on failover. will be merged into the parent disk on failover.
4. On Primary VM's QEMU monitor, issue command: 4. On Primary VM's QEMU monitor, issue command:
{'execute':'qmp_capabilities'} {"execute":"qmp_capabilities"}
{'execute': 'human-monitor-command', 'arguments': {'command-line': 'drive_add -n buddy driver=replication,mode=primary,file.driver=nbd,file.host=127.0.0.2,file.port=9999,file.export=parent0,node-name=replication0'}} {"execute": "human-monitor-command", "arguments": {"command-line": "drive_add -n buddy driver=replication,mode=primary,file.driver=nbd,file.host=127.0.0.2,file.port=9999,file.export=parent0,node-name=replication0"}}
{'execute': 'x-blockdev-change', 'arguments':{'parent': 'colo-disk0', 'node': 'replication0' } } {"execute": "x-blockdev-change", "arguments":{"parent": "colo-disk0", "node": "replication0" } }
{'execute': 'migrate-set-capabilities', 'arguments': {'capabilities': [ {'capability': 'x-colo', 'state': true } ] } } {"execute": "migrate-set-capabilities", "arguments": {"capabilities": [ {"capability": "x-colo", "state": true } ] } }
{'execute': 'migrate', 'arguments': {'uri': 'tcp:127.0.0.2:9998' } } {"execute": "migrate", "arguments": {"uri": "tcp:127.0.0.2:9998" } }
Note: Note:
a. There should be only one NBD Client for each primary disk. a. There should be only one NBD Client for each primary disk.
@ -249,59 +249,59 @@ if you want to resume the replication, follow "Secondary resume replication"
== Primary Failover == == Primary Failover ==
The Secondary died, resume on the Primary The Secondary died, resume on the Primary
{'execute': 'x-blockdev-change', 'arguments':{ 'parent': 'colo-disk0', 'child': 'children.1'} } {"execute": "x-blockdev-change", "arguments":{ "parent": "colo-disk0", "child": "children.1"} }
{'execute': 'human-monitor-command', 'arguments':{ 'command-line': 'drive_del replication0' } } {"execute": "human-monitor-command", "arguments":{ "command-line": "drive_del replication0" } }
{'execute': 'object-del', 'arguments':{ 'id': 'comp0' } } {"execute": "object-del", "arguments":{ "id": "comp0" } }
{'execute': 'object-del', 'arguments':{ 'id': 'iothread1' } } {"execute": "object-del", "arguments":{ "id": "iothread1" } }
{'execute': 'object-del', 'arguments':{ 'id': 'm0' } } {"execute": "object-del", "arguments":{ "id": "m0" } }
{'execute': 'object-del', 'arguments':{ 'id': 'redire0' } } {"execute": "object-del", "arguments":{ "id": "redire0" } }
{'execute': 'object-del', 'arguments':{ 'id': 'redire1' } } {"execute": "object-del", "arguments":{ "id": "redire1" } }
{'execute': 'x-colo-lost-heartbeat' } {"execute": "x-colo-lost-heartbeat" }
== Secondary Failover == == Secondary Failover ==
The Primary died, resume on the Secondary and prepare to become the new Primary The Primary died, resume on the Secondary and prepare to become the new Primary
{'execute': 'nbd-server-stop'} {"execute": "nbd-server-stop"}
{'execute': 'x-colo-lost-heartbeat'} {"execute": "x-colo-lost-heartbeat"}
{'execute': 'object-del', 'arguments':{ 'id': 'f2' } } {"execute": "object-del", "arguments":{ "id": "f2" } }
{'execute': 'object-del', 'arguments':{ 'id': 'f1' } } {"execute": "object-del", "arguments":{ "id": "f1" } }
{'execute': 'chardev-remove', 'arguments':{ 'id': 'red1' } } {"execute": "chardev-remove", "arguments":{ "id": "red1" } }
{'execute': 'chardev-remove', 'arguments':{ 'id': 'red0' } } {"execute": "chardev-remove", "arguments":{ "id": "red0" } }
{'execute': 'chardev-add', 'arguments':{ 'id': 'mirror0', 'backend': {'type': 'socket', 'data': {'addr': { 'type': 'inet', 'data': { 'host': '0.0.0.0', 'port': '9003' } }, 'server': true } } } } {"execute": "chardev-add", "arguments":{ "id": "mirror0", "backend": {"type": "socket", "data": {"addr": { "type": "inet", "data": { "host": "0.0.0.0", "port": "9003" } }, "server": true } } } }
{'execute': 'chardev-add', 'arguments':{ 'id': 'compare1', 'backend': {'type': 'socket', 'data': {'addr': { 'type': 'inet', 'data': { 'host': '0.0.0.0', 'port': '9004' } }, 'server': true } } } } {"execute": "chardev-add", "arguments":{ "id": "compare1", "backend": {"type": "socket", "data": {"addr": { "type": "inet", "data": { "host": "0.0.0.0", "port": "9004" } }, "server": true } } } }
{'execute': 'chardev-add', 'arguments':{ 'id': 'compare0', 'backend': {'type': 'socket', 'data': {'addr': { 'type': 'inet', 'data': { 'host': '127.0.0.1', 'port': '9001' } }, 'server': true } } } } {"execute": "chardev-add", "arguments":{ "id": "compare0", "backend": {"type": "socket", "data": {"addr": { "type": "inet", "data": { "host": "127.0.0.1", "port": "9001" } }, "server": true } } } }
{'execute': 'chardev-add', 'arguments':{ 'id': 'compare0-0', 'backend': {'type': 'socket', 'data': {'addr': { 'type': 'inet', 'data': { 'host': '127.0.0.1', 'port': '9001' } }, 'server': false } } } } {"execute": "chardev-add", "arguments":{ "id": "compare0-0", "backend": {"type": "socket", "data": {"addr": { "type": "inet", "data": { "host": "127.0.0.1", "port": "9001" } }, "server": false } } } }
{'execute': 'chardev-add', 'arguments':{ 'id': 'compare_out', 'backend': {'type': 'socket', 'data': {'addr': { 'type': 'inet', 'data': { 'host': '127.0.0.1', 'port': '9005' } }, 'server': true } } } } {"execute": "chardev-add", "arguments":{ "id": "compare_out", "backend": {"type": "socket", "data": {"addr": { "type": "inet", "data": { "host": "127.0.0.1", "port": "9005" } }, "server": true } } } }
{'execute': 'chardev-add', 'arguments':{ 'id': 'compare_out0', 'backend': {'type': 'socket', 'data': {'addr': { 'type': 'inet', 'data': { 'host': '127.0.0.1', 'port': '9005' } }, 'server': false } } } } {"execute": "chardev-add", "arguments":{ "id": "compare_out0", "backend": {"type": "socket", "data": {"addr": { "type": "inet", "data": { "host": "127.0.0.1", "port": "9005" } }, "server": false } } } }
== Primary resume replication == == Primary resume replication ==
Resume replication after new Secondary is up. Resume replication after new Secondary is up.
Start the new Secondary (Steps 2 and 3 above), then on the Primary: Start the new Secondary (Steps 2 and 3 above), then on the Primary:
{'execute': 'drive-mirror', 'arguments':{ 'device': 'colo-disk0', 'job-id': 'resync', 'target': 'nbd://127.0.0.2:9999/parent0', 'mode': 'existing', 'format': 'raw', 'sync': 'full'} } {"execute": "drive-mirror", "arguments":{ "device": "colo-disk0", "job-id": "resync", "target": "nbd://127.0.0.2:9999/parent0", "mode": "existing", "format": "raw", "sync": "full"} }
Wait until disk is synced, then: Wait until disk is synced, then:
{'execute': 'stop'} {"execute": "stop"}
{'execute': 'block-job-cancel', 'arguments':{ 'device': 'resync'} } {"execute": "block-job-cancel", "arguments":{ "device": "resync"} }
{'execute': 'human-monitor-command', 'arguments':{ 'command-line': 'drive_add -n buddy driver=replication,mode=primary,file.driver=nbd,file.host=127.0.0.2,file.port=9999,file.export=parent0,node-name=replication0'}} {"execute": "human-monitor-command", "arguments":{ "command-line": "drive_add -n buddy driver=replication,mode=primary,file.driver=nbd,file.host=127.0.0.2,file.port=9999,file.export=parent0,node-name=replication0"}}
{'execute': 'x-blockdev-change', 'arguments':{ 'parent': 'colo-disk0', 'node': 'replication0' } } {"execute": "x-blockdev-change", "arguments":{ "parent": "colo-disk0", "node": "replication0" } }
{'execute': 'object-add', 'arguments':{ 'qom-type': 'filter-mirror', 'id': 'm0', 'netdev': 'hn0', 'queue': 'tx', 'outdev': 'mirror0' } } {"execute": "object-add", "arguments":{ "qom-type": "filter-mirror", "id": "m0", "netdev": "hn0", "queue": "tx", "outdev": "mirror0" } }
{'execute': 'object-add', 'arguments':{ 'qom-type': 'filter-redirector', 'id': 'redire0', 'netdev': 'hn0', 'queue': 'rx', 'indev': 'compare_out' } } {"execute": "object-add", "arguments":{ "qom-type": "filter-redirector", "id": "redire0", "netdev": "hn0", "queue": "rx", "indev": "compare_out" } }
{'execute': 'object-add', 'arguments':{ 'qom-type': 'filter-redirector', 'id': 'redire1', 'netdev': 'hn0', 'queue': 'rx', 'outdev': 'compare0' } } {"execute": "object-add", "arguments":{ "qom-type": "filter-redirector", "id": "redire1", "netdev": "hn0", "queue": "rx", "outdev": "compare0" } }
{'execute': 'object-add', 'arguments':{ 'qom-type': 'iothread', 'id': 'iothread1' } } {"execute": "object-add", "arguments":{ "qom-type": "iothread", "id": "iothread1" } }
{'execute': 'object-add', 'arguments':{ 'qom-type': 'colo-compare', 'id': 'comp0', 'primary_in': 'compare0-0', 'secondary_in': 'compare1', 'outdev': 'compare_out0', 'iothread': 'iothread1' } } {"execute": "object-add", "arguments":{ "qom-type": "colo-compare", "id": "comp0", "primary_in": "compare0-0", "secondary_in": "compare1", "outdev": "compare_out0", "iothread": "iothread1" } }
{'execute': 'migrate-set-capabilities', 'arguments':{ 'capabilities': [ {'capability': 'x-colo', 'state': true } ] } } {"execute": "migrate-set-capabilities", "arguments":{ "capabilities": [ {"capability": "x-colo", "state": true } ] } }
{'execute': 'migrate', 'arguments':{ 'uri': 'tcp:127.0.0.2:9998' } } {"execute": "migrate", "arguments":{ "uri": "tcp:127.0.0.2:9998" } }
Note: Note:
If this Primary previously was a Secondary, then we need to insert the If this Primary previously was a Secondary, then we need to insert the
filters before the filter-rewriter by using the filters before the filter-rewriter by using the
"'insert': 'before', 'position': 'id=rew0'" Options. See below. ""insert": "before", "position": "id=rew0"" Options. See below.
== Secondary resume replication == == Secondary resume replication ==
Become Primary and resume replication after new Secondary is up. Note Become Primary and resume replication after new Secondary is up. Note
@ -309,23 +309,23 @@ that now 127.0.0.1 is the Secondary and 127.0.0.2 is the Primary.
Start the new Secondary (Steps 2 and 3 above, but with primary_ip=127.0.0.2), Start the new Secondary (Steps 2 and 3 above, but with primary_ip=127.0.0.2),
then on the old Secondary: then on the old Secondary:
{'execute': 'drive-mirror', 'arguments':{ 'device': 'colo-disk0', 'job-id': 'resync', 'target': 'nbd://127.0.0.1:9999/parent0', 'mode': 'existing', 'format': 'raw', 'sync': 'full'} } {"execute": "drive-mirror", "arguments":{ "device": "colo-disk0", "job-id": "resync", "target": "nbd://127.0.0.1:9999/parent0", "mode": "existing", "format": "raw", "sync": "full"} }
Wait until disk is synced, then: Wait until disk is synced, then:
{'execute': 'stop'} {"execute": "stop"}
{'execute': 'block-job-cancel', 'arguments':{ 'device': 'resync' } } {"execute": "block-job-cancel", "arguments":{ "device": "resync" } }
{'execute': 'human-monitor-command', 'arguments':{ 'command-line': 'drive_add -n buddy driver=replication,mode=primary,file.driver=nbd,file.host=127.0.0.1,file.port=9999,file.export=parent0,node-name=replication0'}} {"execute": "human-monitor-command", "arguments":{ "command-line": "drive_add -n buddy driver=replication,mode=primary,file.driver=nbd,file.host=127.0.0.1,file.port=9999,file.export=parent0,node-name=replication0"}}
{'execute': 'x-blockdev-change', 'arguments':{ 'parent': 'colo-disk0', 'node': 'replication0' } } {"execute": "x-blockdev-change", "arguments":{ "parent": "colo-disk0", "node": "replication0" } }
{'execute': 'object-add', 'arguments':{ 'qom-type': 'filter-mirror', 'id': 'm0', 'insert': 'before', 'position': 'id=rew0', 'netdev': 'hn0', 'queue': 'tx', 'outdev': 'mirror0' } } {"execute": "object-add", "arguments":{ "qom-type": "filter-mirror", "id": "m0", "insert": "before", "position": "id=rew0", "netdev": "hn0", "queue": "tx", "outdev": "mirror0" } }
{'execute': 'object-add', 'arguments':{ 'qom-type': 'filter-redirector', 'id': 'redire0', 'insert': 'before', 'position': 'id=rew0', 'netdev': 'hn0', 'queue': 'rx', 'indev': 'compare_out' } } {"execute": "object-add", "arguments":{ "qom-type": "filter-redirector", "id": "redire0", "insert": "before", "position": "id=rew0", "netdev": "hn0", "queue": "rx", "indev": "compare_out" } }
{'execute': 'object-add', 'arguments':{ 'qom-type': 'filter-redirector', 'id': 'redire1', 'insert': 'before', 'position': 'id=rew0', 'netdev': 'hn0', 'queue': 'rx', 'outdev': 'compare0' } } {"execute": "object-add", "arguments":{ "qom-type": "filter-redirector", "id": "redire1", "insert": "before", "position": "id=rew0", "netdev": "hn0", "queue": "rx", "outdev": "compare0" } }
{'execute': 'object-add', 'arguments':{ 'qom-type': 'iothread', 'id': 'iothread1' } } {"execute": "object-add", "arguments":{ "qom-type": "iothread", "id": "iothread1" } }
{'execute': 'object-add', 'arguments':{ 'qom-type': 'colo-compare', 'id': 'comp0', 'primary_in': 'compare0-0', 'secondary_in': 'compare1', 'outdev': 'compare_out0', 'iothread': 'iothread1' } } {"execute": "object-add", "arguments":{ "qom-type": "colo-compare", "id": "comp0", "primary_in": "compare0-0", "secondary_in": "compare1", "outdev": "compare_out0", "iothread": "iothread1" } }
{'execute': 'migrate-set-capabilities', 'arguments':{ 'capabilities': [ {'capability': 'x-colo', 'state': true } ] } } {"execute": "migrate-set-capabilities", "arguments":{ "capabilities": [ {"capability": "x-colo", "state": true } ] } }
{'execute': 'migrate', 'arguments':{ 'uri': 'tcp:127.0.0.1:9998' } } {"execute": "migrate", "arguments":{ "uri": "tcp:127.0.0.1:9998" } }
== TODO == == TODO ==
1. Support shared storage. 1. Support shared storage.

View File

@ -156,15 +156,15 @@ Primary:
children.0.driver=raw children.0.driver=raw
Run qmp command in primary qemu: Run qmp command in primary qemu:
{ 'execute': 'human-monitor-command', { "execute": "human-monitor-command",
'arguments': { "arguments": {
'command-line': 'drive_add -n buddy driver=replication,mode=primary,file.driver=nbd,file.host=xxxx,file.port=xxxx,file.export=colo1,node-name=nbd_client1' "command-line": "drive_add -n buddy driver=replication,mode=primary,file.driver=nbd,file.host=xxxx,file.port=xxxx,file.export=colo1,node-name=nbd_client1"
} }
} }
{ 'execute': 'x-blockdev-change', { "execute": "x-blockdev-change",
'arguments': { "arguments": {
'parent': 'colo1', "parent": "colo1",
'node': 'nbd_client1' "node": "nbd_client1"
} }
} }
Note: Note:
@ -189,21 +189,21 @@ Secondary:
vote-threshold=1,children.0=childs1 vote-threshold=1,children.0=childs1
Then run qmp command in secondary qemu: Then run qmp command in secondary qemu:
{ 'execute': 'nbd-server-start', { "execute": "nbd-server-start",
'arguments': { "arguments": {
'addr': { "addr": {
'type': 'inet', "type": "inet",
'data': { "data": {
'host': 'xxx', "host": "xxx",
'port': 'xxx' "port": "xxx"
} }
} }
} }
} }
{ 'execute': 'nbd-server-add', { "execute": "nbd-server-add",
'arguments': { "arguments": {
'device': 'colo1', "device": "colo1",
'writable': true "writable": true
} }
} }
@ -223,22 +223,22 @@ After Failover:
Primary: Primary:
The secondary host is down, so we should run the following qmp command The secondary host is down, so we should run the following qmp command
to remove the nbd child from the quorum: to remove the nbd child from the quorum:
{ 'execute': 'x-blockdev-change', { "execute": "x-blockdev-change",
'arguments': { "arguments": {
'parent': 'colo1', "parent": "colo1",
'child': 'children.1' "child": "children.1"
} }
} }
{ 'execute': 'human-monitor-command', { "execute": "human-monitor-command",
'arguments': { "arguments": {
'command-line': 'drive_del xxxx' "command-line": "drive_del xxxx"
} }
} }
Note: there is no qmp command to remove the blockdev now Note: there is no qmp command to remove the blockdev now
Secondary: Secondary:
The primary host is down, so we should do the following thing: The primary host is down, so we should do the following thing:
{ 'execute': 'nbd-server-stop' } { "execute": "nbd-server-stop" }
Promote Secondary to Primary: Promote Secondary to Primary:
see COLO-FT.txt see COLO-FT.txt