国产亚洲精品福利在线无卡一,国产精久久一区二区三区,亚洲精品无码国模,精品久久久久久无码专区不卡

當(dāng)前位置: 首頁(yè) > news >正文

程序員做的導(dǎo)航網(wǎng)站平臺(tái)推廣怎么做

程序員做的導(dǎo)航網(wǎng)站,平臺(tái)推廣怎么做,燃?xì)夤揪W(wǎng)站建設(shè)方案,前程無(wú)憂網(wǎng)寧波網(wǎng)站建設(shè)類崗位首發(fā)博客地址 https://blog.zysicyj.top/ 前面我們說(shuō)過(guò),redis采用了讀寫分離的方式實(shí)現(xiàn)高可靠。后面我們說(shuō)了,為了防止主節(jié)點(diǎn)壓力過(guò)大,優(yōu)化成了主-從-從模式 思考一個(gè)問(wèn)題,主節(jié)點(diǎn)此時(shí)掛了怎么辦 這里主從模式下涉及到的幾個(gè)問(wèn)題&a…

首發(fā)博客地址

https://blog.zysicyj.top/

前面我們說(shuō)過(guò),redis采用了讀寫分離的方式實(shí)現(xiàn)高可靠。后面我們說(shuō)了,為了防止主節(jié)點(diǎn)壓力過(guò)大,優(yōu)化成了主-從-從模式

思考一個(gè)問(wèn)題,主節(jié)點(diǎn)此時(shí)掛了怎么辦

alt

這里主從模式下涉及到的幾個(gè)問(wèn)題:

  1. 主庫(kù)真的掛了嗎?
  2. 我們應(yīng)當(dāng)選擇哪個(gè)從庫(kù)作為主庫(kù)?
  3. 怎樣讓其他從庫(kù)知道新的主庫(kù)信息呢?
  4. 中斷的數(shù)據(jù)如何恢復(fù)?

哨兵機(jī)制就完美的解決了以上問(wèn)題。

什么是哨兵機(jī)制?

Redis引入哨兵(Sentinel)機(jī)制的主要目的是為了增強(qiáng)其高可用性和自動(dòng)故障恢復(fù)能力。在分布式系統(tǒng)中,特別是用作數(shù)據(jù)存儲(chǔ)的數(shù)據(jù)庫(kù)系統(tǒng)中,保障高可用性是至關(guān)重要的,以確保系統(tǒng)在面對(duì)節(jié)點(diǎn)故障等情況時(shí)能夠繼續(xù)提供服務(wù)。

以下是引入Redis哨兵機(jī)制的原因:

  1. 故障檢測(cè)和自動(dòng)故障切換: 哨兵允許您配置多個(gè)Redis節(jié)點(diǎn),并監(jiān)視它們的運(yùn)行狀況。如果主節(jié)點(diǎn)(Master)出現(xiàn)故障,哨兵可以自動(dòng)檢測(cè)到并執(zhí)行故障切換,將一個(gè)可用的從節(jié)點(diǎn)(Slave)晉升為新的主節(jié)點(diǎn),從而保證服務(wù)的可用性。

  2. 自動(dòng)配置更新: 當(dāng)Redis節(jié)點(diǎn)的拓?fù)浣Y(jié)構(gòu)發(fā)生變化(比如添加或移除節(jié)點(diǎn))時(shí),哨兵能夠自動(dòng)地通知客戶端和其他Redis節(jié)點(diǎn)進(jìn)行配置更新,從而確保整個(gè)集群的正確配置。

  3. 監(jiān)控和報(bào)警: 哨兵不僅監(jiān)視節(jié)點(diǎn)的健康狀態(tài),還可以提供有關(guān)節(jié)點(diǎn)運(yùn)行狀況的信息,例如主從復(fù)制是否正常、延遲情況等。這可以幫助管理員及時(shí)發(fā)現(xiàn)問(wèn)題并采取措施。

  4. 無(wú)需人工干預(yù)的恢復(fù): 哨兵允許自動(dòng)故障切換,這意味著當(dāng)主節(jié)點(diǎn)出現(xiàn)問(wèn)題時(shí),系統(tǒng)可以自動(dòng)將一個(gè)從節(jié)點(diǎn)提升為新的主節(jié)點(diǎn),而無(wú)需管理員手動(dòng)介入,從而縮短恢復(fù)時(shí)間。

