一、Sentinel 模式介绍
Redis-Sentinel 是 Redis 给我们提供的一种高可用解决方案,Redis-sentinel本身也是一个独立运行的进程,它能监控多个master-slave集群,发现master宕机后能进行自动切换。Sentinel可以监视任意多个主服务器以及主服务器属下的从服务器,并在被监视的主服务器下线时,自动执行故障转移操作。
sentinel 中文含义为哨兵,所以又可以叫哨兵模式,其特点如下:
- sentinel 模式是建立在主从模式的基础上,如果只有一个 Redis 节点,sentinel 就没有任何意义
- 当 master 挂了以后,sentinel 会在 slave 中选择一个做为 master,并修改它们的配置文件,其他 slave 的配置文件也会被修改,比如 slaveof 属性会指向新的 master
- 当master重新启动后,它将不再是master而是做为slave接收新的master的同步数据
- sentinel因为也是一个进程有挂掉的可能,所以sentinel也会启动多个形成一个sentinel集群
- 多sentinel配置的时候,sentinel之间也会自动监控
- 当主从模式配置密码时,sentinel也会同步将配置信息修改到配置文件中,不需要担心
- 一个sentinel或sentinel集群可以管理多个主从Redis,多个sentinel也可以监控同一个redis
- sentinel最好不要和Redis部署在同一台机器,不然Redis的服务器挂了以后,sentinel也挂了
Sentinel 模式的原理:
Sentinel 模式的工作机制:
- 每个 sentinel 以每秒钟一次的频率向它所知的 master,slave 以及其他 sentinel 实例发送一个 PING 命令
- 如果一个实例距离最后一次有效回复 PING 命令的时间超过 down-after-milliseconds 选项所指定的值, 则这个实例会被 sentinel 标记为主观下线。
- 如果一个 master 被标记为主观下线,则正在监视这个 master 的所有 sentinel 要以每秒一次的频率确认 master 的确进入了主观下线状态
- 当有足够数量的 sentinel(大于等于配置文件指定的值)在指定的时间范围内确认 master 的确进入了主观下线状态, 则 master 会被标记为客观下线
- 在一般情况下, 每个 sentinel 会以每 10 秒一次的频率向它已知的所有 master,slave 发送 INFO 命令
- 当 master 被 sentinel 标记为客观下线时,sentinel 向下线的 master 的所有 slave 发送 INFO 命令的频率会从 10 秒一次改为 1 秒一次
- 若没有足够数量的 sentinel 同意 master 已经下线,master 的客观下线状态就会被移除;若 master 重新向 sentinel 的 PING 命令返回有效回复,master 的主观下线状态就会被移除
- 从redis层面谈高可用高并发,哨兵模式集群1.首先Redis单实例主要有单点,容量有限,流量压力上限的问题。
- Redis单点故障,可以通过主从复制replication,和自动故障转移sentinel哨兵机制。但Redis单Master实例提供读写服务,仍然有容量和压力问题,并发问题redis官方声称可以达到 10万/每秒,每秒执行10万条命令
- 假如业务需要每秒100万的命令执行呢?解决方案如下
正确的应该是考虑分布式,加机器,把数据分到不同的位置,分摊集中式的压力,一堆机器做一件事.还需要一定的机制保证数据分区,并且数据在各个主Master节点间不能混乱,当然最好还能支持在线数据热迁移的特性。这时候就该redis-cluster集群。 - redis中哨兵模式和集群模式的区别:哨兵可以对redis节点进行监控,在主节点出现故障后,能将某个从节点升级为主节点,进行主从切换故障转移,目的是为了高可用。
- 而集群模式,为了解决单机Redis容量有限的问题,将数据按一定的规则分配到多台机器。目的是为了高并发,两种模式都可以自动进行故障转移。
当使用 sentinel 模式的时候,客户端就不要直接连接 Redis,而是连接sentinel 的 ip 和 port,由 sentinel 来提供具体的可提供服务的 Redis 实现,这样当 master 节点挂掉以后,sentinel 就会感知并将新的 master 节点提供给使用者。
二、环境准备
1.下载软件安装包Redis
2.服务器信息 主节点端口 7001,从节点端口 7002,哨兵节点端口27001,每台端口一样,同一台服务器上不是直接主从关系。
第一台 127.0.0.1
shard-master1
shard-slave3
第二台 127.0.0.2
shard-master2
shard-slave1
第三台 127.0.0.3
shard-master3
shard-slave2
份数 | 127.0.0.1 | 127.0.0.2 | 127.0.0.3 |
---|---|---|---|
副本1 | 主1 | 从1 | 哨兵 |
副本2 | 哨兵 | 主2 | 从2 |