Redis主从复制
1、简介
主从复制是指一台Redis服务器的数据,复制到其他Redis服务器,前者成为主节点master,后者成为从节点slave。数据的复制是单向只能从主节点到从节点。
默认每个Redis服务器都是主节点,主节点可以有多个从节点,但从节点只能有一个主节点。
2、作用
- 负载均衡:读写分离,主节点主要提供写操作,从节点提供度服务,提高并发能力。
- 数据冗余:主从复制实现了数据的热备份,是持久化之外的一种数据冗余方式,
- 容灾恢复:当主节点出现问题,可以由从节点代替服务。
- 高可用基石:主从复制是哨兵和集群能够实施的基础。
3、建立主从
主从复制的开启是在从节点开启的,主节点不需要任何操作。
从节点开启主要有一下三种方式:
-
配置文件开启
在从服务器的配置文件中REPLICATION加入slaveof < masterip> < masterport>
-
启动命令
redis-server --slaveof < masterip> < masterport>
-
客户端命令
客户端执行命令slaveof < masterip> < masterport>
用info replication命令查看主从节点的信息:
- role:master主节点;slave从节点
- connected_slaves:从节点数量
- slave0:(如果有从节点)从节点信息,ip、Port、state、offset和lag
4、断开主从
- slaveof no one
5、主从复制实现原理
(1)建立连接:建立主从链接,为数据同步做好准备。
(2)数据同步:建立连接后从节点数据开始初始化,从节点向主节点发送psync命令同步,根据主节点的状态进行全量或者部分复制。
(3)命令传播:数据同步后,主节点将自己指向的命令发送给从节点,从节点接收并执行,从而保证数据一致性。
哨兵模式
1、作用
- 集群监控:监控主节点和从节点是否正常运行。
- 消息通知:如果哪个节点有故障,哨兵负责发送消息。
- 故障转移:如果主节点故障,会自动转移到从节点上。
- 配置中心:如果故障转移发生了,通知从节点新的主节点地址。
2、开启哨兵节点
- 配置文件加入sentinel monitor mymaster 192.168.1.1 6379 2,意思是改哨兵监控192.168.1.1 6379这个主节点,后面2的含义是至少两个哨兵节点统一才能判定主节点故障进行转移。
- redis-sentinel 哨兵配置文件
- 启动时redis-server 哨兵配置文件 --sentinel
通过info sentinel就可以查看监控信息。
3、哨兵原理
(1)定时任务:每个哨兵维护3个定时任务:向主节点发送info命令获取最新主从结构;通过发布订阅获取其他哨兵信息;通过向其他节点发送ping命令进行心跳检测,判断是否下线。
(2)主观下线:心跳检测有节点超过一定时间没有回复则认为下线。
(3)客观下线:哨兵堆主节点主观下线后,会通过sentinel is-master-down-by-addr命令询问其他哨兵该节点状态,如果主节点主观下线的哨兵达到一定值,则对主节点进行客观下线。
(4)选举新主节点:在主节点被客观下线之后,各个哨兵点协商选举新“领导”。
(5)故障转移:通过slaveof no one让选举出来的节点成为主节点,让其他节点通过slaveof命令成为其从节点,已经下线的主节点成为新节点的从节点,即使再次上线也是从节点。
4、注意
- 哨兵至少要2个节点来保障自己的健壮性。
- 哨兵+主从是不保障数据零丢失的,只保障高可用性。