Redis引入哨兵機(jī)制使得在分布式環(huán)境中更容易實(shí)現(xiàn)高可用性和故障恢復(fù),而無(wú)需太多手動(dòng)操作。哨兵機(jī)制可以確保Redis集群在節(jié)點(diǎn)故障時(shí)繼續(xù)提供穩(wěn)定的服務(wù),對(duì)于那些對(duì)于高可用性要求較高的應(yīng)用場(chǎng)景非常有用。

哨兵機(jī)制的基本流程

哨兵其實(shí)就是一個(gè)運(yùn)行在特殊模式下的Redis進(jìn)程,其隨著主從實(shí)例同時(shí)運(yùn)行。

那么哨兵負(fù)責(zé)哪些活呢?主要是以下三點(diǎn):

  1. 監(jiān)控
  2. 選主(選擇主庫(kù))
  3. 通知
哨兵機(jī)制的三項(xiàng)任務(wù)與目標(biāo)
哨兵機(jī)制的三項(xiàng)任務(wù)與目標(biāo)

監(jiān)控

Redis哨兵的監(jiān)控流程涉及多個(gè)步驟,用于實(shí)時(shí)監(jiān)控Redis集群中各個(gè)節(jié)點(diǎn)的狀態(tài)并采取必要的措施來(lái)確保集群的可用性和穩(wěn)定性。

  1. 節(jié)點(diǎn)發(fā)現(xiàn)和配置: 哨兵通過(guò)配置文件指定要監(jiān)控的主節(jié)點(diǎn)和從節(jié)點(diǎn)。啟動(dòng)哨兵后,它會(huì)連接到指定的節(jié)點(diǎn),并獲取有關(guān)其他節(jié)點(diǎn)的信息,形成一個(gè)初始的監(jiān)控拓?fù)洹?/p>

  2. 心跳檢測(cè): 哨兵會(huì)定期向監(jiān)控的節(jié)點(diǎn)發(fā)送PING命令來(lái)檢測(cè)節(jié)點(diǎn)是否存活。這些節(jié)點(diǎn)可以是主節(jié)點(diǎn)、從節(jié)點(diǎn)或其他哨兵節(jié)點(diǎn)。如果哨兵在一定時(shí)間內(nèi)沒(méi)有收到響應(yīng),它會(huì)認(rèn)為節(jié)點(diǎn)不可用。

  3. 節(jié)點(diǎn)狀態(tài)變更: 當(dāng)哨兵連續(xù)多次無(wú)法連接到一個(gè)節(jié)點(diǎn)時(shí),它會(huì)將該節(jié)點(diǎn)標(biāo)記為主觀下線。當(dāng)多個(gè)哨兵都將節(jié)點(diǎn)標(biāo)記為主觀下線時(shí),這個(gè)節(jié)點(diǎn)會(huì)被認(rèn)為是客觀下線。

  4. 故障判斷和選舉: 當(dāng)主節(jié)點(diǎn)被標(biāo)記為客觀下線時(shí),哨兵會(huì)執(zhí)行故障判斷。它會(huì)從剩余的健康主節(jié)點(diǎn)中選舉一個(gè)作為新的主節(jié)點(diǎn),并將該信息廣播給其他哨兵和客戶端。故障判斷的邏輯考慮了多個(gè)因素,包括優(yōu)先級(jí)、最近一次復(fù)制偏移量等。

  5. 自動(dòng)故障切換: 如果主節(jié)點(diǎn)被標(biāo)記為客觀下線,哨兵會(huì)通知從節(jié)點(diǎn)晉升為新的主節(jié)點(diǎn)。同時(shí),哨兵會(huì)更新其他從節(jié)點(diǎn)的配置,使其復(fù)制新的主節(jié)點(diǎn)。這確保了即使主節(jié)點(diǎn)發(fā)生故障,集群仍然可以繼續(xù)提供服務(wù)。

  6. 監(jiān)控從節(jié)點(diǎn): 哨兵還會(huì)監(jiān)控從節(jié)點(diǎn)的狀態(tài),包括從節(jié)點(diǎn)是否與主節(jié)點(diǎn)保持同步,以及從節(jié)點(diǎn)的復(fù)制延遲情況。如果從節(jié)點(diǎn)無(wú)法同步或者復(fù)制延遲過(guò)高,哨兵會(huì)將其標(biāo)記為不健康。

  7. 節(jié)點(diǎn)恢復(fù): 如果一個(gè)節(jié)點(diǎn)從客觀下線狀態(tài)恢復(fù),哨兵會(huì)將其標(biāo)記為健康,并將其重新納入集群中。從節(jié)點(diǎn)恢復(fù)后,它會(huì)重新同步主節(jié)點(diǎn)的數(shù)據(jù)。

  8. 配置更新: 如果集群的拓?fù)浒l(fā)生變化,例如添加或移除節(jié)點(diǎn),哨兵會(huì)自動(dòng)更新配置,以便客戶端能夠正確連接到集群。

  9. 事件通知: 哨兵通過(guò)發(fā)布訂閱機(jī)制向訂閱者(通常是客戶端)發(fā)送有關(guān)集群狀態(tài)變化的消息。這使得應(yīng)用程序能夠根據(jù)實(shí)時(shí)的集群狀態(tài)做出相應(yīng)的決策。

  10. 持續(xù)監(jiān)控: 哨兵會(huì)持續(xù)地監(jiān)控集群中的節(jié)點(diǎn),定期執(zhí)行心跳檢測(cè)、狀態(tài)更新和故障判斷,以確保集群的穩(wěn)定運(yùn)行。

