前言:
redis在主從模式下,如果master節點出現故障,redis不會進行切換主節點。如果要測試redis sentinel,首先要啟動redis主從,看我的另一篇部落格。
redis sentinel主要功能:監控redis的運作狀态,若master節點出現問題,能夠選舉一個slave為主節點,并修改其他從節點的主節點位址。單個sentinel是不可靠的,sentinel也是支援叢集的,因為50%以上投票才生效,是以至少要3個sentinel節點。
配置:
port端口号
bind 192.168.94.151 和redis的bind一樣
daemonize yes 背景運作
sentinel monitor mymaster 192.168.94.151 7051 2 mymaster為自己起的叢集的名字,192.168.94.151 master的ip 7051master的端口号 2 當有兩個sentinel節點認為主節點出問題是,就可以發起failover,如果50%以上節點同意,就切換主節點成功
sentinel auth-pass mymaster xuhaixing redis主節點的密碼
sentinel down-after-milliseconds <master-name> <milliseconds> 在一定的時間内,沒有PING通master節點,這個節點就認為master已經down,将其标記為主觀下線
sentinel failover-timeout <master-name> <milliseconds> 在該時間内未完成failover,則failover失敗
sentinel parallel-syncs <master-name> <numslaves> 在執行故障轉移時最多可以有多少個從節點同步新的主master
sentinel notification-script <master-name> <script-path> 在異常時可以執行調用腳本
啟動redis(主從部署看我另一篇文章)
[[email protected] redis-replicate]# redis-cli -h 192.168.94.151 -p 7051 -a xuhaixing
192.168.94.151:7051> info replication
# Replication
role:master
connected_slaves:2
slave0:ip=192.168.94.151,port=7052,state=online,offset=56,lag=1
slave1:ip=192.168.94.151,port=7050,state=online,offset=56,lag=1
master_replid:dd924d2fb0001b41eca962f2030aa4694d572235
master_replid2:0000000000000000000000000000000000000000
master_repl_offset:56
second_repl_offset:-1
repl_backlog_active:1
repl_backlog_size:1048576
repl_backlog_first_byte_offset:1
repl_backlog_histlen:56
192.168.94.151:7051>
啟動sentinel
[[email protected] redis-replicate]# cat sentinel-start.sh
cd /usr/local/redis-replicate/7050
./redis-sentinel ./sentinel.conf
cd /usr/local/redis-replicate/7051
./redis-sentinel ./sentinel.conf
cd /usr/local/redis-replicate/7052
./redis-sentinel ./sentinel.conf
[[email protected] redis-replicate]# sh sentinel-start.sh
1764:X 26 Jul 06:08:53.076 # oO0OoO0OoO0Oo Redis is starting oO0OoO0OoO0Oo
1764:X 26 Jul 06:08:53.076 # Redis version=4.0.0, bits=64, commit=00000000, modified=0, pid=1764, just started
1764:X 26 Jul 06:08:53.076 # Configuration loaded
1766:X 26 Jul 06:08:53.099 # oO0OoO0OoO0Oo Redis is starting oO0OoO0OoO0Oo
1766:X 26 Jul 06:08:53.099 # Redis version=4.0.0, bits=64, commit=00000000, modified=0, pid=1766, just started
1766:X 26 Jul 06:08:53.099 # Configuration loaded
1771:X 26 Jul 06:08:53.122 # oO0OoO0OoO0Oo Redis is starting oO0OoO0OoO0Oo
1771:X 26 Jul 06:08:53.122 # Redis version=4.0.0, bits=64, commit=00000000, modified=0, pid=1771, just started
1771:X 26 Jul 06:08:53.122 # Configuration loaded
[[email protected] redis-replicate]# ps -ef|grep redis
root 1005 1 0 04:44 ? 00:00:07 /usr/local/redis/bin/redis-server 0.0.0.0:6379
root 1741 1 0 06:06 ? 00:00:00 ./redis-server 192.168.94.151:7050
root 1746 1 0 06:06 ? 00:00:00 ./redis-server 192.168.94.151:7051
root 1751 1 0 06:06 ? 00:00:00 ./redis-server 192.168.94.151:7052
root 1765 1 0 06:08 ? 00:00:00 ./redis-sentinel 192.168.94.151:27050 [sentinel]
root 1770 1 0 06:08 ? 00:00:00 ./redis-sentinel 192.168.94.151:27051 [sentinel]
root 1775 1 0 06:08 ? 00:00:00 ./redis-sentinel 192.168.94.151:27052 [sentinel]
root 1783 1537 0 06:10 pts/0 00:00:00 grep --color=auto redis
[[email protected] redis-replicate]#
[[email protected] redis-replicate]# redis-cli -h 192.168.94.151 -p 27051 -a xuhaixing
192.168.94.151:27051> info sentinel
# Sentinel
sentinel_masters:1
sentinel_tilt:0
sentinel_running_scripts:0
sentinel_scripts_queue_length:0
sentinel_simulate_failure_flags:0
master0:name=mymaster,status=ok,address=192.168.94.151:7051,slaves=2,sentinels=3
可以通過kill -9 程序号,幹掉redis主節點,等一會,再重新查叢集資訊,會發現主節點已經變了
如果因為網絡中斷,會出現兩個master的原因,可通過該redis配置
min-slaves-to-write 1
min-slaves-max-lag 10
min-slaves-to-write表示至少一個從庫時主庫才可以寫,否則傳回錯誤
min-slaves-max-lag表示允許從庫失去連接配接的時間
實時内容請關注微信公衆号,公衆号與部落格同時更新:程式員星星