2020-10-13 redis6 哨兵模式-接上一篇

上一篇文章我們講了redis主從節(jié)點(diǎn)的安裝配置,為了實(shí)現(xiàn)客戶端連接的讀寫(xiě)分離,安裝哨兵sentinel模式;

配置文件sentinel.conf修改

還是先把沒(méi)有注釋的配置拷貝出來(lái)
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,端口號(hào)為6379,而將這個(gè)主實(shí)例判斷為失效至少需要2個(gè) Sentinel進(jìn)程的同意,只要同意Sentinel的數(shù)量不達(dá)標(biāo),自動(dòng)failover就不會(huì)執(zhí)行
sentinel down-after-milliseconds mymaster 30000
sentinel parallel-syncs mymaster 1
sentinel failover-timeout mymaster 180000
sentinel deny-scripts-reconfig yes

配置說(shuō)明 參考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臺(tái)哨兵

  • 因?yàn)橹辽?臺(tái)哨兵發(fā)現(xiàn)masterdown機(jī)之后,才能執(zhí)行failover選舉新的master,所以至少要3臺(tái)哨兵
  • 按上述步驟,配置10.1.1.114和10.1.1.115的哨兵,注意配置文件中sentinel monitor mymaster 10.1.1.114 6379 2這個(gè)ip地址始終是master 114的地址
    3臺(tái)哨兵分別啟動(dòng)
    現(xiàn)在哨兵模式就設(shè)置完成了
    查看哨兵的狀態(tài)
[root@localhost redis-6.0.6]# src/redis-cli -p 26379 # 通過(guò)哨兵26379端口進(jìn)行查看
127.0.0.1:26379> info sentinel
Sentinel
sentinel_masters:1 #表示本機(jī)上的sentinel監(jiān)聽(tīng)了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)聽(tīng)這個(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 地址和端口號(hào)。 如果這個(gè)主服務(wù)器正在執(zhí)行故障轉(zhuǎn)移操作, 或者針對(duì)這個(gè)主服務(wù)器的故障轉(zhuǎn)移操作已經(jīng)完成, 那么這個(gè)命令返回新的主服務(wù)器的 IP 地址和端口號(hào)。
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í), 在不詢問(wèn)其他 Sentinel 意見(jiàn)的情況下, 強(qiáng)制開(kāi)始一次自動(dòng)故障遷移 (不過(guò)發(fā)起故障轉(zhuǎn)移的 Sentinel 會(huì)向其他 Sentinel 發(fā)送一個(gè)新的配置,其他 Sentinel 會(huì)根據(jù)這個(gè)配置進(jìn)行相應(yīng)的更新)。

模擬down機(jī)

  • 我們?cè)趍aster機(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 #一臺(tái)發(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,用來(lái)處理主從切換,遷移
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)升級(jí)為主節(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è)博客把官方的英文文檔翻譯過(guò)來(lái),語(yǔ)法表達(dá)都很贊

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容