复制命令参考(Replication commands reference)
本参考指南列出了 Memgraph Community 版中所有与复制(Replication)相关的命令,用于角色管理、副本注册、监控等操作。
角色管理命令(Role management commands)
SET REPLICATION ROLE TO REPLICA
SET REPLICATION ROLE TO REPLICA WITH PORT <port_number>;
说明(Behavior):
- 将当前实例从 MAIN 降级为 REPLICA。
- 在指定的
<port_number>上启动复制服务器以接受 MAIN 发送的数据。 - REPLICA 实例只能执行只读查询。
什么时候使用(When to use): 在你希望某个实例成为复制集群的副本前,首先在对应实例上运行此命令。
SET REPLICATION ROLE TO MAIN
SET REPLICATION ROLE TO MAIN;
说明(Behavior):
- 将当前 REPLICA 实例提升为 MAIN 实例。
- 若实例已经是 MAIN,则该命令将抛出异常。
- 在一个复制集群中应始终只有一个 MAIN 实例;因此在执行此命令时要小心,避免造成多个 MAIN。
- 若多个 MAIN 并存,则需手动解决冲突。
什么时候使用(When to use): 一般情况下,在第一次启动 Memgraph 时无需运行该命令;只有在执行手动故障切换时才可能使用它。
SHOW REPLICATION ROLE
SHOW REPLICATION ROLE;
说明(Returns):
- 显示当前实例的复制角色(
"main"或"replica")。
示例输出:
+------------------+
| replication role |
+------------------+
| "replica" |
+------------------+
什么时候使用(When to use): 在 Community 版中没有自动路由机制时,可用此命令判断哪个实例是 MAIN,从而决定在何处执行写操作。
副本注册命令(Replica registration commands)
REGISTER REPLICA(SYNC 模式)
REGISTER REPLICA <name> SYNC TO "<socket_address>";
参数说明(Parameters):
<name>— 副本实例的唯一名称。<socket_address>— 格式为"IP_ADDRESS|DNS_NAME:PORT_NUMBER"或"IP_ADDRESS|DNS_NAME"(默认端口为10000)。
说明(Behavior):
- 在 MAIN 上以 SYNC 模式注册一个 REPLICA。
- 注册后,MAIN 会将自身的数据与该副本同步。
影响(Implications):
- 在提交事务时,MAIN 会等待 SYNC 副本确认。
- 若 SYNC 副本挂掉,MAIN 仍能继续提交(与 STRICT_SYNC 不同)。
- SYNC 模式可保证数据一致性,但写性能较低,并存在极小的数据丢失风险。
示例:
REGISTER REPLICA REP1 SYNC TO "172.17.0.3:10000";
REGISTER REPLICA(ASYNC 模式)
REGISTER REPLICA <name> ASYNC TO "<socket_address>";
参数说明与 SYNC 相同。
说明(Behavior):
- 以 ASYNC 模式在 MAIN 上注册一个 REPLICA。
- MAIN 会将当前数据发送给副本。
影响(Implications):
- MAIN 提交事务时不等待副本确认。
- 数据复制在后台线程完成,具有更好性能和更高可用性(AP),但可能存在数据最终一致性和潜在数据丢失风险。
示例:
REGISTER REPLICA REP2 ASYNC TO "172.17.0.4";
REGISTER REPLICA(STRICT_SYNC 模式)
REGISTER REPLICA <name> STRICT_SYNC TO "<socket_address>";
参数说明与 SYNC 相同。
说明(Behavior):
- 以严格同步模式在 MAIN 上注册一个 REPLICA。
- 使用两阶段提交协议(2PC)来保证写入的强一致性。
影响(Implications):
- 若 STRICT_SYNC 副本不可用,则 MAIN 无法提交事务。
- 适用于需要零数据丢失的高可用场景,但写性能会显著下降。
示例:
REGISTER REPLICA REP3 STRICT_SYNC TO "172.17.0.5:10000";
DROP REPLICA
DROP REPLICA <name>;
参数说明(Parameters):
<name>— 要删除的 REPLICA 名称。
说明(Behavior):
- 将指定 REPLICA 从 MAIN 的注册列表中移除。
- 副本实例仍保持为 REPLICA 角色,但不再参与复制集群。
什么时候使用(When to use):
当某个副本无法恢复或需要重新创建时,可先执行 DROP REPLICA,再重新注册。
示例:
DROP REPLICA REP1;
监控命令(Monitoring commands)
SHOW REPLICAS
SHOW REPLICAS;
说明(Returns):
列出所有已注册的 REPLICA 实例及其详细状态信息,包括:
- 副本名称
- 网络地址(IP/DNS + 复制端口)
- 复制模式(SYNC / ASYNC / STRICT_SYNC)
- 系统信息
- 每个数据库的数据状态(滞后 tick、状态、时间戳等)
示例输出:
+--------+--------------------+-----------+-------------+-------------------------------------------------+
| name | socket_address | sync_mode | system_info | data_info |
+--------+--------------------+-----------+-------------+-------------------------------------------------+
| "REP1" | "172.17.0.3:10000" | "sync" | Null | {memgraph: {behind: 0, status: "ready", ts: 0}} |
| "REP2" | "172.17.0.4:10000" | "async" | Null | {memgraph: {behind: 0, status: "ready", ts: 0}} |
+--------+--------------------+-----------+-------------+-------------------------------------------------+
Socket 地址格式(Socket address formats)
IP 地址格式
"IP_ADDRESS|DNS_NAME:PORT_NUMBER"
示例:
"172.17.0.4:10050"
IP 地址(默认端口)
"IP_ADDRESS"
示例:
"172.17.0.5"
默认端口为 10000。
DNS 名称格式
"DNS_NAME:PORT_NUMBER"
示例:
"memgraph-replica.memgraph.net:10050"
DNS 名称(默认端口)
"DNS_NAME"
示例:
"memgraph-replica.memgraph.net"
参考资料
https://memgraph.com/docs/clustering/replication/replication-commands-reference