主觀下線與客觀下線

在Redis的哨兵監(jiān)控機(jī)制中,有兩個(gè)關(guān)鍵概念:主觀下線(Subjective Down)和客觀下線(Objective Down)。這些概念幫助哨兵判斷節(jié)點(diǎn)的可用性和故障狀態(tài)。

  1. 主觀下線(Subjective Down): 主觀下線是指單個(gè)哨兵節(jié)點(diǎn)認(rèn)為一個(gè)特定的Redis節(jié)點(diǎn)(主節(jié)點(diǎn)、從節(jié)點(diǎn)或其他哨兵)不可用。主觀下線是一種主觀的判斷,是基于單個(gè)哨兵節(jié)點(diǎn)的觀察結(jié)果得出的。當(dāng)一個(gè)哨兵無(wú)法連接到某個(gè)Redis節(jié)點(diǎn),它會(huì)將該節(jié)點(diǎn)標(biāo)記為主觀下線。多個(gè)哨兵節(jié)點(diǎn)可能會(huì)對(duì)同一個(gè)節(jié)點(diǎn)發(fā)出主觀下線標(biāo)記。

  2. 客觀下線(Objective Down): 客觀下線是指在整個(gè)哨兵集合中達(dá)成一致,認(rèn)為某個(gè)特定的Redis節(jié)點(diǎn)不可用。客觀下線是一種更客觀的判斷,需要多個(gè)哨兵節(jié)點(diǎn)共同達(dá)成一致。當(dāng)多個(gè)哨兵節(jié)點(diǎn)都主觀下線同一個(gè)Redis節(jié)點(diǎn)時(shí),這個(gè)節(jié)點(diǎn)會(huì)被認(rèn)為是客觀下線。

舉例說(shuō)明:

  • 假設(shè)有三個(gè)哨兵節(jié)點(diǎn):Sentinel A、Sentinel B 和 Sentinel C,以及一個(gè)主節(jié)點(diǎn) Master 和一個(gè)從節(jié)點(diǎn) Slave。如果 Sentinel A 無(wú)法連接到 Master 節(jié)點(diǎn),它會(huì)將 Master 標(biāo)記為主觀下線。同樣地,如果 Sentinel B 也無(wú)法連接到 Master 節(jié)點(diǎn),它也會(huì)將 Master 標(biāo)記為主觀下線。但這還不足以讓 Master 被認(rèn)為是客觀下線。

  • 當(dāng) Sentinel A 和 Sentinel B 都主觀下線了 Master 節(jié)點(diǎn),并且他們相互通信時(shí)發(fā)現(xiàn)了這個(gè)情況,他們就會(huì)在達(dá)成一致意見(jiàn)后將 Master 節(jié)點(diǎn)標(biāo)記為客觀下線。這時(shí),整個(gè)哨兵集合達(dá)成一致,認(rèn)為 Master 節(jié)點(diǎn)已下線。

