1、配置

1、建立复制

建立复制前会删除全部数据。

配置复制的方式有三种;

  1. 配置文件中加入 slaveof {masterHost} {masterPort}
  2. redis 启动命令后加入 slaveof {masterHost} {masterPort}
  3. 直接执行命令 slaveof {masterHost} {masterPort}

2、断开复制

在从节点执行命令 slaveof no one 来断开复制。所谓切主操作,就是先断开复制,然后再建立复制

3、安全性

为了安全性,一般都会在主节点上设置 requirepass 123456,所有客户端访问必须使用 auth 123456 验证。因此从节点开启复制时,也要设置 masterauth 123456

4、只读

默认情况下,从节点使用 slave-read-only=yes 配置为只读模式。由于已经开启了复制,建议从节点保持只读模式。

5、传输延迟

主从节点之间复制数据,肯定会有延迟。

redis 提供了 repl-disable-tcp-nodelay 参数用于关闭 TCP_NODELAY,默认关闭。

  • 当关闭时,主节点的数据无论大小都会发送到从节点,这样就降低了延迟,但增加了带宽。
  • 当开启时,主节点会合并较小的 TCP 数据包,从而节省带宽。

2、拓扑

主要有三种;一主一从一主多从树状主从

  • 一主一从: 最简单的结构,一般只在 从节点上开启 AOF 操作。
  • 一主多从: 用于读多写少、读写分离的场景
  • 树状主从: 从节点不但可以复制主节点的数据,还可以作为其他的节点的主节点。

3、原理

1、复制过程

  1. 执行 slaveof {masterHost} {masterPort} 命令后,保存主节点信息。
  2. 从节点每秒运行定时任务维护复制逻辑,当发现新的主节点后,建立连接。
  3. 发送 ping 命令,主要是检查网络是否可用和是否可以处理命令(可能主节点阻塞了)。
  4. 权限验证,requirepassmasterauth 是否匹配。
  5. 同步数据集,分为全量同步部分同步
  6. 命令持续复制,新的命令持续发给从节点。

2、数据同步

同步过程分为全量复制部分复制

  1. 参与主从复制的节点都会维护自身复制偏移量。命令 infomaster_repl_offsetslave_repl_offset
  2. 复制积压缓冲区,主节点把命令发送从节点,还会把命令写入复制积压缓冲区,这个用于部分复制和命令丢失的场景。命令 inforepl_backlog_*
  3. 主节点运行 ID,用来唯一识别 Redis 节点,当运行 ID 变化了,从节点将做全量复制了。节点重启了,运行 ID 也会变化。可以执行命令 debug reload 来重新加载并保持运行 ID 不变,但是会阻塞当前 Redis。 命令 inforun_id

3、全量复制

4、部分复制

5、心跳

6、异步复制

4、开发与运维中的问题

0%