「这是我参与11月更文挑战的第13天,活动详情查看:2021最后一次更文挑战」。
Redis 的配置文件配置比较多,我们将分几个章节依次击破,大家记得查看连载呦!我们接着上文中的配置信息继续往下说。
repl-backlog-ttl
当 replicas 节点断开连接后,master 节点会在一段时间后释放 backlog 缓冲区。 这个选项设置的是当最后一个 replica 断开链接后,master 需要等待多少秒再释放缓冲区。默认3600 秒,0表示永远不释放。
replicas 节点永远都不会释放这个缓冲区,因为它有可能再次连接到 master 节点, 然后尝试进行 “增量同步”。
replica-priority
replica-priority 是 Redis 通过 INFO 接口发布的整数,默认值为 100。 当 master 节点无法正常工作后 Redis Sentinel 通过这个值来决定将哪个 replica 节点提升为 master 节点。这个数值越小表示越优先进行提升。如有三个 replica 节点其 priority 值分别为 10,100,25, Sentinel 会选择 priority 为 10 的节点进行提升。这个值为 0 表示 replica 节点永远不能被提升为 master 节点。
min-replicas-to-write
min-replicas-max-lag
//表示要求至少3个延迟<=10秒的副本存在
min-replicas-to-write 3 //下文中的 N
min-replicas-max-lag 10 //下文中的 M
从 Redis 2.8 开始,如果连接的 replica 延迟小于或等于M秒的个数少于N个(N个 replica 需要处于“online”状态),则 master 可能停止接受写入并回复 error。由于 Redis 使用异步复制,因此无法确保 replica 是否实际接收到给定的写命令,因此总会有一个数据丢失窗口。
原理如下:
- replica 每秒钟都会 ping master,确认已处理的复制流的数量;
- master 会记得上一次从每个 replica 都收到 ping 的时间,延迟就是根据 master 从 replica 接收的最后一次 ping 计算的;
- 用户可以配置延迟不超过最大秒数的最小 replica 数;
此选项不保证 N 个副本将接受写入,但在没有足够的副本可用的情况下,将丢失写入的暴露窗口限制在指定的秒数内。
N 默认值为 0,M 默认值为10。任意一个设置为 0 表示不启用此功能。
replica-announce-ip 5.5.5.5
replica-announce-port 1234
Redis master 可以通过不同方式列出连接上来的 replicas 节点的地址和端口。 如 Redis Sentinel 等会使用 “INFO replication” 命令来获取 replica 实例信息,master 的“ROLE“ 命令也会提供此信息。
这个信息一般来说是通过 replica 节点通过以下方式获取然后报告上来的:
- IP:通过自动识别连接到 Socket 的信息自动获取
- Port:一般来说这个值就是 replicas 节点用来接受客户端的连接的监听端口
但是,若启用了端口转发或者 NAT,可能需要其他地址和端口才能连接到 replicas 节点。 这种情况下,需要设置这两个选项,这样 replicas 就会用这两个选项设置的值覆盖默认行为获取的值,然后报告给 master 节点。 根据实际情况,你可以只设置其中某个选项,而不用两个选项都设置。
配置的介绍到这里就结束了,接下来我们把上边提到的概念串起来,聊一下主从复制的相关原理。如果你有不同的意见或者更好的idea,欢迎联系阿Q,添加阿Q可以加入技术交流群参与讨论呦!