客觀下線是一個(gè)更嚴(yán)格的判斷,需要多個(gè)哨兵節(jié)點(diǎn)一致認(rèn)為某個(gè)節(jié)點(diǎn)不可用,才會(huì)觸發(fā)后續(xù)的故障判斷和自動(dòng)故障切換等動(dòng)作。這種機(jī)制確保了在一個(gè)哨兵節(jié)點(diǎn)認(rèn)為某節(jié)點(diǎn)下線時(shí),不會(huì)立即觸發(fā)故障切換,以避免誤判造成不必要的切換。只有多個(gè)哨兵節(jié)點(diǎn)一致認(rèn)為節(jié)點(diǎn)下線,才會(huì)觸發(fā)后續(xù)的故障處理流程。

客觀下線的判斷
客觀下線的判斷

如何選定新主庫(kù)

在Redis Sentinel模式中,當(dāng)主節(jié)點(diǎn)(Master)發(fā)生故障導(dǎo)致下線后,哨兵會(huì)通過(guò)選舉過(guò)程選擇一個(gè)新的主節(jié)點(diǎn)(Master)來(lái)取代原來(lái)的主節(jié)點(diǎn)。選定新主庫(kù)的過(guò)程如下:

  1. 主觀下線和客觀下線判斷: 當(dāng)哨兵節(jié)點(diǎn)主觀下線(單個(gè)哨兵認(rèn)為不可用)一個(gè)主節(jié)點(diǎn)時(shí),如果多數(shù)哨兵都主觀下線了同一個(gè)主節(jié)點(diǎn),那么這個(gè)主節(jié)點(diǎn)會(huì)被標(biāo)記為客觀下線(多數(shù)派共識(shí))。

  2. 選舉新主節(jié)點(diǎn): 當(dāng)一個(gè)主節(jié)點(diǎn)被標(biāo)記為客觀下線后,哨兵節(jié)點(diǎn)會(huì)開(kāi)始選舉一個(gè)新的主節(jié)點(diǎn)。選舉過(guò)程如下:

    • 哨兵會(huì)在所有沒(méi)有下線的從節(jié)點(diǎn)(Slaves)中選擇一個(gè)作為新主節(jié)點(diǎn)。 哨兵會(huì)選擇一個(gè)延遲最小、復(fù)制偏移量最大的從節(jié)點(diǎn)作為新主節(jié)點(diǎn)。這確保了新主節(jié)點(diǎn)是最接近原主節(jié)點(diǎn)的從節(jié)點(diǎn)。
    • 如果沒(méi)有合適的從節(jié)點(diǎn),哨兵會(huì)選擇一個(gè)具備最高優(yōu)先級(jí)的從節(jié)點(diǎn),將其升級(jí)為主節(jié)點(diǎn)。如果優(yōu)先級(jí)相同,那么哨兵會(huì)選擇一個(gè)復(fù)制偏移量最大的從節(jié)點(diǎn)。
  3. 故障轉(zhuǎn)移和切換: 一旦新主節(jié)點(diǎn)被選定,哨兵會(huì)發(fā)起故障轉(zhuǎn)移操作。舊主節(jié)點(diǎn)會(huì)變成新主節(jié)點(diǎn)的一個(gè)從節(jié)點(diǎn)。其他從節(jié)點(diǎn)會(huì)重新配置,指向新的主節(jié)點(diǎn)。這個(gè)過(guò)程會(huì)保證盡量不丟失數(shù)據(jù),并且保證整個(gè)集群的高可用性。

選定新主庫(kù)的過(guò)程是一個(gè)由哨兵節(jié)點(diǎn)協(xié)同工作的流程,確保了在主節(jié)點(diǎn)故障的情況下,盡可能地選擇一個(gè)合適的從節(jié)點(diǎn)作為新的主節(jié)點(diǎn),實(shí)現(xiàn)集群的高可用性和數(shù)據(jù)完整性。

新主庫(kù)的選擇
新主庫(kù)的選擇

