Redis Sentinel
1.Redis自动故障转移机制
Redis主从策略只支持主从复制备份,当主redis挂了,从redis只能提供读服务,无法提供写服务。所以,当主redis挂了,还得想办法让从redis升级成为主redis。
这就需要自动故障转移,redis sentinel带有这个功能,当一个主redis不能提供服务时,redis sentinel可以将一个从redis升级为主redis,并对其他从redis进行配置,让它们使用新的主redis进行复制备份。
Redis-Sentinel是Redis官方推荐的高可用性(HA)解决方案,当用Redis做Master-slave的高可用方案时,假如master宕机了,Redis本身(包括它的很多客户端)都没有实现自动进行主备切换,而Redis-sentinel本身也是一个独立运行的进程,它能监控多个master-slave集群,发现master宕机后能进行自动切换。redis-sentinel具有以下几个特点:
-
监控(Monitoring): 实时地监控redis是否按照预期良好地运行。Sentinel(哨兵)的原理是通过发送命令(ping)给Redis多个节点,等待Redis服务器响应,从而监控运行的多个Redis实例的运行情况。
-
提醒(Notification):如果发现某个redis节点运行出现状况,能够通知另外一个进程(例如它的客户端);
-
自动故障转移(Automatic failover):当Sentinel监测到master宕机时,会自动选举其中一个slave成为新的master,并通知其他从服务器,修改配置文件修改主机。
2.Redis-sentinel故障自动转移过程
2.1 Sentinel 客观下线
由于网络原因或者其他因素导致 Master 服务器无法连接,当Sentinel向master发送请求(ping)无法接收回应信号时,且Sentinel达到一定数量时(sentinel monitor masterName ip port 2,表示当sentinel数量达到2个时),则认为 redis-master 客观下线。
2.2 Sentinel重新选举及故障自动转移
1. Master选举过程
-
剔除往来状状况不好的;
-
按从库配置的优先级选举主库;
-
按slave同步进度选举;
-
按slave id取最小的。
2. Sentinel故障转移过程
3. 旧Master恢复后自动降级到Slave
4. Sentinel 选举算法:Raft
3. 搭建 redis-sentinel 系统
修改sentinel.conf 位置文件内容如下:
查看代码
daemonize yes #后台启动
port 6889 #修改默认端口号,
logfile /var/log/redis/sentinel.log #日志文件所在目录
pidfile /var/run/sentinel.pid #sentinel.pid文件所在目录
sentinel monitor master6889 IP port 2
sentinel down-after-milliseconds master6889 5000
sentinel failover-timeout master6889 15000
启动 reids-sentinel
查看代码
redis-sentinel /opt/redis/sentinel.conf #指定sentinel.conf配置文件
连接任意sentinel服务可以获知当前主redis服务信息。
3.Redis Cluster集群模式
Redis Cluster集群模式采用无中心结构,每个节点保存数据和整个集群状态,每个节点都和其他节点连接,采用gossip协议交换节点元数据信息,数据分散存储在各个节点。至少6个节点才可以保证高可用,即三主三从,扩展性强,更好做到高可用。
4.集群与哨兵的区别
-
Sentinel哨兵是为系统提供高可用特性,每一个redis节点数据是同步的,且每一个Redis节点保存的数据都是全量数据
-
Cluster集群是将超大数据集打散到多台Redis服务器,可对储存规模进行水平扩容,每一个Redis节点存储的都是完整的数据子集。
什么是Redis的哈希槽(hash slot)?
Redis集群预先分好16384个槽,当需要在Redis集群中放置一个 key-value 时,根据 CRC16(key) mod 16384的值,决定将一个key放到哪个桶中。
假设节点的数量为3,将16384个槽按照(自定义规则)去分配这3个节点,每个节点复制一部分槽位:
-
节点1的槽位区间范围为:0~5460
-
节点2的槽位区间范围为:5461~10922
-
节点3的槽位区间范围为:10923~16384
注意:从节点是没有槽位的,只有主节点才有
Redis主从同步、Redis哨兵模式(Redis Sentinel)、Redis Cluster集群:
-
主从同步:通过冗余保障Redis数据是可靠的
-
Redis Sentinel:在主从同步的基础上,实现自动故障转移
-
Redis Cluster:集群模式,提供大规模Redis应用的基础实现,并内置了高可用特性
Sentinel详解:https://www.cnblogs.com/crazymakercircle/p/14285001.html
哨兵模式学习链接:https://www.cnblogs.com/kevingrace/p/9004460.html
https://saas.51cto.com/learner.html#/course/detail?id=10750&type=COURSE_PLATFORM