溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊(cè)×
其他方式登錄
點(diǎn)擊 登錄注冊(cè) 即表示同意《億速云用戶服務(wù)條款》

Redis哨兵部署(sentinel)(實(shí)驗(yàn))

發(fā)布時(shí)間:2020-06-18 07:37:25 來(lái)源:網(wǎng)絡(luò) 閱讀:10750 作者:張德帥ya 欄目:數(shù)據(jù)庫(kù)


首先感謝“吧喱公路”的引導(dǎo),打開(kāi)了我對(duì)哨兵的理解思路,再次謝謝。


Redis的哨兵sentinel) ??

? ? 哨兵適用于非集群結(jié)構(gòu)的redis環(huán)境,比如:redis主從環(huán)境。


? ? 關(guān)于哨兵集群,我這里就不做實(shí)驗(yàn)了,網(wǎng)上有大量的配置方法。

? ? 哨兵集群的核心思想,就是解決哨兵的單點(diǎn)故障問(wèn)題。

? ? 個(gè)人認(rèn)為,有做哨兵集群的經(jīng)費(fèi),不如直接做個(gè)redis集群了。


環(huán)境描述:主從從結(jié)構(gòu)

? ? master:192.168.2.100:6379 ? ? ?#單節(jié)點(diǎn)sentinel運(yùn)行在這個(gè)環(huán)境上

? ? slave:192.168.2.200:6379 ??

? ? savle:192.168.2.201:6379 ? ?

? ??

redis安裝路徑:/usr/local/redis-3.0.6-6379


redis.conf關(guān)鍵配置:這里不絮訴基本配置了,主從配置參考:https://blog.51cto.com/13690439/2118890

? ? master:

? ? ? ? # vim redis.conf

? ? ? ? ? ? requirepass "123456" ? ? ? ?//設(shè)置連接master密碼

? ? ? ? ? ? masterauth "123456" ? ? ? //登錄master時(shí),調(diào)用該參數(shù)

? ? ? ? ? ??

? ? slave:

? ? ? ? # vim etc/redis.conf

? ? ? ? ? ? slaveof 192.168.2.100 6379 ? ? ? ? ?//指定主庫(kù)IP和端口

? ? ? ? ? ? requirepass "123456" ? ? ? ?//之所以3個(gè)redis都這樣寫(xiě),是為了故障切換后,info replication顯示slave0信息

? ? ? ? ? ? masterauth 123456 ? ? ? ? ?//登錄master時(shí),調(diào)用該參數(shù)

? ? ? ? ? ??

哨兵關(guān)鍵配置:sentinel.conf

? ? # vim sentinel.conf

? ? ? ? port 26379 ? ? ? ?//端口

? ? ? ? sentinel monitor mymaster 192.168.2.100 6379 1 ? ? ??

? ? ? ? ? ? ? ? ? ? ? ? //master-name可以自定義、監(jiān)聽(tīng)I(yíng)P:port ?幾個(gè)sentinel認(rèn)為故障時(shí),才算真正的故障

? ? ? ? sentinel down-after-milliseconds mymaster 3000

? ? ? ? ? ? ? ? ? ? ? ? //哨兵發(fā)送PING消息,等待PONG消息的時(shí)間,超過(guò)設(shè)定時(shí)間表示故障;毫秒

? ? ? ? sentinel failover-timeout mymaster 10000 ? ? ?

? ? ? ? ? ? ? ? ? ? ? ? //故障轉(zhuǎn)移(failover)超時(shí)時(shí)間,超過(guò)設(shè)定時(shí)間表示故障轉(zhuǎn)移失敗;毫秒

? ? ? ? sentinel auth-pass mymaster 123456 ? ? ? ? ?//設(shè)置連接master需要的密碼

? ? ??

啟動(dòng)master的redis:

? ? # redis-server redis.conf

? ? ? ??

啟動(dòng)哨兵:新開(kāi)一個(gè)xshell

? ? # redis-sentinel sentinel.conf?


啟動(dòng)slave的redis:

? ? # redis-server redis.conf

? ??

哨兵的輸出:

? ? # Sentinel runid is e49df1197325687d9a40508c00f466a8c6e596db

? ? ? ? ? ? ? ? ? ? //哨兵ID

? ? # +monitor master mymaster 192.168.2.100 6379 quorum 1

? ? ? ? ? ? ? ? ? ? //+monitor:增加了一個(gè)master監(jiān)控,后面就是master的信息

? ? * +slave slave 192.168.2.200:6379 192.168.2.200 6379 @ mymaster 192.168.2.100 6379

? ? ? ? ? ? ? ? ? ? //+salve:增加了一個(gè)salve監(jiān)控,后面是salve的信息

? ? * +slave slave 192.168.2.201:6379 192.168.2.201 6379 @ mymaster 192.168.2.100 6379