如何配置哨兵

  1. 哨兵配置文件: 在Redis 6.x版本中,哨兵的配置文件名稱默認(rèn)為redis-sentinel.conf。

  2. 配置變化: Redis 6.x版本引入了一些新的哨兵配置選項(xiàng),以適應(yīng)新的功能和改進(jìn)。以下是一些常見(jiàn)的配置選項(xiàng):

    sentinel monitor mymaster 127.0.0.1 6379 2   # 監(jiān)控名為 "mymaster" 的主節(jié)點(diǎn),2表示至少需要2個(gè)哨兵同意主觀下線才會(huì)執(zhí)行故障轉(zhuǎn)移
    sentinel down-after-milliseconds mymaster 5000   # 主觀下線判定為5秒無(wú)響應(yīng)
    sentinel parallel-syncs mymaster 1   # 執(zhí)行故障轉(zhuǎn)移時(shí)同時(shí)同步的從節(jié)點(diǎn)數(shù)量
    sentinel failover-timeout mymaster 10000   # 故障轉(zhuǎn)移超時(shí)時(shí)間為10秒
    sentinel auth-pass mymaster mypassword   # 主節(jié)點(diǎn)的訪問(wèn)密碼
    
  3. 啟動(dòng)哨兵節(jié)點(diǎn): 在Redis 6.x版本中,啟動(dòng)哨兵節(jié)點(diǎn)的命令為:

    redis-server?/path/to/redis-sentinel.conf?--sentinel
  4. 查看哨兵狀態(tài): 使用以下命令查看Redis 6.x版本哨兵節(jié)點(diǎn)的狀態(tài):

    redis-cli?-p?26379
    sentinel?master?mymaster???#?查看主節(jié)點(diǎn)的信息
    sentinel?slaves?mymaster???#?查看從節(jié)點(diǎn)的信息
    sentinel?sentinels?mymaster???#?查看其他哨兵節(jié)點(diǎn)的信息

哨兵是如何互相發(fā)現(xiàn)的?

我們查看配置可以看到,我們并沒(méi)有配置從節(jié)點(diǎn)的哨兵,我們只配置了主節(jié)點(diǎn)地址。

那么哨兵之間是如何互相發(fā)現(xiàn)通信的呢?

在Redis Sentinel(哨兵)集群中,哨兵節(jié)點(diǎn)之間通過(guò)發(fā)布訂閱機(jī)制來(lái)互相發(fā)現(xiàn)和通信。這種方式使得哨兵節(jié)點(diǎn)能夠監(jiān)控主節(jié)點(diǎn)和從節(jié)點(diǎn)的狀態(tài),并進(jìn)行故障檢測(cè)和故障轉(zhuǎn)移。

以下是哨兵集群如何通過(guò)發(fā)布訂閱機(jī)制互相發(fā)現(xiàn)的工作流程:

  1. 初始連接: 在啟動(dòng)時(shí),每個(gè)哨兵節(jié)點(diǎn)會(huì)嘗試連接到指定的主節(jié)點(diǎn)。這些哨兵節(jié)點(diǎn)通過(guò)配置文件中的sentinel monitor命令指定要監(jiān)控的主節(jié)點(diǎn)信息。

  2. Sentinel命令發(fā)布: 當(dāng)一個(gè)哨兵節(jié)點(diǎn)成功連接到主節(jié)點(diǎn)后,它會(huì)開(kāi)始定期向主節(jié)點(diǎn)發(fā)送PING命令,以確保主節(jié)點(diǎn)處于活躍狀態(tài)。如果哨兵節(jié)點(diǎn)檢測(cè)到主節(jié)點(diǎn)不可用,它會(huì)將一個(gè)+switch-master命令發(fā)布到頻道中,通知其他哨兵節(jié)點(diǎn)。

  3. 發(fā)布訂閱機(jī)制: Redis的發(fā)布訂閱機(jī)制允許一個(gè)節(jié)點(diǎn)(發(fā)布者)向一個(gè)或多個(gè)節(jié)點(diǎn)(訂閱者)廣播消息。在哨兵集群中,每個(gè)哨兵節(jié)點(diǎn)都訂閱了一個(gè)名為__sentinel__:hello的頻道,用于接收其他哨兵節(jié)點(diǎn)發(fā)送的信息。alt

  4. 發(fā)現(xiàn)其他哨兵節(jié)點(diǎn): 當(dāng)一個(gè)哨兵節(jié)點(diǎn)成功連接到主節(jié)點(diǎn)后,它會(huì)向__sentinel__:hello頻道發(fā)布一個(gè)"Hello"消息,其中包含它自己的信息(如IP地址和端口號(hào))。其他哨兵節(jié)點(diǎn)通過(guò)訂閱這個(gè)頻道,可以獲取所有其他哨兵節(jié)點(diǎn)的信息。

  5. 收集哨兵信息: 每個(gè)哨兵節(jié)點(diǎn)通過(guò)訂閱__sentinel__:hello頻道,收集到其他哨兵節(jié)點(diǎn)的信息。這使得每個(gè)哨兵節(jié)點(diǎn)都知道了集群中其他哨兵節(jié)點(diǎn)的存在。

  6. 故障檢測(cè)和轉(zhuǎn)移: 當(dāng)一個(gè)哨兵節(jié)點(diǎn)檢測(cè)到主節(jié)點(diǎn)不可用時(shí),它會(huì)通過(guò)發(fā)布+switch-master命令來(lái)通知其他哨兵節(jié)點(diǎn)。這個(gè)命令包含了新的主節(jié)點(diǎn)信息,以及在執(zhí)行故障轉(zhuǎn)移時(shí)需要的其他信息。其他哨兵節(jié)點(diǎn)收到這個(gè)命令后,會(huì)進(jìn)行判斷并可能發(fā)起故障轉(zhuǎn)移。

