Redis哨兵
目的:实现系统的高可用,基于主从复制
哨兵的工作流程
1、每秒给master发送一次ping命令,master回复pong命令
2、经历主观下线和客观下线
只有经历客观下线,才能确定master出现故障
3、哨兵的领导者选举
第一次发现主观下线那个哨兵负责故障转移
4、哨兵领导者负责故障转移哨兵故障转移演示
1、先搭建主从
2、再搭建哨兵
1、什么是高可用 高并发、分布式、集群、微服务
它与被认为是不间断操作的容错技术有所不同。是目前企业防止核心系统因故障而无法工作的最有效保护手段
高可用一般指服务的冗余,一个服务挂了,可以自动切换到另外一个服务上,不影响客户体验
2、多种模式对比
主从复制,若主节点出现问题,则不能提供服务,需要人工修改配置将从变主
主从复制主节点的写能力单机,能力有限
单机节点的存储能力也有限
3、主从故障如何故障转移
主节点(master)故障,从节点slave-1端执行 slaveof no one后变成新主节点
其它的节点成为新主节点的从节点,并从新节点复制数据
需要人工干预,无法实现高可用
4、哨兵机制(sentinel)的高可用
原理:当主节点出现故障时,由Redis Sentinel自动完成故障发现和转移,并通知应用方,实现高可用性。
5、哨兵机制的三个定时监控任务作用:心跳
哨兵有三个定时监控任务完成对各节点的发现和监控。
6、哨兵主观下线和客观下线
(1)主观下线
主观下线后,不准确,不会做故障转移
(2)客观下线
7、领导者哨兵选举流程 zookeeper
8、哨兵机制-故障转移流程
由Sentinel节点定期监控发现主节点是否出现了故障
sentinel会向master发送心跳PING来确认master是否存活,如果master在“一定时间范围”内不回应PONG 或者是回复了一个错误消息,那么这个sentinel会主观地(单方面地)认为这个master已经不可用了
当主节点出现故障,此时假设3个Sentinel节点共同选举了Sentinel3节点为领导者sentinel,负载处理主节点的故障转移
由Sentinel3领导者节点执行故障转移,过程和主从复制一样,但是自动执行
故障转移后的拓扑结构图
9、哨兵演示
9.1 先搭主从
先搭建好一主两从redis的主从复制,和之前复制的搭建一样,搭建方式如下:
A主节点6379节点(/usr/local/bin/conf/redis6379.conf):
修改 requirepass 12345678 protected-mode no
B从节点redis6380.conf和redis6381.conf:
修改 requirepass 12345678 protected-mode no
加上masterauth 12345678 ,加上slaveof 192.168.42.111 6379
注意:当主从起来后,主节点可读写,从节点只可读不可写
9.2 再搭哨兵
redis sentinel哨兵机制配置(也是3个节点):
/usr/local/bin/conf/sentinel_26379.conf
/usr/local/bin/conf/sentinel_26380.conf
/usr/local/bin/conf/sentinel_26381.conf
将三个文件的端口改成: 26379 26380 26381
sentinel monitor mymaster 192.168.42.111 6379 2 //监听主节点6379
sentinel auth-pass mymaster 12345678 //连接主节点时的密码
protected-mode no
配完此脚本,哨兵机制可正常启动运行。
sentinel monitor mymaster 192.168.42.111 6379 2 //监控主节点的IP地址端口
sentinel auth-pass mymaster 12345678 //sentinel连主节点的密码
sentinel config-epoch mymaster 2 //执行故障转移时, 最多可以有多少个从节点同时对新的主节点进行数据同步
sentinel leader-epoch mymaster 2
sentinel failover-timeout mymaster 180000 //故障转移超时时间180s,
a,如果转移超时失败,下次转移时时间为之前的2倍;
b,从节点变主节点时,从节点执行slaveof no one命令一直失败的话,当时间超过180S时,则故障转移失败
c,从节点复制新主节点时间超过180S转移失败
sentinel down-after-milliseconds mymaster 300000//sentinel节点定期向主节点ping命令
启动sentinel服务:
./redis-sentinel conf/sentinel_26379.conf &
./redis-sentinel conf/sentinel_26380.conf &
./redis-sentinel conf/sentinel_26381.conf &