Redis主从复制重要配置参数

TrumanWong
12/7/2024
TrumanWong

本文主要总结与主从复制架构相关的重要配置,以及这些配置的作用和配置方法。

REPLICAOF

REPLICAOF <host port | NO ONE>

Redis启动时起作用,作用是建立主从关系,开启了该配置后Redis服务器在启动后成为从节点。

如果Redis服务器已经充当从节点,则命令REPLICAOF NO ONE将关闭主从复制,将 Redis 服务器变为主服务器。

repl-ping-replica-period

repl-ping-replica-period 10

命令传播阶段主从节点的超时判断,主节点每隔repl-ping-replica-period秒向从节点发送ping指定。默认为10秒。

repl-timeout

repl-timeout 60

与各个阶段主从节点连接超时判断有关。repl-timeout参数值一定要大于 repl-ping-replica-period ,否则每次主节点和从节点之间的流量较低时都会检测到超时。默认值是60秒。

repl-diskless-sync

repl-diskless-sync yes

作用于全量复制阶段,控制主节点是否使用无盘diskless复制。所谓无盘复制,是指在全量复制时主节点不再是把数据写入RDB文件,而是直接写入从节点的socket中,整个过程中不涉及硬盘。无盘复制在磁盘IO很慢而网速很快时更有优势,这个配置项默认是开启的。

repl-diskless-sync-delay

repl-diskless-sync-delay 5

该配置作用于全量复制阶段,当主节点使用无盘复制时,该配置决定主节点向从节点发送之前延迟的时间,单位是秒;只有当无盘复制启用时有效,默认为5秒。之所以设置延迟时间,是基于两个考虑:一是向从节点的socket传输一旦开始,新连接的从节点只能等待当前数据传输结束才能进行新的数据传输;二是多个从节点有较大的概率在短时间内建立主从复制。

client-output-buffer-limit

语法:

client-output-buffer-limit <class> <hard limit> <soft limit> <soft seconds>

默认值

client-output-buffer-limit replica 256mb 64mb 60

与全量复制阶段主节点的缓冲区大小有关,如果在复制期间内存缓冲区持续消耗超过64MB或者一次性超过256MB,就会停止复制,造成复制失败,主从就要重新建立连接。

repl-disable-tcp-nodelay

repl-disable-tcp-nodelay no

与命令传播阶段的延迟有关,默认为关闭。

masterauth

masterauth <master-password>

与连接建立阶段的身份验证有关,需要输入在主节点设置的密码。

masteruser

masteruser <username>

redis 6.0开始新增的配置,与连接建立阶段的身份验证有关,需要输入在主节点设置的用户名。

repl-backlog-size

repl-backlog-size 1mb

复制积压缓冲区的大小,默认为1mb

repl-backlog-ttl

repl-backlog-ttl 3600

当主节点没有从节点时,复制积压缓冲区保留的时间,这样当断开的从节点重新连进来时可以进行部分复制,默认为3600秒。如果设置为0,则永远不会释放复制积压缓冲区。

min-replicas-to-writemin-replicas-max-lag

min-replicas-to-write 3
min-replicas-max-lag 10

min-replicas-to-write 3min-replicas-max-lag 10用于设定主节点的最小从节点数目及对应的最大延迟,含义是如果从节点数量小于3个或所有从节点的延迟都大于10秒,那么主节点在拒绝执行写命令时会给客户端返回错误。

replica-serve-stale-data

replica-serve-stale-data yes

replica-serve-stale-data与从节点数据陈旧时是否响应客户端命令有关,它用于控制在这种情况下从节点的表现。如果为yes(默认值),则从节点仍能够响应客户端的命令;如果为no,则从节点只能响应inforeplicaof等少数命令。该参数的设置与应用数据一致性的要求有关,如果对数据一致性要求很高,就应设置为no

replica-read-only

replica-read-only yes

从节点是否只读:默认是yes只读的。由于从节点开启写操作容易导致主从节点的数据不一致,因此尽量不要修改该配置。