Redis Sentinel从Redis2.8版本开始才正式生产可用
哨兵示意图
哨兵集群 image.png启动
redis-sentinel sentinel.conf
sentinel.conf详解
- 启动前的配置信息
# 监听端口
port 26381
# 后台运行
daemonize yes
# 运行PID存储文件
pidfile "/var/run/redis-sentinel-26381.pid"
# 日志输出文件
logfile "/usr/local/redis-ms/logs/sentinel-26381.log"
# 工作目录
dir "/usr/local/redis-ms/data"
#
sentinel deny-scripts-reconfig yes
# 监控master的ip, port, 取个别名叫: mymaster
# 2代表判断主节点失败至少需要2个Sentinel节点同意,才允许master下线.(一种投票方式)
# 为什么只监控主节点, 从节点不监控呢?因为可以通 master节点的info replication信息获取从节点信息,如果有新节点添加, 自动感知.
sentinel monitor mymaster 192.168.21.22 6381 2
# 每个Sentinel节点通过定时发送ping判断节点延时时间
# 30000毫秒,即30秒.
# 设置大小影响对主节点的判定.
sentinel down-after-milliseconds mymaster 30000
# 故障转移超时时间
sentinel failover-timeout mymaster 180000
#当发生故障转移则设置几个节点发起复制操作.
# 如果是1的话,则使用轮询操作, 如: 先6379->6380->6381
# 如果是3的话,则同步3个节点发起复制操作. 造成CPU压力过大.
sentinel parallel-syncs mymaster 1
#如果主节点设置密码则在此写上.
sentinel auth-pass mymaster 123456
sentinel monitor监控节点详解
sentinel monitor <master-name> <ip> <port> <quorum>
- master-name是别名
- ip: 主节点的ip
- port 主节点的port
- quorum参数用于故障发现和判定,即Sentinel同意的节点数.如何设置?
- 如何设置: quorum采用sentinel集群个数一半加1, 如3个sentinel集群,则使用: 3/2 + 1 取2值.
- 先举sentinel主节点. 2表示至少得到2票才能当选sentinel主节点.
故障转移过程
a)选出合适从节点。
b)晋升选出的从节点为主节点。
c)命令其余从节点复制新的主节点。
d)等待原主节点恢复后命令它去复制新的主节点。
测试故障
-
redis-cli -p 6379 DEBUG sleep 30
# 模拟6379出现故障 -
sentinel get-master-addr-by-name mymaster
# 然后获取最新主节点信息
命令
-
info
查看详情信息 -
info sentinel
查看sentinel信息 -
DEBUG sleep 30
模拟故障 -
sentinel masters
查看所有监控的信息 -
sentinel master mymaster
查看mymaster节点信息 -
sentinel slaves mymaster
查看mymaster监控的所有从节点信息 -
sentinel sentinels mymaster
查看mymaster sentinel的从节点信息 -
sentinel failover mymaster
手动强制故障转移 -
sentinel ckquorum mymaster
检查是否符合故障转移的配置. -
sentinel flushconfig
将Sentinel节点的配置强制刷到磁盘上(非常有用) -
sentinel remove<master name>
取消当前Sentinel节点对于指定<master name>主节点的监控 -
sentinel monitor<master name><ip><port><quorum>
添加Sentinel节点对主节点的监控 -
sentinel get-master-addr-by-name mymaster
获取主从节点最新的主节点IP与PORT, 用于客户端动态获取主节点信息.
遇到的坑.
之前的master节点没有设置masterauth选项, 导致从主节点切换到从节点, 没有权限连接新节点, 一起报
(Non critical) Master does not understand REPLCONF listening-port: -NOAUTH Authentication required.
- 模拟一下故障转移.
sentinel failover mymaster
- 出现故障的节点1,登陆进去,使用
config set masterauth "123456"
设置密码.
总结
- Redis Sentinel是Redis的高可用实现方案:故障发现、故障自动转移、配置中心、客户端通知
- 尽可能在不同物理机上部署Redis Sentinel所有节点
- Redis Sentinel中的Sentinel节点个数应该为大于等于3且最好为奇数
- Redis Sentinel中的数据节点与普通数据节点没有区别。
- 客户端初始化时连接的是Sentinel节点集合,不再是具体的Redis节
点,但Sentinel只是配置中心不是代理 - Redis Sentinel通过三个定时任务实现了Sentinel节点对于主节点、从
节点、其余Sentinel节点的监控 - Redis Sentinel在对节点做失败判定时分为主观下线和客观下线
- 看懂Redis Sentinel故障转移日志对于Redis Sentnel以及问题排查非常
有帮助。 - Redis Sentinel实现读写分离高可用可以依赖Sentinel节点的消息通
知,获取Redis数据节点的状态变化。
网友评论