主頁(yè) > 知識(shí)庫(kù) > Redis Sentinel服務(wù)配置流程(詳解)

Redis Sentinel服務(wù)配置流程(詳解)

熱門標(biāo)簽:呼叫中心市場(chǎng)需求 百度競(jìng)價(jià)排名 鐵路電話系統(tǒng) AI電銷 網(wǎng)站排名優(yōu)化 服務(wù)外包 地方門戶網(wǎng)站 Linux服務(wù)器

1、Redis Sentinel服務(wù)配置

1.1簡(jiǎn)介

Redis 的 Sentinel 系統(tǒng)用于管理多個(gè) Redis 服務(wù)器(instance), 該系統(tǒng)執(zhí)行以下三個(gè)任務(wù):

監(jiān)控(Monitoring): Sentinel 會(huì)不斷地檢查你的主服務(wù)器和從服務(wù)器是否運(yùn)作正常。

提醒(Notification): 當(dāng)被監(jiān)控的某個(gè) Redis 服務(wù)器出現(xiàn)問題時(shí), Sentinel 可以通過API 向管理員或者其他應(yīng)用程序發(fā)送通知。

自動(dòng)故障遷移(Automatic failover): 當(dāng)一個(gè)主服務(wù)器不能正常工作時(shí), Sentinel 會(huì)開始一次自動(dòng)故障遷移操作, 它會(huì)將失效主服務(wù)器的其中一個(gè)從服務(wù)器升級(jí)為新的主服務(wù)器, 并讓失效主服務(wù)器的其他從服務(wù)器改為復(fù)制新的主服務(wù)器; 當(dāng)客戶端試圖連接失效的主服務(wù)器時(shí), 集群也會(huì)向客戶端返回新主服務(wù)器的地址, 使得集群可以使用新主服務(wù)器代替失效服務(wù)器。

Redis Sentinel 是一個(gè)分布式系統(tǒng), 你可以在一個(gè)架構(gòu)中運(yùn)行多個(gè) Sentinel 進(jìn)程(progress), 這些進(jìn)程使用流言協(xié)議(gossip protocols)來接收關(guān)于主服務(wù)器是否下線的信息, 并使用投票協(xié)議(agreement protocols)來決定是否執(zhí)行自動(dòng)故障遷移,以及選擇哪個(gè)從服務(wù)器作為新的主服務(wù)器。

雖然 Redis Sentinel 釋出為一個(gè)單獨(dú)的可執(zhí)行文件 redis-sentinel , 但實(shí)際上它只是一個(gè)運(yùn)行在特殊模式下的 Redis 服務(wù)器, 你可以在啟動(dòng)一個(gè)普通 Redis 服務(wù)器時(shí)通過給定 --sentinel 選項(xiàng)來啟動(dòng)Redis Sentinel 。

1.2相關(guān)配置

案例:

如果要監(jiān)控兩個(gè)redis實(shí)例,可以進(jìn)行如下配置Redis安裝目錄下sentinel.conf文件:

常規(guī)配置:

port 26379

daemonize yes

logfile "/var/log/redis/sentinel.log"

 

#master 7000

sentinel monitor master1 127.0.0.1 7000 2                #配置master名、ip、port、需要多少個(gè)sentinel才能判斷[客觀下線](2)

sentinel down-after-milliseconds master-7000 30000      #配置sentinel向master發(fā)出ping,最大響應(yīng)時(shí)間、超過則認(rèn)為主觀下線

sentinel parallel-syncs master-7000 1                   #配置在進(jìn)行故障轉(zhuǎn)移時(shí),運(yùn)行多少個(gè)slave進(jìn)行數(shù)據(jù)備份同步(越少速度越快)

sentinel failover-timeout master-7000 180000            #配置當(dāng)出現(xiàn)failover時(shí)下一個(gè)sentinel與上一個(gè)sentinel對(duì)[同一個(gè)master監(jiān)測(cè)的時(shí)間間隔](最后設(shè)置為客觀下線)
 

#master 7001

sentinel monitor master2 127.0.0.1 7001 1

sentinel down-after-milliseconds master-7001 30000

sentinel parallel-syncs master-7001 1

sentinel failover-timeout master-7001 180000

特殊配置:

min-slaves-to-write 1

min-slaves-max-lag 10

通過上面的配置,當(dāng)一個(gè)redis是master時(shí),如果它不能向至少一個(gè)slave寫數(shù)據(jù)(上面的min-slaves-to-write指定了slave的數(shù)量),它將會(huì)拒絕接受客戶端的寫請(qǐng)求。由于復(fù)制是異步的,master無法向slave寫數(shù)據(jù)意味著slave要么斷開連接了,要么不在指定時(shí)間內(nèi)向master發(fā)送同步數(shù)據(jù)的請(qǐng)求了(上面的min-slaves-max-lag指定了這個(gè)時(shí)間)。

1.3 相關(guān)術(shù)語(yǔ)說明

Sentinel包括兩個(gè)重要的術(shù)語(yǔ):主觀下線和客觀下線>