通過(guò)以上機(jī)制,哨兵節(jié)點(diǎn)可以相互發(fā)現(xiàn)和通信,共同監(jiān)控主節(jié)點(diǎn)和從節(jié)點(diǎn)的狀態(tài),并在主節(jié)點(diǎn)下線時(shí)協(xié)同執(zhí)行故障轉(zhuǎn)移操作。這種發(fā)布訂閱機(jī)制確保了哨兵集群中節(jié)點(diǎn)之間的實(shí)時(shí)信息傳遞和協(xié)作。

alt

由哪個(gè)哨兵執(zhí)行主從切換?

客觀下線具體判斷流程

  1. 故障檢測(cè): 哨兵節(jié)點(diǎn)定期向集群中的所有主節(jié)點(diǎn)和從節(jié)點(diǎn)發(fā)送PING命令來(lái)檢測(cè)節(jié)點(diǎn)的可用性。如果一個(gè)哨兵節(jié)點(diǎn)連續(xù)一定次數(shù)沒(méi)有收到節(jié)點(diǎn)的回復(fù),就會(huì)將該節(jié)點(diǎn)標(biāo)記為可能進(jìn)入客觀下線狀態(tài)。

  2. Quorum判斷: 在判斷一個(gè)節(jié)點(diǎn)是否客觀下線時(shí),需要考慮Quorum的概念。Quorum是指一個(gè)最小的投票數(shù),當(dāng)達(dá)到或超過(guò)這個(gè)投票數(shù)時(shí),哨兵認(rèn)為節(jié)點(diǎn)可能進(jìn)入客觀下線狀態(tài)。Quorum的值通常設(shè)置為哨兵節(jié)點(diǎn)數(shù)量的一半加一。

  3. 投票過(guò)程: 當(dāng)哨兵節(jié)點(diǎn)開(kāi)始懷疑某個(gè)節(jié)點(diǎn)可能客觀下線時(shí),它會(huì)向其他哨兵節(jié)點(diǎn)發(fā)送一個(gè)SENTINEL is-master-down-by-addr命令,詢問(wèn)其他哨兵節(jié)點(diǎn)是否也認(rèn)為該節(jié)點(diǎn)客觀下線。其他哨兵節(jié)點(diǎn)會(huì)對(duì)此做出回應(yīng),根據(jù)回應(yīng)的數(shù)量來(lái)判斷是否達(dá)到Quorum。

  4. 達(dá)到Quorum: 如果收到的回應(yīng)數(shù)量達(dá)到或超過(guò)Quorum,那么哨兵節(jié)點(diǎn)就會(huì)認(rèn)為該節(jié)點(diǎn)進(jìn)入客觀下線狀態(tài)。這表示集群中有足夠多的哨兵都認(rèn)為該節(jié)點(diǎn)可能下線,進(jìn)而觸發(fā)后續(xù)的主從切換流程。

  5. 執(zhí)行后續(xù)操作: 一旦一個(gè)節(jié)點(diǎn)被認(rèn)為客觀下線,哨兵節(jié)點(diǎn)將開(kāi)始執(zhí)行故障轉(zhuǎn)移操作,選擇新的主節(jié)點(diǎn)并開(kāi)始同步數(shù)據(jù)。這將最終導(dǎo)致一個(gè)新的主節(jié)點(diǎn)被選出,從而實(shí)現(xiàn)高可用性。 alt

