Redis 的主从复制有两种搭建方式
6379、6380 两个端口。
新增redis6380.conf, 加入 slaveof 127.0.0.1 6379(主), 主启动成功之后再启动从,配置如下:
requirepass "admin123" #设置redis登录密码
masterauth "admin123" #主从认证密码,否则主从不能同步
主数据源启动成功:
启动从数据源,主从复制已启动
c,查看状态:info replication
信息显示已连接上 6379 主数据源
d,断开主从复制:在slave节点,执行6380:>slaveof no one
e,断开后再变成主从复制:6380:> slaveof 192.168.42.111 6379
f,数据较重要的节点,主从复制时使用密码验证: requirepass
e,从节点建议用只读模式slave-read-only=yes, 若从节点修改数据,主从数据不一致
注意事项:
传输延迟:主从一般部署在不同机器上,复制时存在网络延时问题,redis提供repl-disable-tcp-nodelay参数决定是否关闭 TCP_NODELAY,默认为关闭
参数关闭时:
无论大小都会及时发布到从节点,占带宽,适用于主从网络好的场景,
参数启用时:
主节点合并所有数据成TCP包节省带宽,默认为40毫秒发一次,取决于内核,主从的同步延迟40毫秒,适用于 网络环境复杂或带宽紧张,如跨机房
一主一从:用于主节点故障转移从节点,当主节点的“写”命令并发高且需要持久化,可以只在从节点开启AOF(主节点不需要,如下图)
一主多从:针对“读”较多的场景,“读”由多个从节点来分担,但节点越多,主节点同步到多节点的次数也越多,影响带宽,也加重主节点的稳定(如下图)
树状主从:一主多从的缺点(主节点推送次数多压力大)可用些方案解决, 主节点只推送一次数据到从节点1,再由从节点2推送到11,减轻主节点推送的压力(如下图)
复制原理
执行slave master port后,与主节点连接,同步主节点的数据,6380:>info replication:查看主从及同步信息
数据同步
redis 2.8版本以上使用psync命令完成同步,过程分“全量”与“部分”复制
全量复制:
一般用于初次复制场景(第一次建立SLAVE后全量)
部分复制:
网络出现问题,从节点再次连主时,主节点补发缺少的数据,每次数据增加同步
心跳:
主从有长连接心跳,主节点默认每10S向从节点发ping命令,repl-ping-slave-period控制发送频率