主从复制的常用相关配

1. slaveof
 

slaveof <masterip> <masterport>
slave实例需要配置该项,指向master的(ip, port)

2.masterauth

masterauth <master-password>
如果master实例启用了密码保护,则该配置项需填master的启动密码;若master未启用密码,该配置项需要注释掉

3.slave-serve-stale-data

指定 slave 与 master 连接中断时的动作。默认为yes,表明slave会继续应答来自client的请求,但这些数据可能已经过期(因为连接中断导致无法从 master 同 步)。 若配置为no,则slave除正常应答"INFO"和"SLAVEOF"命令外,其余来自客户端的请求命令均会得到" SYNC with master in progress "的应答,直到该 slave与 master 的连接重建成功或该 slave 被提升为 master

4.slave-read-only 

指定slave是否只读,默认为yes。若配置为no,这表示slave是可写的,但写的内容在主从同步完成后会被删掉 

5.repl-disable-tcp-nodelay

指定向slave同步数据时,是否禁用 socket 的 NO_DELAY 选项。若配置为yes,则禁用 NO_DELAY ,则TCP协议栈会合并小包统一发送,这样可以减少主从节点 间 的包数量并节省带宽,但会增加数据同步到slave的时间。 若配置为no,表明启用 NO_DELAY ,则TCP协议栈不会延迟小包的发送时机,这样数据同步的延时会减 少,但需要更大的带宽。通常情况下,应该配置为no以降 低同步延时,但在主从节点间网络负载已经很高的情况下,可以配置为yes 6. slave-priority 指定 slave 的优先级。在不只1个 slave 存在的部署环境下,当 master 宕机时, Redis Sentinel 会将priority值最小的slave提升为master。需要注意的是,若 该配置 项为0,则对应的slave永远不会被 Redis Sentinel 自动提升为 master

读写分离

复制数据延迟怎么处理?

Redis复制数据的延迟由于异步复制特性是无法避免的,延迟取决于网络带宽和命令阻塞情况,比如刚在主节点写人数据后立刻在从节点上读取可能获取不到。需 要业务场景允许短时间内的数据延迟。对于无法容忍大量延迟场景,可以编写外部监控程序监听主从节点的复制偏移量,当延迟较大时触发报警或者通知客户端避 免读取延迟过高的从节点,实现逻辑
处理说明:
1. 监控程序(monitor)定期检查主从节点的偏移量,主节点偏移量在info replication的master_repl_offset 指标记录,从节点偏移量可以查询主节点的slave0字段的 offset指标,它们的差值就是主从节点延迟的字节量。
2. 对于无法容忍大量延迟场景,可以编写外部监控程序监听主从节点的复制偏移量,当延迟较大时触发报警或者通知客户端避免读取延迟过高的从节点同时从节 点的slave-serve-stale-data参数也与此有关,它控制这种情况下从节点的表现当从库同主机失去连接或者复制正在进行,从机库有两种运行方式

读取过期数据
当主节点存储大量设置超时的数据时,redis内部需要维护过期数据删除策略,删除策略主要有两种:惰性删除和定时删除;
惰性删除:主节点每次处理读取命令时,都会检查键是否超时,如果超时则执行del命令删除键对象,之后del命令也会异步发送给从节点。因为保持复制的 一致性,从节点自身永远不会主动删除超时数据。
 定时删除:Redis主节点在内部定时任务会循环采样一定数据量的键,当发现采样的键过期时执行del命令,之后再同步给从节点


从节点故障问题
对于从节点的故障问题,需要在客户端维护一个可用从节点可用列表,当从节点故障时,立刻切换到其他从节点或主节点