1,sentinel简介
1)能监控master、slave、监控同一master其他的sentinel。
2)存有一个masters的字典, 里面保存每一个所监控的master的实例。sentinel通过频率发送info命令, 获取主的信息,返回的信息包含slave,用来更新实例的结构。
3)sentinel会与master建立命令连接(发送info)以及频道连接(发布与订阅功能)。会与所有的slave建立命令连接(发送info)以及频道连接。通过发布与订阅,能知道其他sentinel的信息,会相互建立命令连接。
4)通过命令连接向主发送ping,当指定时间没有收到有效回复,则认为主观下线。
5)通过向其他sentinel发送命令, 来询问master是否真的下线了,当达到一定的quorum数量时,则认为客观下线了。
6)会进行leader sentinel的选举,由它来执行故障迁移。
2,sentinel配置。
bind 0.0.0.0
一般是要bind 本机公网ip 127.0.0.1,如果通过要内网构建sentinel集群,内网ip需要放在首位
protected-mode no
port 7579
daemonize yes
dir "/usr/local/redis/sentinel_7579"
pidfile "/var/run/sentinel_7579.pid"
logfile "/usr/local/redis/sentinel_7579.log"
sentinel monitor redis_6379_master 127.0.0.1 6379 2
sentinel down-after-milliseconds redis_6379_master 10000
sentinel parallel-syncs redis_6379_master 2
sentinel failover-timeout redis_6379_master 180000
启动sentinel
redis-server sentinel_6379.conf --sentinel
tail -400f sentinel_7579.log
27348:X 07 Jul 01:32:23.323 # Sentinel ID is c67125f8f48d500e0a13a194bd3e17a763465728
27348:X 07 Jul 01:32:23.323 # +monitor master redis_6379_master 127.0.0.1 6379 quorum 2
27348:X 07 Jul 01:32:23.323 * +slave slave 127.0.0.1:6380 127.0.0.1 6380 @ redis_6379_master 127.0.0.1 6379
27348:X 07 Jul 01:32:23.325 * +slave slave 59.110.217.237:6379 59.110.217.237 6379 @ redis_6379_master 127.0.0.1 6379
27348:X 07 Jul 01:32:33.359 # +sdown slave 59.110.217.237:6379 59.110.217.237 6379 @ redis_6379_master 127.0.0.1 6379
3,sentinel启动过程
- sentinel通过配置文件初始化数据结构,通过配置文件执行master的name, 对于slave,使用ip:port作为name。。
2)sentinel默认会10s
一次,通过命令连接向主发送info命令,通过解析info的恢复,获取主的role域以及slave域等信息,无需用户提供从的信息,自主发现从。
3)sentinel默认会2s
一次,通过命令连接向所有主和从发送 publish "_sentinel_:hello"命令。publish _sentinel_:hello <s_ip> <s_port> <s_runid> <s_poch> <m_name> <m_ip> <m_port> <m_epoch>
4)sentinel 通过订阅连接,从"_sentinel_:hello"接收信息,通过发布频道信息声明自己的存在,通过接收频道信息获知其他sentinel的存在。监视同一个主的sentinel可以自动发现
5)sentinel默认会1s
一次,通过命令连接向主、从、其他sentinel发送ping命令,当指定的时间内,没有收到有效回复,则认为该实例主观下线。(+sdown)
6)判断为主观下线时,会向监视同一个master的sentinel询问,当有一定数量quorum都认为该实例down了,则进入(+odown)客观下线的状态。
7)客观下线条件只适用于主服务器: 对于任何其他类型的 Redis 实例, Sentinel 在将它们判断为下线前不需要进行协商, 所以从服务器或者其他 Sentinel 永远不会达到客观下线条件。
4,sentinel命令
1)redis-cli 7579登录sentinel
2)info
3)sentinel masters列出所有master信息
4)sentinel slaves redis_6379_master列出master的所有slave