上一篇文章我們講了redis主從節(jié)點(diǎn)的安裝配置,為了實(shí)現(xiàn)客戶端連接的讀寫分離,安裝哨兵sentinel模式;
配置文件sentinel.conf修改
還是先把沒有注釋的配置拷貝出來
sentinel.conf的位置和redis.conf在一起,我這里是/servers/redis-6.0.6/sentinel.conf
[root@localhost redis-6.0.6]# cat sentinel.conf | grep -v ^# | grep -v ^$ > conf/sentinel.conf
[root@localhost redis-6.0.6]# vim conf/sentinel.conf
port 26379 #運(yùn)行的端口
daemonize yes #是否守護(hù)進(jìn)程
pidfile /var/run/redis-sentinel.pid
logfile "sentinel.log" #日志文件名
dir /tmp #日志的位置
sentinel monitor mymaster 10.1.1.114 6379 2 # Sentinel去監(jiān)視一個(gè)名為mymaster 的主redis實(shí)例,這個(gè)主實(shí)例的IP地址為本機(jī)地址10.1.1.114,端口號為6379,而將這個(gè)主實(shí)例判斷為失效至少需要2個(gè) Sentinel進(jìn)程的同意,只要同意Sentinel的數(shù)量不達(dá)標(biāo),自動(dòng)failover就不會執(zhí)行
sentinel down-after-milliseconds mymaster 30000
sentinel parallel-syncs mymaster 1
sentinel failover-timeout mymaster 180000
sentinel deny-scripts-reconfig yes
配置說明 參考https://www.cnblogs.com/kevingrace/p/9004460.html
啟動(dòng)
[root@localhost redis-6.0.6]# src/redis-sentinel conf/sentinel.conf
[root@localhost redis-6.0.6]# cat sentinel.log
24620:X 13 Oct 2020 17:07:23.786 # oO0OoO0OoO0Oo Redis is starting oO0OoO0OoO0Oo
24620:X 13 Oct 2020 17:07:23.787 # Redis version=6.0.6, bits=64, commit=00000000, modified=0, pid=24620, just started
24620:X 13 Oct 2020 17:07:23.787 # Configuration loaded
24621:X 13 Oct 2020 17:07:23.792 * Increased maximum number of open files to 10032 (it was originally set to 1024).
24621:X 13 Oct 2020 17:07:23.795 * Running mode=sentinel, port=26379.
24621:X 13 Oct 2020 17:07:23.795 # WARNING: The TCP backlog setting of 511 cannot be enforced because /proc/sys/net/core/somaxconn is set to the lower value of 128.
24621:X 13 Oct 2020 17:07:23.798 # Sentinel ID is 404a494a8646a734f66a3918603d8d8cfd322365
24621:X 13 Oct 2020 17:07:23.798 # +monitor master mymaster 127.0.0.1 6379 quorum 2
24621:X 13 Oct 2020 17:07:23.810 * +slave slave 10.199.0.254:6379 10.199.0.254 6379 @ mymaster 127.0.0.1 6379
3臺哨兵
- 因?yàn)橹辽?臺哨兵發(fā)現(xiàn)masterdown機(jī)之后,才能執(zhí)行failover選舉新的master,所以至少要3臺哨兵
- 按上述步驟,配置10.1.1.114和10.1.1.115的哨兵,注意配置文件中
sentinel monitor mymaster 10.1.1.114 6379 2
這個(gè)ip地址始終是master 114的地址
3臺哨兵分別啟動(dòng)
現(xiàn)在哨兵模式就設(shè)置完成了
查看哨兵的狀態(tài)
[root@localhost redis-6.0.6]# src/redis-cli -p 26379 # 通過哨兵26379端口進(jìn)行查看
127.0.0.1:26379> info sentinel
Sentinel
sentinel_masters:1 #表示本機(jī)上的sentinel監(jiān)聽了1個(gè)redis master 節(jié)點(diǎn)
sentinel_tilt:0
sentinel_running_scripts:0
sentinel_scripts_queue_length:0
sentinel_simulate_failure_flags:0
master0:name=mymaster,status=ok,address=127.0.0.1:6379,slaves=1,sentinels=3
#此處表示master0的name是mymaster,狀態(tài)ok,地址就是本機(jī),有一個(gè)slaves,有兩個(gè)哨兵在監(jiān)聽這個(gè)主機(jī)
Sentinel 命令
以下列出的是 Sentinel 接受的命令:
PING :返回 PONG 。
SENTINEL masters :列出所有被監(jiān)視的主服務(wù)器,以及這些主服務(wù)器的當(dāng)前狀態(tài)。
SENTINEL slaves <master name>:列出給定主服務(wù)器的所有從服務(wù)器,以及這些從服務(wù)器的當(dāng)前狀態(tài)。
SENTINEL get-master-addr-by-name <master name>: 返回給定名字的主服務(wù)器的 IP 地址和端口號。 如果這個(gè)主服務(wù)器正在執(zhí)行故障轉(zhuǎn)移操作, 或者針對這個(gè)主服務(wù)器的故障轉(zhuǎn)移操作已經(jīng)完成, 那么這個(gè)命令返回新的主服務(wù)器的 IP 地址和端口號。
SENTINEL reset <pattern>: 重置所有名字和給定模式 pattern 相匹配的主服務(wù)器。 pattern 參數(shù)是一個(gè) Glob 風(fēng)格的模式。 重置操作清楚主服務(wù)器目前的所有狀態(tài), 包括正在執(zhí)行中的故障轉(zhuǎn)移, 并移除目前已經(jīng)發(fā)現(xiàn)和關(guān)聯(lián)的, 主服務(wù)器的所有從服務(wù)器和 Sentinel 。
SENTINEL failover <master name> : 當(dāng)主服務(wù)器失效時(shí), 在不詢問其他 Sentinel 意見的情況下, 強(qiáng)制開始一次自動(dòng)故障遷移 (不過發(fā)起故障轉(zhuǎn)移的 Sentinel 會向其他 Sentinel 發(fā)送一個(gè)新的配置,其他 Sentinel 會根據(jù)這個(gè)配置進(jìn)行相應(yīng)的更新)。
模擬down機(jī)
- 我們在master機(jī)器114上,手動(dòng)shutdown服務(wù)
[root@localhost redis-6.0.6]# src/redis-cli
127.0.0.1:6379> shutdown
- 在113從節(jié)點(diǎn)機(jī)器上,查看sentinel日志
[root@localhost redis-6.0.6]# tail -f /tmp/sentinel.log
2977:X 14 Oct 2020 11:00:33.767 # +sdown master mymaster 10.199.0.114 6379 #一臺發(fā)現(xiàn)down機(jī),主觀down機(jī)
2977:X 14 Oct 2020 11:00:33.855 # +new-epoch 8
2977:X 14 Oct 2020 11:00:33.860 # +vote-for-leader 50f78350077e8289ab5cb4eb443ab64eba997cbf 8 #選舉新的哨兵master,用來處理主從切換,遷移
2977:X 14 Oct 2020 11:00:33.860 # +odown master mymaster 10.199.0.114 6379 #quorum 3/2 #真正odown 客觀down機(jī),準(zhǔn)備主從切換
2977:X 14 Oct 2020 11:00:33.860 # Next failover delay: I will not start a failover before Wed Oct 14 11:06:34 2020
2977:X 14 Oct 2020 11:00:34.199 # +config-update-from sentinel 50f78350077e8289ab5cb4eb443ab64eba997cbf 10.199.0.115 26379 @ mymaster 10.199.0.114 6379
2977:X 14 Oct 2020 11:00:34.199 # +switch-master mymaster 10.199.0.114 6379 10.199.0.115 6379 #把114主節(jié)點(diǎn)切換到115上
2977:X 14 Oct 2020 11:00:34.199 * +slave slave 10.199.0.113:6379 10.199.0.113 6379 @ mymaster 10.199.0.115 6379
2977:X 14 Oct 2020 11:00:34.199 * +slave slave 10.199.0.254:6379 10.199.0.254 6379 @ mymaster 10.199.0.115 6379
2977:X 14 Oct 2020 11:00:34.200 * +slave slave 10.199.0.114:6379 10.199.0.114 6379 @ mymaster 10.199.0.115 6379
2977:X 14 Oct 2020 11:01:04.206 # +sdown slave 10.199.0.114:6379 10.199.0.114 6379 @ mymaster 10.199.0.115 6379
2977:X 14 Oct 2020 11:03:34.694 * +fix-slave-config slave 10.199.0.113:6379 10.199.0.113 6379 @ mymaster 10.199.0.115 6379 #修復(fù)113的配置,relicationOf 改成115
- 我們登錄115,查看集群replication,可以看到115已經(jīng)升級為主節(jié)點(diǎn)
[root@localhost redis-6.0.6]# src/redis-cli
127.0.0.1:6379> info replication
# Replication
role:master
connected_slaves:1
slave0:ip=10.199.0.113,port=6379,state=online,offset=500696,lag=0
master_replid:e8c5a4739fa4d12d8c7917bf596f618fdf7b81ea
master_replid2:4004d23739e1682f41c769ba2d203d31bb4e6373
master_repl_offset:500696
second_repl_offset:119538
repl_backlog_active:1
repl_backlog_size:1048576
repl_backlog_first_byte_offset:37310
repl_backlog_histlen:463387
127.0.0.1:6379>
并且115和113的conf/redis.conf也相應(yīng)的調(diào)整了
另外,114如果再啟動(dòng)的話,必須自己手動(dòng)修改配置,增加replicaOf
推薦一個(gè)介紹redis的博客 http://doc.redisfans.com/topic/sentinel.html,這個(gè)博客把官方的英文文檔翻譯過來,語法表達(dá)都很贊