1.哨兵模式简单介绍
Redis Sentinel是一个分布式架构,其中包含若干个Sentinel节点和Redis数据节点,每个Sentinel节点会对数据节点和其余Sentinel节点进行监控,当它发现节点不可达时,会对节点做下线标识。
如果被标识的是主节点,它还会和其他Sentinel节点进行“协商”,当大多数Sentinel节点都认为主节点不可达时,它们会选举出一个Sentinel节点来完成自动故障转移的工作,同时会将这个变化通知给Redis应用方。整个过程完全是自动的,不需要人工来介入,所以这套方案很有效地解决了Redis的高可用问题。
哨兵架构图2.Redis 的 Sentinel 系统用于管理多个 Redis 服务器(instance), 该系统执行以下三个任务
1)监控任务:
A.每隔10秒,每个Sentinel节点会向主节点和从节点发送info命令获取最新的拓扑结构。
B.每隔2秒,每个Sentinel节点会向Redis数据节点的__sentinel__:hello频道上发送该Sentinel节点对于主节点的判断以及当前Sentinel节点的信息,同时每个Sentinel节点也会订阅该频道,来了解其他Sentinel节点以及它们对主节点的判断。
C.每隔一秒,每个Sentinel节点会向主节点、从节点、其余Sentinel节点发送一条ping命令做一次心跳检测,来确认这些节点当前是否可达。
2)提醒(Notification):
A.主观下线:因为每隔一秒,每个Sentinel节点会向主节点、从节点、其余Sentinel节点发送一条ping命令做一次心跳检测,当这些节点超过down-after-milliseconds没有进行有效回复,Sentinel节点就会对该节点做失败判定,这个行为叫做主观下线
B.客观下线:当Sentinel主观下线的节点是主节点时,该Sentinel节点会向其他Sentinel节点询问对主节点的判断,当超过<quorum>个数,那么意味着大部分的Sentinel节点都对这个主节点的下线做了同意的判定,于是该Sentinel节点认为主节点确实有问题,这时该Sentinel节点会做出客观下线的决定。
C.领导者Sentinel节点选举
假设s1(sentinel-1)最先完成客观下线,它会向其余Sentinel节点发送命令,请求成为领导者;收到命令的Sentinel节点如果没有同意过其他Sentinel节点的请求,那么就会同意s1的请求,否则拒绝;如果s1发现自己的票数已经大于等于某个值,那么它将成为领导者
3)自动故障迁移(Automatic failover):
当一个主服务器不能正常工作时, Sentinel 会开始一次自动故障迁移操作, 它会将失效主服务器的其中一个从服务器升级为新的主服务器, 并让失效主服务器的其他从服务器改为复制新的主服务器; 当客户端试图连接失效的主服务器时, 集群也会向客户端返回新主服务器的地址, 使得集群可以使用新主服务器代替失效服务器
哨兵故障迁移实现哨兵模式:
1.基础环境:一个master和两个slave的基础架构
2.配置哨兵模式
cp /usr/local/src/redis-4.0.12/sentinel.conf /usr/local/redis/sentinel.conf
默认端口:26379
3.配置三个哨兵:
cp sentinel.conf sentinel27000.conf
cp sentinel.conf sentinel27001.conf
修改配置文件(sentinel27000.conf和sentinel27000.conf依据下面的配置文件):
port 26379
bind 0.0.0.0
logfile "/usr/local/redis/log/sentinel-${port}.log"
dir /usr/local/redis/sentinel
sentinel monitor mymaster 127.0.0.1 6379 2
sentinel down-after-milliseconds mymaster 30000
sentinel parallel-syncs mymaster 1
// 180 秒后开始故障自动装换
sentinel failover-timeout mymaster 180000
sentinel deny-scripts-reconfig yes
参数解释:
1)down-after-milliseconds 选项指定了 Sentinel 认为服务器已经断线所需的毫秒数。
如果服务器在给定的毫秒数之内, 没有返回 Sentinel 发送的 PING 命令的回复, 或者返回一个错误, 那么 Sentinel 将这个服务器标记为主观下线(subjectively down,简称 SDOWN )
2)parallel-syncs 选项指定了在执行故障转移时, 最多可以有多少个从服务器同时对新的主服务器进行同步, 这个数字越小, 完成故障转移所需的时间就越长
3)sentinel monitor 自定义的主节点名称 主节点的 IP 主节点端口 票数
票数是指最少有n个Sentinel 实例同意一台 redis 服务器宕机,才会认为 客观下线
4.启动哨兵:
/usr/local/redis/bin/redis-sentinel /usr/local/redis/sentinel.conf
/usr/local/redis/bin/redis-sentinel /usr/local/redis/sentinel27000.conf
/usr/local/redis/bin/redis-sentinel /usr/local/redis/sentinel27001.conf
5.查看sentinel的状态:
/usr/local/redis/bin/redis-cli -p 26379/27001/27000
执行info sentinel
查看sentinel的状态6.关闭master查看哨兵状态
master进程kill -9 19340
查看哨兵状态:(不断的刷新其中一个 Sentinel 节点的信息,观察最后一行信息的变化)
master的ip发生的变化6.如果原先master恢复,此时的master的ip不会发生变化
网友评论