redis sentinel

初始

  1. 作用
    可以監(jiān)視主服務(wù)器、從服務(wù)器等多種服務(wù)器,甚至還可以監(jiān)視其他的sentinel服務(wù)器;

  2. sentinel服務(wù)器和普通服務(wù)器的區(qū)別
    sentinel服務(wù)器不使用數(shù)據(jù)庫(kù),因此初始化的時(shí)候不需要RDB或者AOF文件;另外,包括一些操作鍵值對(duì)的命令(SET等),發(fā)布訂閱,腳本,事務(wù)等功能,sentinel服務(wù)器均不使用;sentinel服務(wù)器的命令表中也并沒(méi)有存儲(chǔ)這些命令;客戶端可以對(duì)sentinel服務(wù)器使用的命令僅包括:PING, SENTINEL, INFO, SUBSCRIBE, UNSUBSCRIBE, PSUBSCRIBE, PUNSUBSCRIBE;(新版本中可能會(huì)有增加)

  3. 命令連接和訂閱連接
    sentinel服務(wù)器需要和每一個(gè)由它監(jiān)視的主(從)服務(wù)器創(chuàng)建2個(gè)連接,分別是命令連接訂閱連接。命令連接的作用是向主(從)服務(wù)器發(fā)送命令以及接收相應(yīng)的回復(fù);訂閱連接的作用是訂閱主(從)服務(wù)器的sentinel:hello頻道,避免頻道發(fā)送的信息丟失;

監(jiān)視網(wǎng)絡(luò)

  1. dict *mastersdict *slaves字典
    dict *masters就是sentinel服務(wù)器所監(jiān)視的所有redis服務(wù)器(鍵為服務(wù)器名,值是指向sentinelRedisInstance結(jié)構(gòu)體的指針,該結(jié)構(gòu)體保存著各類(lèi)信息);sentinel服務(wù)器定期通過(guò)命令連接向其監(jiān)控的master服務(wù)器發(fā)送INFO命令,返回的信息中會(huì)包含master服務(wù)器本身的信息(如run id),以及其附屬的slave服務(wù)器,根據(jù)這些信息,sentinel分別創(chuàng)建包含master和slave服務(wù)器的底層結(jié)構(gòu)(兩個(gè)字典,分別代表master和slave,key就是服務(wù)器的地址,value是一個(gè)特制的數(shù)據(jù)結(jié)構(gòu),代表一個(gè)服務(wù)器實(shí)例結(jié)構(gòu))

  2. dict *sentinels字典
    sentinel通過(guò)命令連接向__sentinel__:hello頻道發(fā)送消息,通過(guò)訂閱連接從__sentinel__:hello接收消息。不僅如此,如果有多個(gè)sentinel監(jiān)視著同一個(gè)服務(wù)器,那么各個(gè)服務(wù)器還可以通過(guò)從頻道接收到的信息感知到其他sentinel的存在,并加到服務(wù)器的實(shí)例結(jié)構(gòu)的dict *sentinels字段中。相互感知到對(duì)方存在的sentinel會(huì)共同建立命令連接(注意,沒(méi)有訂閱連接),形成網(wǎng)絡(luò);

  3. 主觀下線和客觀下線
    sentinel會(huì)定期向其監(jiān)視的服務(wù)器發(fā)送PING命令,探測(cè)回復(fù)是否有效(有效信息包括“+PONG”, "-LOADING", "MASTERDOWN"),如果無(wú)效或無(wú)響應(yīng),則認(rèn)為其主觀下線;當(dāng)判斷某個(gè)服務(wù)器主觀下線以后,sentinel會(huì)和其他sentinel通信,詢(xún)問(wèn)其他sentinel是否認(rèn)為該服務(wù)器主觀下線,如果票數(shù)足夠多,則認(rèn)為其客觀下線,并執(zhí)行故障轉(zhuǎn)移操作;(注意,“客觀下線”也是一種主觀標(biāo)準(zhǔn),前面說(shuō)的“票數(shù)”,是通過(guò)配置文件進(jìn)行配置的,而各個(gè)sentinel的配置文件可能不一樣。舉個(gè)例子,對(duì)于sentinel1來(lái)說(shuō),可能票數(shù)為2的時(shí)候,就認(rèn)為服務(wù)器客觀下線,而對(duì)于sentinel2,可能票數(shù)為5時(shí),才認(rèn)為這個(gè)服務(wù)器客觀下線)

  4. 領(lǐng)頭sentinel
    當(dāng)sentinel認(rèn)為某個(gè)服務(wù)器客觀下線之后,監(jiān)視這個(gè)服務(wù)器的所有sentinel就會(huì)互相發(fā)送命令選舉出領(lǐng)頭sentinel。具體方式也很簡(jiǎn)單,就是先到先得,某個(gè)sentinel發(fā)送命令,要求其他sentinel投他一票,其他sentinel的票數(shù)是先到先得的。最終,如果某個(gè)sentinel得到的票數(shù)超過(guò)一半,就成為最終的領(lǐng)頭sentinel。領(lǐng)頭sentinel的作用就是執(zhí)行故障轉(zhuǎn)移

  5. 故障轉(zhuǎn)移
    就是挑選出一個(gè)從服務(wù)器變?yōu)橹鞣?wù)器,將有故障的主服務(wù)器在正常之后轉(zhuǎn)為從服務(wù)器,其他從服務(wù)器都改為復(fù)制新的主服務(wù)器;

最后編輯于
?著作權(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ù)。

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