前言
这里的配置参数即 /usr/local/redis/config/redis.conf
中的 REPLICATION 部分。
适用于 master 角色的配置参数
-
repl-diskless-sync yes
– 复制时是否使用无盘同步。若网络速度很快,则推荐配置为 yes;如果 replica 数量很多,设置为 no 则会有较高的性能。当新的 replica 加入到了 主从复制 后,新的 replica 需要执行「全量同步」,master 此时会将 RDB 文件或文件内容传输到 replica 上,传输通过以下两种方式:- 磁盘备份(disk-backed):master 会创建一个新的进程,将 RDB 文件写入到磁盘中,稍后则通过 master 将该文件传输到 replica 上
- 无盘(diskless):master 会创建一个新的进程,直接将 RDB 文件内容通过 socket 方式传输给 replica,不需要经过 master 的磁盘
-
repl-diskless-sync-delay 5
– 在使用 无盘 同步时,需要先确认各个 replica 是否可达,也就是传输 RDB 文件内容之前的等待时间,以秒为单位。 -
repl-diskless-sync-max-replicas 0
– Redis 7.0 中的配置。启用了无盘同步,预期要连接的 replica 数量,如果到达了定义的 replica 数量,则可以在repl-diskless-sync-delay
之前开始复制同步工作。默认为 0 ,表示未定义最大数量 -
repl-ping-replica-period 10
– 默认被注释的行。master 定期向各个 replica 发送心跳 ping ,以探测它们是否还是存活的状态。默认10 秒发送一次 -
repl-disable-tcp-nodelay no
– 同步之后,replica 的 socket 是否关闭 TCP-NODELAY。TCP-NODELAY 是 TCP 中的一个属性。- yes,使用较少的 TCP 数据包和较少的带宽向 replica 发送数据,但对于 replica 而言,会增加数据的延迟
- no,数据出现在 replica 的延迟将减少,但会占用更多的带宽
-
repl-backlog-size 1mb
– 默认被注释的行。设置 复制 时的 backlog 大小 -
repl-backlog-ttl 3600
– 默认被注释的行。backlog 的生存时间,以秒为单位 -
min-replicas-to-write 3
和min-replicas-max-lag 10
– 默认被注释的行。正常情况下,当 replica 失去了与 master 的连接后,master 不会采取任何措施和行为,继续提供读写操作。但有了这两个参数,则可以控制 master 的行为,这里指的是——若 replica 的可用活跃数量少于 3 个且最后一次成功通信的时间间隔小于等于 10 秒(也就是 master 发送心跳 ping 且成功回复之后的十秒之内),则 master 可能不再接受客户端的写操作。
适用于 replica 角色的配置参数
-
replicaof <masterip> <masterport>
– 指定 master 的 IP 地址和端口 -
masterauth <master-password>
– 指定认证的密码 -
replica-serve-stale-data yes
– 当 replica 与 master 失去连接或复制同步工作正在进行时,replica 的运行方式:- 设置为 yes,表示 replica 继续响应客户端的 读 请求,但可能响应的是旧数据或空数据
- 设置为 no,表示必须等待数据同步的工作完成,否则会出现「正在与 master 同步」(SYNC with master in progress)的错误
-
replica-read-only yes
– replica 是否只读 -
repl-diskless-load disabled
– replica 是否使用无盘加载。值可以有:- disabled,不使用 无盘加载,replica 先将同步过来的 RDB 文件存储到磁盘
- on-empty-db,安全情况下的无盘加载,仅当当前数据集为空时才使用无盘加载,避免加载过程中同时加载新数据或旧数据
- swapdb,直接通过 socket 获取 RDB 数据,并将解析出来的数据保存在内存中。这需要 replica 拥有足够多的空闲内存
-
repl-timeout 60
– 默认被注释的行。replica 复制的超时时间,默认 60 秒 -
replica-priority 100
– replica 的优先级,数字越小优先级越高。比如当 master 不再正常工作时,将根据各个 replica 中这个参数的值重新选举 master。这其实是哨兵模式里的内容。注意!设置为 0 的 replica 是不能成为 master 角色的 -
propagation-error-behavior ignore
– 默认被注释的行。传播错误时的行为控制,为了解决数据不一致的问题,可以有:- ignore
- panic
- panic-on-replicas
-
replica-ignore-disk-write-errors no
– 默认被注释的行。控制当 replica 无法从 master 接收到写入命令将数据写入到磁盘时的行为,设置为 no 可能会使 replica 崩溃。不建议修改为 yes -
replica-announced yes
– 默认被注释的行。哨兵模式里的内容。哨兵模式下,是否报告所有的 replica -
replica-announce-ip 5.5.5.5
和replica-announce-port 1234
– 默认被注释的行。哨兵模式里的内容。master 可以通过不同的方式列出连接的 replica 的 IP 和端口。