今日目标
- 掌握Docker-compose安装Redis哨兵集群
单节点Redis的并发能力是有上限的,要进一步提高Redis的并发能力,就需要搭建主从集群,实现读写分离
- 主节点: 可以对Redis实现读写操作
- 从节点: 只可以对Redis实现读操作
但是,当master节点宕机后,我们就不能写数据到Redis,所以需要搭建一个三节点形成的Sentinel集群,来监管之前的Redis主从集群
1.Redis哨兵
Redis提供了哨兵(Sentinel)机制来实现主从集群的自动故障恢复。
哨兵的结构如图:
图片
共包含6个节点,一个主两个从和三个哨兵。这里我们会在同一台虚拟机中开启6个redis实例,模拟主从集群,信息如下:
IP | PORT | 角色 |
192.168.150.102 | 6380 | master |
192.168.150.102 | 6381 | slave |
192.168.150.102 | 6382 | slave |
192.168.150.102 | 26379 | sentinel |
192.168.150.102 | 26380 | sentinel |
192.168.150.102 | 26381 | sentinel |
哨兵的作用如下:
- 监控:Sentinel 会不断检查您的master和slave是否按预期工作
- 自动故障恢复:如果master故障Sentinel会将一个slave提升为master。当故障实例恢复后也以新的master为主
- 通知:Sentinel充当Redis客户端的服务发现来源,当集群发生故障转移时会将最新信息推送给Redis的客户端
2. 准备实例和配置
要在同一台虚拟机开启6个实例,必须准备6份不同的配置文件和目录,配置文件所在目录也就是工作目录。 确保下面的配置已经更改(位置也别错)
sentinel.conf说明
sentinel.conf解读
- port 26379:是当前sentinel实例的端口
- sentinel monitor mymaster 192.168.150.102 6380 2:指定主节点信息 ○ mymaster:主节点名称,自定义,任意写 ○ 192.168.150.102 6380:主节点的ip和端口 ○ 2:选举master时的quorum值
- sentinel auth-pass mymaster 123456 :访问主节点时的密码
如果您觉得本文不错,欢迎关注,点赞,收藏支持,您的关注是我坚持的动力!
3. docker-compose-redis-master-slave-sentinel.yml文件的编写
创建名称为docker-compose-redis-master-slave-sentinel.yml用于安装Redis哨兵集群docker-compose文件
3.1. 运行 -- 哨兵模式(sentinel监视redis主从服务
运行 -- 哨兵模式(sentinel监视redis主从服务,当某个master服务下线时,自动将该master下的某个从服务升级为master服务替代已下线的master服务继续处理请求 -- 即主节点切换)
图片
3.2 测试
- 1.哨兵模式查看
- 2.查看redis主信息
图片
- 查看redis从信息
图片
- 4.查看 哨兵redis-sentinel-1日志
图片
- 进入redis-slave-1容器
图片
- 关闭redis-master主节点
发现主节点从master节点,转换为slave-2节点
图片
- 进入redis-slave-2容器
- 7.查看集群状态
发现现在从节点只剩一个
图片
- 8.重启master节点
图片
- 9.再次查看集群状态
发现master节点添加回来了,但是变成了从节点
图片
3.3. 卸载哨兵集群
3.4. 集群故障恢复原理
哨兵master自己从当前集群中的slave节点中选出一个新的master,原则是
- 1-首先会判断slave节点与master节点断开时间长短,如果超过指定值(down-after-milliseconds * 10)则会排除该slave节点
- 2-然后判断slave节点的slave-priority值,越小优先级越高,如果是0则永不参与选举
- 3-如果slave-prority一样,则判断slave节点的offset值,越大说明数据越新,优先级越高
- 4-最后是判断slave节点的运行id大小,越小优先级越高。
3.5. 哨兵集群监控原理
Sentinel基于心跳机制监测服务状态,每隔1秒向集群的每个实例发送ping命令:
- 主观下线:如果某sentinel节点发现某实例未在规定时间响应,则认为该实例主观下线。
- 客观下线:若超过指定数量(quorum)的sentinel都认为该实例主观下线,则该实例客观下线。quorum值最好超过Sentinel实例数量的一半。
图片
总结
Sentinel的三个作用是什么
- 监控
- 故障转移
- 通知
Sentinel如何判断一个redis实例是否健康
- 每隔1秒发送一次ping命令,如果超过一定时间没有相向则认为是主观下线
- 如果大多数sentinel都认为实例主观下线,则判定服务下线