1. 主觀下線(Subjectively Down, 簡(jiǎn)稱 SDOWN)指的是單個(gè) Sentinel 實(shí)例對(duì)服務(wù)器做出的下線判斷。

2. 客觀下線(Objectively Down, 簡(jiǎn)稱 ODOWN)指的是多個(gè) Sentinel 實(shí)例在對(duì)同一個(gè)服務(wù)器做出 SDOWN 判斷, 并且通過SENTINEL is-master-down-by-addr 命令互相交流之后, 得出的服務(wù)器下線判斷。

客觀下線條件只適用于主服務(wù)器: 對(duì)于任何其他類型的 Redis 實(shí)例, Sentinel 在將它們判斷為下線前不需要進(jìn)行協(xié)商, 所以從服務(wù)器或者其他 Sentinel 永遠(yuǎn)不會(huì)達(dá)到客觀下線條件。

只要一個(gè) Sentinel 發(fā)現(xiàn)某個(gè)主服務(wù)器進(jìn)入了客觀下線狀態(tài), 這個(gè)Sentinel 就可能會(huì)被其他 Sentinel 推選出, 并對(duì)失效的主服務(wù)器執(zhí)行自動(dòng)故障遷移操作。

每個(gè)Sentinel實(shí)例都執(zhí)行的定時(shí)任務(wù)

1. 每個(gè)Sentinel 以每秒鐘一次的頻率向它所知的主服務(wù)器、從服務(wù)器以及其他 Sentinel 實(shí)例發(fā)送一個(gè) PING 命令。

2. 如果一個(gè)實(shí)例(instance)距離最后一次有效回復(fù) PING 命令的時(shí)間超過 down-after-milliseconds 選項(xiàng)所指定的值, 那么這個(gè)實(shí)例會(huì)被 Sentinel 標(biāo)記為主觀下線。 一個(gè)有效回復(fù)可以是: +PONG 、 -LOADING 或者-MASTERDOWN 。

3. 如果一個(gè)主服務(wù)器被標(biāo)記為主觀下線, 那么正在監(jiān)視這個(gè)主服務(wù)器的所有 Sentinel 要以每秒一次的頻率確認(rèn)主服務(wù)器的確進(jìn)入了主觀下線狀態(tài)。

4. 如果一個(gè)主服務(wù)器被標(biāo)記為主觀下線, 并且有足夠數(shù)量的 Sentinel (至少要達(dá)到配置文件指定的數(shù)量)在指定的時(shí)間范圍內(nèi)同意這一判斷, 那么這個(gè)主服務(wù)器被標(biāo)記為客觀下線。

5. 在一般情況下, 每個(gè) Sentinel 會(huì)以每10 秒一次的頻率向它已知的所有主服務(wù)器和從服務(wù)器發(fā)送 INFO 命令。 當(dāng)一個(gè)主服務(wù)器被 Sentinel 標(biāo)記為客觀下線時(shí), Sentinel 向下線主服務(wù)器的所有從服務(wù)器發(fā)送 INFO 命令的頻率會(huì)從 10 秒一次改為每秒一次。

6. 當(dāng)沒有足夠數(shù)量的 Sentinel 同意主服務(wù)器已經(jīng)下線, 主服務(wù)器的客觀下線狀態(tài)就會(huì)被移除。 當(dāng)主服務(wù)器重新向 Sentinel 的 PING 命令返回有效回復(fù)時(shí), 主服務(wù)器的主管下線狀態(tài)就會(huì)被移除。

1.4服務(wù)日志說明

Sentinel服務(wù)啟動(dòng)后會(huì)打印一些相關(guān)日志信息,以下是相關(guān)日志特殊字符說明:

+reset-master instance details> :主服務(wù)器已被重置。

+slave instance details> :一個(gè)新的從服務(wù)器已經(jīng)被 Sentinel 識(shí)別并關(guān)聯(lián)。

+failover-state-reconf-slaves instancedetails> :故障轉(zhuǎn)移狀態(tài)切換到了reconf-slaves 狀態(tài)。

+failover-detected instance details>:另一個(gè) Sentinel 開始了一次故障轉(zhuǎn)移操作,或者一個(gè)從服務(wù)器轉(zhuǎn)換成了主服務(wù)器。

+slave-reconf-sent instance details>:領(lǐng)頭(leader)的 Sentinel 向?qū)嵗l(fā)送了 SLAVEOF 命令,為實(shí)例設(shè)置新的主服務(wù)器。

+slave-reconf-inprog instancedetails> :實(shí)例正在將自己設(shè)置為指定主服務(wù)器的從服務(wù)器,但相應(yīng)的同步過程仍未完成。

+slave-reconf-done instance details>:從服務(wù)器已經(jīng)成功完成對(duì)新主服務(wù)器的同步。

-dup-sentinel instance details> :對(duì)給定主服務(wù)器進(jìn)行監(jiān)視的一個(gè)或多個(gè) Sentinel 已經(jīng)因?yàn)橹貜?fù)出現(xiàn)而被移除 —— 當(dāng) Sentinel 實(shí)例重啟的時(shí)候,就會(huì)出現(xiàn)這種情況。

