环境介绍
docker配置redis主从复制(一主两从),启动Sentinel(哨兵模式,3个sentinel)


redis中master配置要点
(要修改的)
bind 0.0.0.0
daemonize yes # 后台启动
启动:
redis-server [redis配置文件绝对路径]
从服务器配置
修改
bind 0.0.0.0 #允许任何主机
daemonize yes #允许后台启动redis
slaveof redis-server 6379 # docker网络解析 redis-server
启动:
redis-server [redis 配置文件绝对路径]
如法炮制创建两个从服务器
Redis Sentinel的主要功能
Sentinel 的主要功能包括 主节点存活检测、主从运行情况检测、
自动故障转移 (failover)
、主从切换
。Redis 的 Sentinel最小配置是 一主一从
-
监控
Sentinel 会不断的检查 主服务器 和 从服务器 是否正常运行
。 -
通知
当被监控的某个 Redis 服务器出现问题,Sentinel 通过 API 脚本 向 管理员 或者其他的 应用程序 发送通知。
-
自动故障转移
当 主节点 不能正常工作时,Sentinel 会开始一次 自动的 故障转移操作,它会将与 失效主节点 是 主从关系 的其中一个 从节点 升级为新的 主节点,并且将其他的 从节点 指向 新的主节点
。 -
配置提供者
在 Redis Sentinel 模式下,客户端应用 在初始化时连接的是 Sentinel 节点集合,从中获取 主节点 的信息。
主观下线和客观下线
主观下线
适用于所有 主节点 和 从节点。如果在
down-after-milliseconds
毫秒内,Sentinel 没有收到 目标节点 的有效回复,则会判定 该节点 为 主观下线。(偏见
,需要其他sentinel
的观点)
客观下线
客观下线 只适用于 主节点。如果 主节点 出现故障,Sentinel 节点会通过
sentinel is-master-down-by-addr
命令,向其它 Sentinel 节点询问对该节点的 状态判断
。如果超过 <quorum> 个数的节点判定 主节点 不可达
,则该 Sentinel 节点会判断 主节点 为 客观下线
。
Redis Sentinel的工作原理
-
每个
Sentinel
以 每秒钟 一次的频率,向它所知的 主服务器、从服务器 以及其他Sentinel
实例 发送一个PING
命令 -
如果一个 实例(instance)距离 最后一次 有效回复 PING 命令的时间超过
down-after-milliseconds
所指定的值,那么这个实例会被 Sentinel 标记为主观下线
。 -
如果一个 主服务器
被标记为 主观下线
,并且有足够数量 的 Sentinel(至少要达到 配置文件 指定的数量)在指定的 时间范围 内同意这一判断
,那么这个 主服务器被标记为 客观下线
。 -
如果一个 主服务器
被标记为 主观下线
,那么正在 监视 这个 主服务器 的所有 Sentinel 节点,要以每秒一次 的频率确认 主服务器
的确进入了 主观下线 状态。 -
在一般情况下, 每个 Sentinel 会以每 10 秒一次的频率,向它已知的所有 主服务器 和 从服务器 发送 INFO 命令。
当一个 主服务器 被 Sentinel 标记为 客观下线 时,Sentinel 向 下线主服务器 的所有 从服务器 发送 INFO 命令的频率,会从 10 秒一次改为 每秒一次
。 -
Sentinel
和其他Sentinel
协商 主节点 的状态,如果主节点
处于SDOWN
状态,则投票自动选出新的 主节点
。将剩余的 从节点 指向 新的主节点进行 数据复制
配置sentinel
哨兵
vi /etc/redis-sentinel.conf
protected-mode yes
bind 0.0.0.0
daemonize yes
sentinel monitor mymaster 172.17.0.3 6379 2
// 名称为 mymaster ,IP 为 127.0.0.1 端口为 6380
// 最后的 2 是指最少有 2 给 Sentinel 实例同意一台 redis 服务器宕机,才会认为 客观下线。
// sentinel monitor 自定义的主节点名称 主节点的 IP 主节点端口 票数
事例配置文件
protected-mode no # 设置密码登录
bind 0.0.0.0 # 设置谁能访问
port 16380 # 设置端口
daemonize yes # 后端启动
sentinel monitor master 127.0.0.1 16379 2 # 监控的master
sentinel down-after-milliseconds master 5000 # 节点有效回复响应的时间
sentinel failover-timeout master 180000 # ping
sentinel parallel-syncs master 1 #
sentinel auth-pass master 123456 # 密码
logfile /var/log/redis/sentinel-16380.log # 日志文件
模拟redis,down掉
redis-cli -h 172.17.0.3 -p 6379 shutdown #停主
redis-cli info replication #查看某个从,它成为了主
sentinel配置文件
(设置后会对配置文件修改,修改端口以及日志文件
)

redis-cli -p 27001 info
查看sentinel
状态

-
redis的master节点down掉
image.png
哨兵选举
票数和领导者选举有关系
领导者选举的事件发生,必须满足下面的条件
max(票数, (哨兵的个数 / 2) + 1 ) 个哨兵参加选举
才可以选举出领导者,从而完成故障转移。
例子:
比如有 5 个哨兵, 配置的票数是 4
max(4, (5 / 2) + 1)
max(4, 3.5)
4 最大
结果就是`需要 4 个哨兵参与选举才可以,完成故障转移`。
网友评论