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

posted @ 2022-03-08 09:01  BlogMemory  阅读(40)  评论(0编辑  收藏  举报