主从同步
Rudis 支持主从同步(Replication)功能,允许将一个或多个从节点连接到主节点以实现数据同步和高可用性。
主从同步架构
Rudis 的主从同步采用经典的主从架构:
- 主节点(Master):负责处理所有写操作,并将数据变更传播给从节点
- 从节点(Slave):接收来自主节点的数据变更,保持与主节点的数据一致性
配置主节点
主节点无需特殊配置,默认情况下 Rudis 实例就是主节点。
配置从节点
要将 Rudis 实例配置为从节点,需要在配置文件中指定主节点的地址和端口,或者通过命令行参数指定:
配置文件方式
在 rudis.conf 配置文件中添加以下配置:
conf
# 配置当前节点为从节点,指定主节点的IP和端口
replicaof 127.0.0.1 6379命令行方式
启动 Rudis 时通过命令行参数指定:
bash
./rudis-server --replicaof 127.0.0.1 6379主从同步工作流程
Rudis 的主从同步过程包括以下几个步骤:
- 连接建立:从节点向主节点发起 TCP 连接
- 握手验证:从节点发送 PING 命令验证连接
- 配置同步:从节点发送 REPLCONF 命令同步配置信息
- 全量同步:从节点发送 PSYNC 命令请求全量数据同步
- RDB传输:主节点生成 RDB 快照并传输给从节点
- 增量同步:主节点实时将写命令传播给从节点
从节点只读模式
为了保证数据一致性,Rudis 的从节点强制设置为只读模式,禁止执行写操作。当从节点接收到写命令时,会返回错误信息。
主从同步命令
Rudis 支持以下主从同步相关命令:
REPLCONF
用于配置主从复制参数,从节点在连接主节点时会发送此命令。
PSYNC
用于同步数据,支持全量同步和增量同步两种模式:
- 全量同步:
PSYNC ? -1 - 增量同步:
PSYNC <replicationid> <offset>
主从同步状态
Rudis 的主从同步有以下几种状态:
Connecting:正在连接主节点Disconnected:与主节点断开连接WaitPsync:等待 PSYNC 响应ReceivingRdb:正在接收 RDB 文件Connected:已连接并同步完成
故障处理
当主从同步出现故障时,Rudis 会自动尝试重新连接。如果长时间无法连接,从节点会保持断开状态,直到主节点恢复正常。
使用场景
主从同步功能适用于以下场景:
- 数据备份:从节点可以作为数据的热备份
- 读写分离:将读操作分散到从节点,减轻主节点压力
- 高可用性:当主节点出现故障时,可以从节点接管服务
- 地理位置分布:在不同地理位置部署从节点,提高访问速度
注意事项
- 从节点强制只读,不能执行写操作
- 主从同步可能存在短暂延迟,不适合对一致性要求极高的场景
- 网络不稳定可能导致同步中断,需要监控同步状态
- 从节点的数据依赖于主节点,主节点数据丢失会影响从节点