選舉Leader流程

Redis Sentinel(哨兵)是用于監(jiān)控和管理Redis主從復(fù)制以及自動(dòng)故障切換的工具。當(dāng)主節(jié)點(diǎn)失效時(shí),哨兵會(huì)協(xié)調(diào)選擇一個(gè)從節(jié)點(diǎn)作為新的主節(jié)點(diǎn),這涉及到選舉Leader的過(guò)程。詳細(xì)流程如下:

  1. 監(jiān)控主節(jié)點(diǎn): 哨兵持續(xù)監(jiān)控Redis主節(jié)點(diǎn)的狀態(tài),包括主節(jié)點(diǎn)是否在線,主從復(fù)制是否正常,以及哨兵和其他節(jié)點(diǎn)的通信情況。

  2. 檢測(cè)主節(jié)點(diǎn)失效: 當(dāng)哨兵檢測(cè)到主節(jié)點(diǎn)失效(例如,無(wú)法響應(yīng)PING命令),它會(huì)將主節(jié)點(diǎn)標(biāo)記為“主觀下線”。

  3. 廣播主觀下線狀態(tài): 一旦主觀下線狀態(tài)被確認(rèn),哨兵會(huì)廣播該信息給其他哨兵和節(jié)點(diǎn),告知主節(jié)點(diǎn)已經(jīng)“主觀下線”。

  4. 投票: 當(dāng)其他哨兵收到關(guān)于主觀下線狀態(tài)的廣播時(shí),它們會(huì)進(jìn)行投票來(lái)決定是否需要進(jìn)行領(lǐng)導(dǎo)者選舉。

  5. 選舉Leader: 如果多個(gè)哨兵都認(rèn)為主節(jié)點(diǎn)失效,它們將進(jìn)入領(lǐng)導(dǎo)者選舉過(guò)程。選舉過(guò)程使用了Raft算法的變體。

  6. 提議投票: 在選舉過(guò)程中,哨兵會(huì)提議自己作為領(lǐng)導(dǎo)者,然后請(qǐng)求其他哨兵投票支持。

  7. 投票表決: 哨兵在收到提議后會(huì)表決是否支持該提議。通常,哨兵會(huì)投票給具有最高配置版本號(hào)的提議者。

  8. Quorum判斷: 在選舉過(guò)程中,哨兵需要收集足夠數(shù)量的投票,達(dá)到Quorum(大多數(shù))的支持才能選舉成功。

  9. 選出新領(lǐng)導(dǎo)者: 如果某個(gè)哨兵獲得足夠多的投票,超過(guò)了Quorum,那么它將被選為新的領(lǐng)導(dǎo)者。

  10. 通知其他節(jié)點(diǎn): 新選出的Leader會(huì)向其他哨兵和節(jié)點(diǎn)廣播其成為領(lǐng)導(dǎo)者的消息,確保集群中的所有節(jié)點(diǎn)都知道領(lǐng)導(dǎo)者的變更。

  11. 故障切換: 一旦新的Leader選舉完成,哨兵會(huì)協(xié)調(diào)進(jìn)行故障切換,將一個(gè)從節(jié)點(diǎn)提升為新的主節(jié)點(diǎn),使整個(gè)集群繼續(xù)正常運(yùn)行。

  12. 恢復(fù)正常狀態(tài): 一旦故障切換完成,新的主節(jié)點(diǎn)將開(kāi)始處理客戶端請(qǐng)求,集群會(huì)恢復(fù)到正常運(yùn)行狀態(tài)。