? ? ? ? ? ? ? ? ? ? //+salve:增加了一個(gè)salve監(jiān)控,后面是salve的信息

? ? ? ? ? ? ? ? ? ??

master上登錄redis:

? ? # redis-cli -h 192.168.2.100 -p 6379 -a 123456

? ? ? ? 192.168.2.100:6379> set name zhangsan

? ? ? ? OK

? ? ? ? 192.168.2.100:6379> set age 26

? ? ? ? OK

? ? ? ? 192.168.2.100:6379> set home beijing

? ? ? ? OK

? ? ? ? 192.168.2.100:6379> keys *

? ? ? ? 1) "name"

? ? ? ? 2) "home"

? ? ? ? 3) "age"


salve上登錄redis:兩個(gè)salve登錄查看,數(shù)據(jù)同步正常

? ? # redis-cli -h 192.168.2.200 -p 6379 -a 123456

? ? ? ? 192.168.2.200:6379> keys *

? ? ? ? 1) "name"

? ? ? ? 2) "home"

? ? ? ? 3) "age"

? ??

停止master的redis:注意觀察哨兵的輸出

? ? # ps -ef |grep redis

? ? ? ? root ? ? ?11467 ? ? ?1 ?0 17:12 ? ? ? ? ?00:00:00 redis-server *:6379

? ? ? ? root ? ? ?11473 ? 4650 ?0 17:12 pts/1 ? ?00:00:00 redis-sentinel *:26379 [sentinel]

? ? ? ? root ? ? ?11513 ? 4339 ?0 17:16 pts/0 ? ?00:00:00 grep --color=auto redis

? ? # kill 11467

? ??

哨兵的輸出:

? ? # +sdown master mymaster 192.168.2.100 6379

? ? ? ? ? ? ? ? ? ? //+sdown:master節(jié)點(diǎn)掛了。后面是master信息

? ? # +odown master mymaster 192.168.2.100 6379 #quorum 1/1

? ? # +new-epoch 14

? ? # +try-failover master mymaster 192.168.2.100 6379

? ? ? ? ? ? ? ? ? ? //開(kāi)始恢復(fù)故障

? ? # +vote-for-leader e49df1197325687d9a40508c00f466a8c6e596db 14

? ? ? ? ? ? ? ? ? ? //投票選舉節(jié)點(diǎn)的哨兵信息,因?yàn)槲覀兙鸵粋€(gè)哨兵,所以就是自己 leader

? ? # +elected-leader master mymaster 192.168.2.100 6379

? ? ? ? ? ? ? ? ? ? //選舉節(jié)點(diǎn)后替換誰(shuí)

? ? # +failover-state-select-slave master mymaster 192.168.2.100 6379

? ? ? ? ? ? ? ? ? ? //開(kāi)始為故障的master選舉

? ? # +selected-slave slave 192.168.2.200:6379 192.168.2.200 6379 @ mymaster 192.168.2.100 6379

? ? ? ? ? ? ? ? ? ? //節(jié)點(diǎn)選舉結(jié)果,選中192.168.2.200:6379來(lái)替換master

? ? * +failover-state-send-slaveof-noone slave 192.168.2.200:6379 192.168.2.200 6379 @ mymaster 192.168.2.100 6379

? ? ? ? ? ? ? ? ? ? //確認(rèn)節(jié)點(diǎn)選舉結(jié)果

? ? * +failover-state-wait-promotion slave 192.168.2.200:6379 192.168.2.200 6379 @ mymaster 192.168.2.100 6379

? ? ? ? ? ? ? ? ? ? //選中的節(jié)點(diǎn)正在升級(jí)為master

? ? # +promoted-slave slave 192.168.2.200:6379 192.168.2.200 6379 @ mymaster 192.168.2.100 6379

? ? ? ? ? ? ? ? ? ? //選中的節(jié)點(diǎn)已成功升級(jí)為master

? ? # +failover-state-reconf-slaves master mymaster 192.168.2.100 6379

? ? ? ? ? ? ? ? ? ? //切換故障master的狀態(tài)

? ? * +slave-reconf-sent slave 192.168.2.201:6379 192.168.2.201 6379 @ mymaster 192.168.2.100 6379

? ? ? ? ? ? ? ? ? ? //

? ? * +slave-reconf-inprog slave 192.168.2.201:6379 192.168.2.201 6379 @ mymaster 192.168.2.100 6379

? ? ? ? ? ? ? ? ? ? //其他節(jié)點(diǎn)同步故障master信息

? ? * +slave-reconf-done slave 192.168.2.201:6379 192.168.2.201 6379 @ mymaster 192.168.2.100 6379

? ? ? ? ? ? ? ? ? ? //其他節(jié)點(diǎn)完成故障master的同步

? ? # +failover-end master mymaster 192.168.2.100 6379