+sentinel instance details> :一個(gè)監(jiān)視給定主服務(wù)器的新 Sentinel 已經(jīng)被識(shí)別并添加。

+sdown instance details> :給定的實(shí)例現(xiàn)在處于主觀下線狀態(tài)。

-sdown instance details> :給定的實(shí)例已經(jīng)不再處于主觀下線狀態(tài)。

+odown instance details> :給定的實(shí)例現(xiàn)在處于客觀下線狀態(tài)。

-odown instance details> :給定的實(shí)例已經(jīng)不再處于客觀下線狀態(tài)。

+new-epoch instance details> :當(dāng)前的紀(jì)元(epoch)已經(jīng)被更新。

+try-failover instance details> :一個(gè)新的故障遷移操作正在執(zhí)行中,等待被大多數(shù) Sentinel 選中(waiting to be elected by themajority)。

+elected-leader instance details> :贏得指定紀(jì)元的選舉,可以進(jìn)行故障遷移操作了。

+failover-state-select-slave instancedetails> :故障轉(zhuǎn)移操作現(xiàn)在處于select-slave 狀態(tài) —— Sentinel 正在尋找可以升級(jí)為主服務(wù)器的從服務(wù)器。

no-good-slave instance details> :Sentinel 操作未能找到適合進(jìn)行升級(jí)的從服務(wù)器。Sentinel 會(huì)在一段時(shí)間之后再次嘗試尋找合適的從服務(wù)器來進(jìn)行升級(jí),又或者直接放棄執(zhí)行故障轉(zhuǎn)移操作。

selected-slave instance details> :Sentinel 順利找到適合進(jìn)行升級(jí)的從服務(wù)器。

failover-state-send-slaveof-nooneinstance details> :Sentinel 正在將指定的從服務(wù)器升級(jí)為主服務(wù)器,等待升級(jí)功能完成。

failover-end-for-timeout instancedetails> :故障轉(zhuǎn)移因?yàn)槌瑫r(shí)而中止,不過最終所有從服務(wù)器都會(huì)開始復(fù)制新的主服務(wù)器(slaves will eventually be configured to replicate with the newmaster anyway)。

failover-end instance details> :故障轉(zhuǎn)移操作順利完成。所有從服務(wù)器都開始復(fù)制新的主服務(wù)器了。

+switch-master master name>oldip> oldport> newip> newport> :配置變更,主服務(wù)器的 IP 和地址已經(jīng)改變。 這是絕大多數(shù)外部用戶都關(guān)心的信息。

+tilt :進(jìn)入 tilt 模式。

-tilt :退出 tilt 模式。

1.5測(cè)試驗(yàn)證

可以對(duì)master-slave進(jìn)行測(cè)試,將master關(guān)閉,此時(shí)slave會(huì)自動(dòng)充當(dāng)新的new-master;

當(dāng)old-master恢復(fù)后,會(huì)充當(dāng)new-master的slave,即:在這個(gè)過程中,sentinel.conf會(huì)被改寫,改寫為當(dāng)前監(jiān)控的主機(jī)master服務(wù);

如下圖測(cè)試所示:

Master服務(wù)停止:

Old-Master恢復(fù)服務(wù):

以上這篇Redis Sentinel服務(wù)配置流程(詳解)就是小編分享給大家的全部?jī)?nèi)容了,希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。

您可能感興趣的文章:
  • Redis Sentinel的基本搭建
  • Redis服務(wù)之高可用組件sentinel詳解
  • 詳解SpringBoot Redis自適應(yīng)配置(Cluster Standalone Sentinel)
  • 基于docker搭建redis-sentinel集群的方法示例
  • Linux redis-Sentinel配置詳解
  • Redis Sentinel實(shí)現(xiàn)哨兵模式搭建小結(jié)
  • 玩轉(zhuǎn)Redis搭建集群之Sentinel詳解
  • Redis Sentinel實(shí)現(xiàn)高可用配置的詳細(xì)步驟
  • java客戶端Jedis操作Redis Sentinel 連接池的實(shí)現(xiàn)方法
  • Redis Sentinel的使用方法

標(biāo)簽:湖南 仙桃 黃山 湘潭 蘭州 崇左 銅川 衡水

巨人網(wǎng)絡(luò)通訊聲明:本文標(biāo)題《Redis Sentinel服務(wù)配置流程(詳解)》,本文關(guān)鍵詞  ;如發(fā)現(xiàn)本文內(nèi)容存在版權(quán)問題,煩請(qǐng)?zhí)峁┫嚓P(guān)信息告之我們,我們將及時(shí)溝通與處理。本站內(nèi)容系統(tǒng)采集于網(wǎng)絡(luò),涉及言論、版權(quán)與本站無關(guān)。
  • 相關(guān)文章
  • 收縮
    • 微信客服
    • 微信二維碼
    • 電話咨詢

    • 400-1100-266