需要注意的是,Redis Sentinel的選舉Leader過(guò)程受到Paxos算法和Raft算法等分布式一致性算法的影響,以保證在主節(jié)點(diǎn)失效時(shí)能夠選擇合適的節(jié)點(diǎn)作為新的主節(jié)點(diǎn),從而保持?jǐn)?shù)據(jù)的一致性和高可用性。

alt

TIP

  1. 如果哨兵集群只有 2 個(gè)實(shí)例,此時(shí),一個(gè)哨兵要想成為 Leader,必須獲得 2 票,而不是 1 票。所以,如果有個(gè)哨兵掛掉了,那么,此時(shí)的集群是無(wú)法進(jìn)行主從庫(kù)切換的。因此,通常我們至少會(huì)配置 3 個(gè)哨兵實(shí)例。

  2. 要保證所有哨兵實(shí)例的配置是一致的,尤其是主觀下線的判斷值 down-after-milliseconds。

本文由 mdnice 多平臺(tái)發(fā)布

http://m.aloenet.com.cn/news/37669.html

相關(guān)文章:

  • 牌具網(wǎng)站廣告怎么做云優(yōu)客seo排名公司
  • 微博分享的網(wǎng)站怎么做亞洲衛(wèi)星電視網(wǎng)參數(shù)表
  • 冷色網(wǎng)站鄭州seo價(jià)格
  • 焦作河南網(wǎng)站建設(shè)品牌策略
  • 自己做新聞網(wǎng)站找客戶的十大方法
  • 網(wǎng)頁(yè)游戲開(kāi)服表怎么關(guān)閉班級(jí)優(yōu)化大師使用指南
  • 做網(wǎng)站素材在哪里找網(wǎng)站seo平臺(tái)
  • 網(wǎng)站建設(shè)公司的運(yùn)營(yíng)方式中國(guó)足彩網(wǎng)競(jìng)彩推薦
  • 中國(guó)城鄉(xiāng)住房和建設(shè)部網(wǎng)站首頁(yè)如何快速推廣自己的品牌
  • 珠海網(wǎng)站建站流量寶
  • 做網(wǎng)站是什么鬼做國(guó)外網(wǎng)站
  • 做獨(dú)立網(wǎng)站給你百度競(jìng)價(jià)推廣方案的制定
  • 做網(wǎng)站百度新聞源合肥關(guān)鍵詞排名
  • 國(guó)際貿(mào)易網(wǎng)站排名最新網(wǎng)絡(luò)營(yíng)銷方式有哪些
  • 做網(wǎng)站虛擬主機(jī)怎么選擇技成培訓(xùn)網(wǎng)
  • 建網(wǎng)站的軟件優(yōu)幫云網(wǎng)站設(shè)計(jì)制作在哪里找
  • 網(wǎng)站商城系統(tǒng)建設(shè)方案新媒體運(yùn)營(yíng)主要做什么
  • 企業(yè)網(wǎng)站宣傳冊(cè)應(yīng)該哪個(gè)部門做it培訓(xùn)機(jī)構(gòu)
  • net開(kāi)發(fā)的網(wǎng)站開(kāi)發(fā)網(wǎng)站seo優(yōu)化排名
  • 溫州專業(yè)網(wǎng)站建設(shè)西安seo排名
  • 成都廣告公司排名前十名蘇州首頁(yè)排名關(guān)鍵詞優(yōu)化
  • 學(xué)做網(wǎng)站論壇vip賬戶蘇州網(wǎng)站建設(shè)書生
  • 無(wú)錫專業(yè)做網(wǎng)站站長(zhǎng)網(wǎng)站查詢工具
  • 高唐網(wǎng)站建設(shè)電子商務(wù)網(wǎng)站建設(shè)的步驟
  • 深圳微商城網(wǎng)站制作費(fèi)用網(wǎng)站seo排名優(yōu)化工具
  • 網(wǎng)站關(guān)鍵詞seo優(yōu)化怎么做怎樣進(jìn)行seo優(yōu)化
  • 個(gè)人軟件制作網(wǎng)站網(wǎng)站的優(yōu)化與推廣分析
  • 網(wǎng)站如果不在公安局備案怎樣百度seo關(guān)鍵詞排名查詢
  • 網(wǎng)頁(yè)抓取 wordpress西安自動(dòng)seo
  • php網(wǎng)站模塊如何編寫一個(gè)網(wǎng)站