Skip to content

主从同步

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 的主从同步过程包括以下几个步骤:

  1. 连接建立:从节点向主节点发起 TCP 连接
  2. 握手验证:从节点发送 PING 命令验证连接
  3. 配置同步:从节点发送 REPLCONF 命令同步配置信息
  4. 全量同步:从节点发送 PSYNC 命令请求全量数据同步
  5. RDB传输:主节点生成 RDB 快照并传输给从节点
  6. 增量同步:主节点实时将写命令传播给从节点

从节点只读模式

为了保证数据一致性,Rudis 的从节点强制设置为只读模式,禁止执行写操作。当从节点接收到写命令时,会返回错误信息。

主从同步命令

Rudis 支持以下主从同步相关命令:

REPLCONF

用于配置主从复制参数,从节点在连接主节点时会发送此命令。

PSYNC

用于同步数据,支持全量同步和增量同步两种模式:

  • 全量同步:PSYNC ? -1
  • 增量同步:PSYNC <replicationid> <offset>

主从同步状态

Rudis 的主从同步有以下几种状态:

  • Connecting:正在连接主节点
  • Disconnected:与主节点断开连接
  • WaitPsync:等待 PSYNC 响应
  • ReceivingRdb:正在接收 RDB 文件
  • Connected:已连接并同步完成

故障处理

当主从同步出现故障时,Rudis 会自动尝试重新连接。如果长时间无法连接,从节点会保持断开状态,直到主节点恢复正常。

使用场景

主从同步功能适用于以下场景:

  1. 数据备份:从节点可以作为数据的热备份
  2. 读写分离:将读操作分散到从节点,减轻主节点压力
  3. 高可用性:当主节点出现故障时,可以从节点接管服务
  4. 地理位置分布:在不同地理位置部署从节点,提高访问速度

注意事项

  1. 从节点强制只读,不能执行写操作
  2. 主从同步可能存在短暂延迟,不适合对一致性要求极高的场景
  3. 网络不稳定可能导致同步中断,需要监控同步状态
  4. 从节点的数据依赖于主节点,主节点数据丢失会影响从节点

Released under the GPL-3.0 License.