新聞中心

成都創(chuàng)新互聯(lián)公司主要從事成都網(wǎng)站建設(shè)、網(wǎng)站建設(shè)、網(wǎng)頁(yè)設(shè)計(jì)、企業(yè)做網(wǎng)站、公司建網(wǎng)站等業(yè)務(wù)。立足成都服務(wù)金水,10多年網(wǎng)站建設(shè)經(jīng)驗(yàn),價(jià)格優(yōu)惠、服務(wù)專業(yè),歡迎來電咨詢建站服務(wù):13518219792
Redis 官方推薦一種高可用方案,也就是 Redis Sentinel 哨兵模式,它彌補(bǔ)了主從模式的不足。Sentinel 通過監(jiān)控的方式獲取主機(jī)的工作狀態(tài)是否正常,當(dāng)主機(jī)發(fā)生故障時(shí), Sentinel 會(huì)自動(dòng)進(jìn)行 Failover(即故障轉(zhuǎn)移),并將其監(jiān)控的從機(jī)提升主服務(wù)器(master),從而保證了系統(tǒng)的高可用性。
哨兵模式原理
哨兵模式是一種特殊的模式,Redis 為其提供了專屬的哨兵命令,它是一個(gè)獨(dú)立的進(jìn)程,能夠獨(dú)立運(yùn)行。下面使用 Sentinel 搭建 Redis 集群,基本結(jié)構(gòu)圖如下所示:
圖1:哨兵基本模式
在上圖過程中,哨兵主要有兩個(gè)重要作用:
- 第一:哨兵節(jié)點(diǎn)會(huì)以每秒一次的頻率對(duì)每個(gè) Redis 節(jié)點(diǎn)發(fā)送
PING命令,并通過 Redis 節(jié)點(diǎn)的回復(fù)來判斷其運(yùn)行狀態(tài)。 - 第二:當(dāng)哨兵監(jiān)測(cè)到主服務(wù)器發(fā)生故障時(shí),會(huì)自動(dòng)在從節(jié)點(diǎn)中選擇一臺(tái)將機(jī)器,并其提升為主服務(wù)器,然后使用 PubSub 發(fā)布訂閱模式,通知其他的從節(jié)點(diǎn),修改配置文件,跟隨新的主服務(wù)器。
在實(shí)際生產(chǎn)情況中,Redis Sentinel 是集群的高可用的保障,為避免 Sentinel 發(fā)生意外,它一般是由 3~5 個(gè)節(jié)點(diǎn)組成,這樣就算掛了個(gè)別節(jié)點(diǎn),該集群仍然可以正常運(yùn)轉(zhuǎn)。其結(jié)構(gòu)圖如下所示:
圖2:多哨兵模式
上圖所示,多個(gè)哨兵之間也存在互相監(jiān)控,這就形成了多哨兵模式,現(xiàn)在對(duì)該模式的工作過程進(jìn)行講解,介紹如下:
1) 主觀下線
主觀下線,適用于主服務(wù)器和從服務(wù)器。如果在規(guī)定的時(shí)間內(nèi)(配置參數(shù):down-after-milliseconds),Sentinel 節(jié)點(diǎn)沒有收到目標(biāo)服務(wù)器的有效回復(fù),則判定該服務(wù)器為“主觀下線”。比如 Sentinel1 向主服務(wù)發(fā)送了
PING命令,在規(guī)定時(shí)間內(nèi)沒收到主服務(wù)器
PONG回復(fù),則 Sentinel1 判定主服務(wù)器為“主觀下線”。
2) 客觀下線
客觀下線,只適用于主服務(wù)器。 Sentinel1 發(fā)現(xiàn)主服務(wù)器出現(xiàn)了故障,它會(huì)通過相應(yīng)的命令,詢問其它 Sentinel 節(jié)點(diǎn)對(duì)主服務(wù)器的狀態(tài)判斷。如果超過半數(shù)以上的 Sentinel 節(jié)點(diǎn)認(rèn)為主服務(wù)器 down 掉,則 Sentinel1 節(jié)點(diǎn)判定主服務(wù)為“客觀下線”。
3) 投票選舉
投票選舉,所有 Sentinel 節(jié)點(diǎn)會(huì)通過投票機(jī)制,按照誰(shuí)發(fā)現(xiàn)誰(shuí)去處理的原則,選舉 Sentinel1 為領(lǐng)頭節(jié)點(diǎn)去做 Failover(故障轉(zhuǎn)移)操作。Sentinel1 節(jié)點(diǎn)則按照一定的規(guī)則在所有從節(jié)點(diǎn)中選擇一個(gè)最優(yōu)的作為主服務(wù)器,然后通過發(fā)布訂功能通知其余的從節(jié)點(diǎn)(slave)更改配置文件,跟隨新上任的主服務(wù)器(master)。至此就完成了主從切換的操作。
對(duì)上對(duì)述過程做簡(jiǎn)單總結(jié):
Sentinel 負(fù)責(zé)監(jiān)控主從節(jié)點(diǎn)的“健康”狀態(tài)。當(dāng)主節(jié)點(diǎn)掛掉時(shí),自動(dòng)選擇一個(gè)最優(yōu)的從節(jié)點(diǎn)切換為主節(jié)點(diǎn)??蛻舳藖磉B接 Redis 集群時(shí),會(huì)首先連接 Sentinel,通過 Sentinel 來查詢主節(jié)點(diǎn)的地址,然后再去連接主節(jié)點(diǎn)進(jìn)行數(shù)據(jù)交互。當(dāng)主節(jié)點(diǎn)發(fā)生故障時(shí),客戶端會(huì)重新向 Sentinel 要地址,Sentinel 會(huì)將最新的主節(jié)點(diǎn)地址告訴客戶端。因此應(yīng)用程序無需重啟即可自動(dòng)完成主從節(jié)點(diǎn)切換。
哨兵模式應(yīng)用
Redis Sentinel 哨兵模式適合于在 Linux 系統(tǒng)中使用,所以下面的應(yīng)用都基于 Ubuntu 實(shí)現(xiàn)。
1) 安裝sentinel
Sentinel 需要作為插件單獨(dú)安裝,安裝方式如下:
sudo apt install redis-sentinel
2) 搭建主從模式
接下來,在本地環(huán)境使用主從模式搭建一個(gè)擁有三臺(tái)服務(wù)器的 Redis 集群,命令如下所示:
啟動(dòng)6379的redis服務(wù)器作為master主機(jī): sudo /etc/init.d/redis-server start 啟動(dòng)6380的redis服務(wù)器,設(shè)置為6379的slave: redis-server --port 6380 $ redis-cli -p 6380 127.0.0.1:6380> slaveof 127.0.0.1 6379 OK 啟動(dòng)6381的redis服務(wù)器,設(shè)置為6379的salve redis-server --port 6381 $ redis-cli -p 6381 127.0.0.1:6381> slaveof 127.0.0.1 6379
3) 配置sentinel哨兵
首先新建 sentinel.conf 文件,并對(duì)其進(jìn)行配置,如下所示:
port 26379 Sentinel monitor biancheng 127.0.0.1 6379 1
配置文件說明如下:
port 26379 #sentinel監(jiān)聽端口,默認(rèn)是26379,可以更改 sentinel monitor
第二個(gè)配置項(xiàng)表示:讓 sentinel 去監(jiān)控一個(gè)地址為 ip:port 的主服務(wù)器,這里的 master-name 可以自定義;
4) 啟動(dòng)sentienl哨兵
方式一: redis-sentinel sentinel.conf 方式二: redis-server sentinel.conf --sentinel
5) 停止主服務(wù)器服務(wù)
下面模擬主服務(wù)意外宕機(jī)的情況,首先直接將主服務(wù)器的 Redis 服務(wù)終止,然后查看從服務(wù)器是否被提升為了主服務(wù)器。執(zhí)行以下命令:
#終止master的redis服務(wù) sudo /etc/init.d/redis-server stop
執(zhí)行完上述命令,您會(huì)發(fā)現(xiàn) 6381 稱為了新的 master,而其余節(jié)點(diǎn)變成了它的從機(jī),執(zhí)行命令驗(yàn)證:
127.0.0.1:6381> set webname www.biancheng.net OK
哨兵的配置文件 sentinel.conf 也發(fā)生了變化:
#port 26379 #sentinel myid 4c626b6ff25dca5e757afdae2bd26a881a61a2b2 # Generated by CONFIG REWRITE dir "/home/biancheng" maxclients 4064 sentinel myid 4c626b6ff25dca5e757afdae2bd26a881a61a2b2 sentinel monitor biancheng 127.0.0.1 6379 1 sentinel config-epoch biancheng 2 sentinel leader-epoch biancheng 2 sentinel known-slave biancheng 127.0.0.1 6379 sentinel known-slave biancheng 127.0.0.1 6380 sentinel known-slave biancheng 127.0.0.1 6381 port 26379 sentinel current-epoch 2
如果您想開啟多個(gè)哨兵,只需配置要多個(gè) sentinel.conf 文件即可,一個(gè)配置文件開啟一個(gè)。
sentinel.conf配置項(xiàng)
下面對(duì) Sentinel 配置文件的其他配置項(xiàng)做簡(jiǎn)單說明:
| 配置項(xiàng) | 參數(shù)類型 | 說明 |
|---|---|---|
| dir | 文件目錄 | 哨兵進(jìn)程服務(wù)的文件存放目錄,默認(rèn)為 /tmp。 |
| port | 端口號(hào) | 啟動(dòng)哨兵的進(jìn)程端口號(hào),默認(rèn)為 26379。 |
| sentinel down-after-milliseconds | <服務(wù)名稱><毫秒數(shù)(整數(shù))> | 在指定的毫秒數(shù)內(nèi),若主節(jié)點(diǎn)沒有應(yīng)答哨兵的 PING 命令,此時(shí)哨兵認(rèn)為服務(wù)器主觀下線,默認(rèn)時(shí)間為 30 秒。 |
| sentinel parallel-syncs | <服務(wù)名稱><服務(wù)器數(shù)(整數(shù))> | 指定可以有多少個(gè) Redis 服務(wù)同步新的主機(jī),一般而言,這個(gè)數(shù)字越小同步時(shí)間越長(zhǎng),而越大,則對(duì)網(wǎng)絡(luò)資源要求就越高。 |
| sentinel failover-timeout | <服務(wù)名稱><毫秒數(shù)(整數(shù))> | 指定故障轉(zhuǎn)移允許的毫秒數(shù),若超過這個(gè)時(shí)間,就認(rèn)為故障轉(zhuǎn)移執(zhí)行失敗,默認(rèn)為 3 分鐘。 |
| sentinel notification-script | <服務(wù)名稱><腳本路徑> | 腳本通知,配置當(dāng)某一事件發(fā)生時(shí)所需要執(zhí)行的腳本,可以通過腳本來通知管理員,例如當(dāng)系統(tǒng)運(yùn)行不正常時(shí)發(fā)郵件通知相關(guān)人員。 |
| sentinel auth-pass |
<服務(wù)器名稱><密碼> | 若主服務(wù)器設(shè)置了密碼,則哨兵必須也配置密碼,否則哨兵無法對(duì)主從服務(wù)器進(jìn)行監(jiān)控。該密碼與主服務(wù)器密碼相同。 |
本文標(biāo)題:Redis集群:Sentinel哨兵模式(詳細(xì)圖解)
網(wǎng)站地址:http://www.5511xx.com/article/dpjesod.html


咨詢
建站咨詢
