sentinel
-
一个Sentinel可以监控多个主从集合, 每个主从集合在Sentinel的配置文件中至少需要以下配置
sentinel monitor mymaster 127.0.0.1 6379 2 sentinel down-after-milliseconds mymaster 60000 sentinel failover-timeout mymaster 180000 sentinel parallel-syncs mymaster 1
-
主观下线:
如果一个服务器没有在 master-down-after-milliseconds 选项所指定的时间内, 对向它发送 PING 命令的 Sentinel 返回一个有效回复(valid reply), 那么 Sentinel 就会将这个服务器标记为主观下线
-
客观下线:
当标记为主观观下线的的哨兵达到配置数量, 就会把下线的master标记为客观下线
sentinel monitor mymaster 127.0.0.1 6379 2
最后的2就代表配置哨兵数量客观下线条件只适用于主服务器
-
配置纪元 (configuration Epoch) ,一个配置纪元就是一个新主服务器配置的版本号, 每次失效转移后, 该主从集合的配置纪元加一
-
parallel-syncs TODO
同一个master再次故障转移的时间间隔
….
对于正在进行的故障转移, 但是没有产生slave配置变化, 用于取消故障转移的时间??
选项指定了在执行故障转移时, 最多可以有多少个从服务器同时对新的主服务器进行同步, 这个数字越小, 完成故障转移所需的时间就越长
-
failover-timeout
故障转移时, 哨兵等待slave配置新的mater的最长时间, 不过无论如何在这段时间之后, 哨兵会对salve进行重新配置
–
测试
-
一主两从
主6381:
redis-server --port 6381
从
6381_slave1
:redis-server ./6381_slave1.conf --port 63811
6381_slave1.conf
slaveof 127.0.0.1 6381
从
6381_slave2
:redis-server ./6381_slave2.conf --port 63812
6381_slave2.conf
slaveof 127.0.0.1 6381
主状态:
redis-cli -p 6381 INFO replication role:master connected_slaves:2 slave0:ip=127.0.0.1,port=63811,state=online,offset=477,lag=0 slave1:ip=127.0.0.1,port=63812,state=online,offset=477,lag=0
-
一主两从
主6382:
redis-server --port 6382
从
6382_slave1
:redis-server ./6382_slave1.conf --port 63821
6382_slave1.conf
slaveof 127.0.0.1 6382
从
6382_slave2
:redis-server ./6382_slave2.conf --port 63822
6382_slave2.conf
slaveof 127.0.0.1 6382
主状态:
redis-cli -p 6382 role:master connected_slaves:2 slave0:ip=127.0.0.1,port=63821,state=online,offset=239,lag=1 slave1:ip=127.0.0.1,port=63822,state=online,offset=239,lag=1
-
3 个哨兵
初始配置s1.conf s2.conf s3.conf 一致
sentinel monitor m6381 127.0.0.1 6381 2 sentinel down-after-milliseconds m6381 60000 sentinel failover-timeout m6381 10000 sentinel parallel-syncs m6381 1 sentinel monitor m6382 127.0.0.1 6382 2 sentinel down-after-milliseconds m6382 60000 sentinel failover-timeout m6382 10000 sentinel parallel-syncs m6382 1
启动3个哨兵:
redis-server s1.conf --port 26381 --sentinel redis-server s2.conf --port 26382 --sentinel redis-server s3.conf --port 26383 --sentinel
之后哨兵配置会被自动修改:
%cat s1.conf # 按照master分开 sentinel monitor m6382 127.0.0.1 6382 2 sentinel down-after-milliseconds m6382 60000 sentinel failover-timeout m6382 10000 sentinel config-epoch m6382 0 #这个master 的slave sentinel known-slave m6382 127.0.0.1 63822 sentinel known-slave m6382 127.0.0.1 63821 #除了当前哨兵, 还有哪些在监控这个master的哨兵 sentinel known-sentinel m6382 127.0.0.1 26383 5f156ed1bd91ad1d1395eabb001779dea607e0e6 sentinel known-sentinel m6382 127.0.0.1 26382 b31c69a9cb9c13da02beef950b8f09f3835201bf # Generated by CONFIG REWRITE # 下面两行应该是当前哨兵信息 port 26381 dir "/Users/zhonghua/code/work/redis_test" # 按照master分开 sentinel monitor m6381 127.0.0.1 6381 2 sentinel down-after-milliseconds m6381 60000 sentinel failover-timeout m6381 10000 sentinel config-epoch m6381 0 sentinel known-slave m6381 127.0.0.1 63811 sentinel known-slave m6381 127.0.0.1 63812 sentinel known-sentinel m6381 127.0.0.1 26383 5f156ed1bd91ad1d1395eabb001779dea607e0e6 sentinel known-sentinel m6381 127.0.0.1 26382 b31c69a9cb9c13da02beef950b8f09f3835201bf
-
干掉
redis-server --port 6381
过了一会
127.0.0.1:63811
变成了master, 原来2个slave的配置文件被修改% cat 6381_slave1.conf # Generated by CONFIG REWRITE port 63811 dir "/Users/zhonghua/code/work/redis_test" % cat 6381_slave2.conf slaveof 127.0.0.1 63811 # Generated by CONFIG REWRITE port 63812 dir "/Users/zhonghua/code/work/redis_test"
所有哨兵文件被修改:
% cat s1.conf sentinel monitor m6382 127.0.0.1 6382 2 sentinel down-after-milliseconds m6382 60000 sentinel failover-timeout m6382 10000 sentinel config-epoch m6382 0 sentinel known-slave m6382 127.0.0.1 63822 sentinel known-slave m6382 127.0.0.1 63821 sentinel known-sentinel m6382 127.0.0.1 26383 5f156ed1bd91ad1d1395eabb001779dea607e0e6 sentinel known-sentinel m6382 127.0.0.1 26382 b31c69a9cb9c13da02beef950b8f09f3835201bf # Generated by CONFIG REWRITE port 26381 dir "/Users/zhonghua/code/work/redis_test" sentinel monitor m6381 127.0.0.1 63811 2 #主命名没变, 端口变成了新主的端口 sentinel down-after-milliseconds m6381 60000 sentinel failover-timeout m6381 10000 sentinel config-epoch m6381 1 #纪元加了1 sentinel known-slave m6381 127.0.0.1 63812 #原来的一个从变成了主 sentinel known-slave m6381 127.0.0.1 6381 #原来的主, 记录为从, 虽然现在还没有启动 sentinel known-sentinel m6381 127.0.0.1 26383 5f156ed1bd91ad1d1395eabb001779dea607e0e6 sentinel known-sentinel m6381 127.0.0.1 26382 b31c69a9cb9c13da02beef950b8f09f3835201bf
-
再次启动原来的主
redis-server --port 6381
启动后自动变为slave, 所有配置文件没有被修改