Redis 主从架构之深扒配置文件(三)

136 阅读2分钟

「这是我参与11月更文挑战的第12天,活动详情查看:2021最后一次更文挑战」。

Redis 的配置文件配置比较多,我们将分几个章节依次击破,大家记得查看连载呦!我们接着上文中的配置信息继续往下说。

repl-timeout

默认值60秒,此选项用于设置以下情形的 timeout 判断:

  • 从 replica 节点的角度来看的 SYNC 过程中的 I/O 传输 —— 没有收到 master SYNC 传输的 rdb snapshot 数据;
  • 从 replica 节点的角度来看的 master 的 timeout(如 data,pings)—— replica 没有收到master发送的数据包或者ping;
  • 从 master 节点角度来看的 replica 的 timeout(如 REPLCONF ACK pings)—— master 没有收到 REPLCONF ACK 的确认信息; 需要注意的是,此选项必须大于 repl-ping-replica-period,否则在 master 和 replica 之间存在低业务量的情况下会经常发生 timeout。

repl-disable-tcp-nodelay

master 和 replicas 节点的连接是否关掉 TCP_NODELAY 选项。

  • 如果选择“yes”,Redis 将使用更少的 TCP 数据包和更少的带宽向 replicas 发送数据。但这会增加数据在 replicas 端显示的延迟,对于使用默认配置的 Linux 内核,延迟可达40毫秒。
  • 如果选择“no”,则数据出现在 replicas 端的延迟将减少,但复制将使用更多带宽。

这个实际影响的是 TCP 层的选项,里面会用 setsockopt 设置,默认为 no,表示 TCP 层会禁用 Nagle 算法,尽快将数据发出, 设置为 yes 表示 TCP 层启用 Nagle 算法,数据累积到一定程度,或者经过一定时间 TCP 层才会将其发出。

默认情况下,我们会针对低延迟进行优化,但在流量非常高的情况下,或者当 master 和 replicas 距离多个 hops 时,将此选项改为“yes”可能会更好。

repl-backlog-size

设置复制的 backlog 缓冲大小,默认 1mb。backlog 是一个缓冲区,当 replica 断开一段时间连接时,它会累积 replica 数据,所以当 replica 想要再次重新连接时,一般不需要全量同步,只需要进行部分同步即可,只传递 replica 在断开连接时丢失的部分数据。

更大的 backlog 缓冲大小,意味着 replicas 断开重连后,依然可以进行续传的时间越长(支持断开更长时间)。

backlog 缓冲只有在至少一个 replica 节点连过来的时候 master 节点才需要创建。

Redis 的配置文件配置比较多,我们将分几个章节依次击破,大家记得查看连载呦!如果你有不同的意见或者更好的idea,欢迎联系阿Q,添加阿Q可以加入技术交流群参与讨论呦!