? ? ? ? ? ? ? ? ? ? //故障恢復(fù)完成

? ? # +switch-master mymaster 192.168.2.100 6379 192.168.2.200 6379

? ? ? ? ? ? ? ? ? ? //master從192.168.2.100:6379 ?變?yōu)?192.168.2.200:6379

? ? * +slave slave 192.168.2.201:6379 192.168.2.201 6379 @ mymaster 192.168.2.200 6379

? ? ? ? ? ? ? ? ? ? //其他節(jié)點(diǎn)指定新的master

? ? * +slave slave 192.168.2.100:6379 192.168.2.100 6379 @ mymaster 192.168.2.200 6379

? ? ? ? ? ? ? ? ? ? //故障master指定新的master

? ? # +sdown slave 192.168.2.100:6379 192.168.2.100 6379 @ mymaster 192.168.2.200 6379

? ? ? ? ? ? ? ? ? ? //192.168.2.100:6379宕機(jī),待恢復(fù)


啟動(dòng)master的redis注意觀察哨兵的輸出

? ? # redis-server redis.conf

? ??

哨兵的輸出:

? ? # -sdown slave 192.168.2.100:6379 192.168.2.100 6379 @ mymaster 192.168.2.200 6379

? ? ? ? ? ? ? ? ? ? //故障master節(jié)點(diǎn)已經(jīng)恢復(fù)

? ? * +convert-to-slave slave 192.168.2.100:6379 192.168.2.100 6379 @ mymaster 192.168.2.200 6379

? ? ? ? ? ? ? ? ? ? //故障master節(jié)點(diǎn)變?yōu)閟alve,他的master為192.168.2.200:6379


現(xiàn)在我們查看主從的狀態(tài):

? ? 192.168.2.100上查看:

? ? ? ? # redis-cli -h 192.168.2.100 -p 6379 -a 123456

? ? ? ? ? ? 192.168.2.100:6379> info replication

? ? ? ? ? ? # Replication

? ? ? ? ? ? role:slave

? ? ? ? ? ? master_host:192.168.2.200

? ? ? ? ? ? master_port:6379

? ? ? ? ? ? master_link_status:up

? ? ? ? ? ? 192.168.2.100:6379> set ab 123

? ? ? ? ? ? (error) READONLY You can't write against a read only slave.

? ? ? ? ? ? 192.168.2.100:6379> get name

? ? ? ? ? ? "zhagnsan"

? ? ? ? ? ??

? ? 192.168.2.201上查看:

? ? ? ? # redis-cli -h 192.168.2.201 -p 6379 -a 123456

? ? ? ? ? ? 192.168.2.201:6379> info replication

? ? ? ? ? ? # Replication

? ? ? ? ? ? role:slave

? ? ? ? ? ? master_host:192.168.2.200

? ? ? ? ? ? master_port:6379

? ? ? ? ? ? master_link_status:up

? ? ? ? ? ? 192.168.2.201:6379> set ab 123

? ? ? ? ? ? (error) READONLY You can't write against a read only slave.

? ? ? ? ? ? 192.168.2.201:6379> get name

? ? ? ? ? ? "zhagnsan"

? ? ? ? ? ??

? ? 192.168.2.200上查看:

? ? ? ? # redis-cli -h 192.168.2.200 -p 6379 -a 123456

? ? ? ? ? ? 192.168.2.200:6379> info replication

? ? ? ? ? ? # Replication

? ? ? ? ? ? role:master

? ? ? ? ? ? connected_slaves:2

? ? ? ? ? ? slave0:ip=192.168.2.201,port=6379,state=online,offset=24990,lag=1

? ? ? ? ? ? slave1:ip=192.168.2.100,port=6379,state=online,offset=24990,lag=0

? ? ? ? ? ? 192.168.2.200:6379> set ab 123

? ? ? ? ? ? OK

? ? ? ? ? ? 192.168.2.200:6379> keys *

? ? ? ? ? ? 1) "name"

? ? ? ? ? ? 2) "home"

? ? ? ? ? ? 3) "age"

? ? ? ? ? ? 4) "ab"

?

?總結(jié):通過(guò)哨兵(sentinel)實(shí)現(xiàn)了主從從環(huán)境高可用效果。

? ? ? ?master在宕機(jī)后,通過(guò)哨兵自動(dòng)將其中一個(gè)salve提升為master,切換過(guò)程中,數(shù)據(jù)保存完整。

? ? ? ?但我們也發(fā)現(xiàn),原master不能繼續(xù)插入key了, 而客戶端連接還是會(huì)連原master,

? ? ? ?這時(shí),我們就需要在數(shù)據(jù)庫(kù)連接池做一些規(guī)則設(shè)置了。

? ? ? ?由于目前我能力有限,無(wú)法解釋連接池問(wèn)題,還請(qǐng)見(jiàn)諒。


向AI問(wèn)一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI