****欧欧美毛片4,国产午夜精品视频,97视频在线观看免费视频,久久七国产精品

數(shù)據(jù)恢復(fù)咨詢熱線:400-666-3702??

歡迎訪問南京兆柏?cái)?shù)據(jù)恢復(fù)公司,專業(yè)數(shù)據(jù)恢復(fù)15年

兆柏?cái)?shù)據(jù)恢復(fù)公司

?行業(yè)新聞

?當(dāng)前位置: 主頁 > 行業(yè)新聞

死磕 NoSQL 數(shù)據(jù)庫系列(九):Redis sentinel 哨兵集群原理、部署及數(shù)據(jù)恢復(fù)

瀏覽量: 次 發(fā)布日期:2023-08-17 21:48:22

死磕 NoSQL 數(shù)據(jù)庫系列(九):Redis sentinel 哨兵集群原理、部署及數(shù)據(jù)恢復(fù)

點(diǎn)關(guān)注公眾號(hào),回復(fù)“1024”獲取2TB學(xué)習(xí)資源!

前面我們介紹了:Redis 的持久化、主從復(fù)制與數(shù)據(jù)恢復(fù)。今天我將詳細(xì)的為大家介紹 Redis sentinel( Redis 哨兵集群原理、功能、部署及數(shù)據(jù)恢復(fù)等)相關(guān)知識(shí),希望大家能夠從中收獲多多!如有幫助,請(qǐng)點(diǎn)在看、轉(zhuǎn)發(fā)支持一波!!!

在上文主從復(fù)制的基礎(chǔ)上,如果主節(jié)點(diǎn)出現(xiàn)故障該怎么辦呢?在 Redis 主從集群中,哨兵機(jī)制是實(shí)現(xiàn)主從庫自動(dòng)切換的關(guān)鍵機(jī)制,它有效地解決了主從復(fù)制模式下故障轉(zhuǎn)移的問題。

Redis Sentinel,即 Redis 哨兵,在 Redis 2.8 版本開始引入。哨兵的核心功能是主節(jié)點(diǎn)的自動(dòng)故障轉(zhuǎn)移。

下圖是一個(gè)典型的哨兵集群監(jiān)控的邏輯圖:哨兵實(shí)現(xiàn)了什么功能呢?

下面是Redis官方文檔的描述:監(jiān)控(Monitoring):哨兵會(huì)不斷地檢查主節(jié)點(diǎn)和從節(jié)點(diǎn)是否運(yùn)作正常。自動(dòng)故障轉(zhuǎn)移(Automatic failover):當(dāng)主節(jié)點(diǎn)不能正常工作時(shí),哨兵會(huì)開始自動(dòng)故障轉(zhuǎn)移操作,它會(huì)將失效主節(jié)點(diǎn)的其中一個(gè)從節(jié)點(diǎn)升級(jí)為新的主節(jié)點(diǎn),并讓其他從節(jié)點(diǎn)改為復(fù)制新的主節(jié)點(diǎn)。配置提供者(Configuration provider):客戶端在初始化時(shí),通過連接哨兵來獲得當(dāng)前Redis服務(wù)的主節(jié)點(diǎn)地址。通知(Notification):哨兵可以將故障轉(zhuǎn)移的結(jié)果發(fā)送給客戶端。

其中,監(jiān)控和自動(dòng)故障轉(zhuǎn)移功能,使得哨兵可以及時(shí)發(fā)現(xiàn)主節(jié)點(diǎn)故障并完成轉(zhuǎn)移;而配置提供者和通知功能,則需要在與客戶端的交互中才能體現(xiàn)。哨兵集群的組建

上圖中哨兵集群是如何組件的呢?哨兵實(shí)例之間可以相互發(fā)現(xiàn),要?dú)w功于 Redis 提供的 pub/sub 機(jī)制,也就是發(fā)布/訂閱機(jī)制。

在主從集群中,主庫上有一個(gè)名為的頻道,不同哨兵就是通過它來相互發(fā)現(xiàn),實(shí)現(xiàn)互相通信的。在下圖中,哨兵 1 把自己的 IP(172.16.19.3)和端口(26579)發(fā)布到頻道上,哨兵 2 和 3 訂閱了該頻道。那么此時(shí),哨兵 2 和 3 就可以從這個(gè)頻道直接獲取哨兵 1 的 IP 地址和端口號(hào)。然后,哨兵 2、3 可以和哨兵 1 建立網(wǎng)絡(luò)連接。通過這個(gè)方式,哨兵 2 和 3 也可以建立網(wǎng)絡(luò)連接,這樣一來,哨兵集群就形成了。它們相互間可以通過網(wǎng)絡(luò)連接進(jìn)行通信,比如說對(duì)主庫有沒有下線這件事兒進(jìn)行判斷和協(xié)商。更多關(guān)于 Redis 學(xué)習(xí)的文章,請(qǐng)參閱:NoSQL 數(shù)據(jù)庫系列之 Redis ,本系列持續(xù)更新中。

哨兵監(jiān)控什么呢?怎么監(jiān)控呢?

這是由哨兵向主庫發(fā)送 INFO 命令來完成的。就像下圖所示,哨兵 2 給主庫發(fā)送 INFO 命令,主庫接受到這個(gè)命令后,就會(huì)把從庫列表返回給哨兵。接著,哨兵就可以根據(jù)從庫列表中的連接信息,和每個(gè)從庫建立連接,并在這個(gè)連接上持續(xù)地對(duì)從庫進(jìn)行監(jiān)控。哨兵 1 和 3 可以通過相同的方法和從庫建立連接。主庫下線的判定

哨兵如何判斷主庫已經(jīng)下線了呢?

首先要理解兩個(gè)概念:主觀下線和客觀下線主觀下線:任何一個(gè)哨兵都是可以監(jiān)控探測(cè),并作出Redis節(jié)點(diǎn)下線的判斷;客觀下線:有哨兵集群共同決定Redis節(jié)點(diǎn)是否下線;

當(dāng)某個(gè)哨兵(如下圖中的哨兵2)判斷主庫“主觀下線”后,就會(huì)給其他哨兵發(fā)送 命令。接著,其他哨兵會(huì)根據(jù)自己和主庫的連接情況,做出 Y 或 N 的響應(yīng),Y 相當(dāng)于贊成票,N 相當(dāng)于反對(duì)票。如果贊成票數(shù)(這里是2)是大于等于哨兵配置文件中的 配置項(xiàng)(比如這里如果是quorum=2), 則可以判定主庫客觀下線了。

判斷完主庫下線后,由哪個(gè)哨兵節(jié)點(diǎn)來執(zhí)行主從切換呢?這里就需要哨兵集群的選舉機(jī)制了。為什么必然會(huì)出現(xiàn)選舉/共識(shí)機(jī)制?

為了避免哨兵的單點(diǎn)情況發(fā)生,所以需要一個(gè)哨兵的分布式集群。作為分布式集群,必然涉及共識(shí)問題(即選舉問題);同時(shí)故障的轉(zhuǎn)移和通知都只需要一個(gè)主的哨兵節(jié)點(diǎn)就可以了。哨兵的選舉機(jī)制是什么樣的?

哨兵的選舉機(jī)制其實(shí)很簡單,就是一個(gè)Raft選舉算法:選舉的票數(shù)大于等于num(sentinels)/2+1時(shí),將成為領(lǐng)導(dǎo)者,如果沒有超過,繼續(xù)選舉任何一個(gè)想成為 Leader 的哨兵,要滿足兩個(gè)條件:第一,拿到半數(shù)以上的贊成票;第二,拿到的票數(shù)同時(shí)還需要大于等于哨兵配置文件中的 quorum 值。

以 3 個(gè)哨兵為例,假設(shè)此時(shí)的 quorum 設(shè)置為 2,那么,任何一個(gè)想成為 Leader 的哨兵只要拿到 2 張贊成票,就可以了。更進(jìn)一步理解

這里很多人會(huì)搞混 判定客觀下線 和 是否能夠主從切換(用到選舉機(jī)制) 兩個(gè)概念,我們?cè)倏匆粋€(gè)例子。

Redis 1主4從,5個(gè)哨兵,哨兵配置quorum為2,如果3個(gè)哨兵故障,當(dāng)主庫宕機(jī)時(shí),哨兵能否判斷主庫“客觀下線”?能否自動(dòng)切換?

經(jīng)過實(shí)際測(cè)試:

1、哨兵集群可以判定主庫“主觀下線”。由于quorum=2,所以當(dāng)一個(gè)哨兵判斷主庫“主觀下線”后,詢問另外一個(gè)哨兵后也會(huì)得到同樣的結(jié)果,2個(gè)哨兵都判定“主觀下線”,達(dá)到了quorum的值,因此,哨兵集群可以判定主庫為“客觀下線”。

2、但哨兵不能完成主從切換。哨兵標(biāo)記主庫“客觀下線后”,在選舉“哨兵領(lǐng)導(dǎo)者”時(shí),一個(gè)哨兵必須拿到超過多數(shù)的選票(5/2+1=3票)。但目前只有2個(gè)哨兵活著,無論怎么投票,一個(gè)哨兵最多只能拿到2票,永遠(yuǎn)無法達(dá)到選票的結(jié)果。新主庫的選出

主庫既然判定客觀下線了,那么如何從剩余的從庫中選擇一個(gè)新的主庫呢?過濾掉不健康的(下線或斷線),沒有回復(fù)過哨兵ping響應(yīng)的從節(jié)點(diǎn)選擇從節(jié)點(diǎn)優(yōu)先級(jí)最高(redis.conf)的選擇復(fù)制偏移量最大,只復(fù)制最完整的從節(jié)點(diǎn)更多關(guān)于 Redis 學(xué)習(xí)的文章,請(qǐng)參閱:NoSQL 數(shù)據(jù)庫系列之 Redis ,本系列持續(xù)更新中。

新的主庫選擇出來后,就可以開始進(jìn)行故障的轉(zhuǎn)移了。

假設(shè)根據(jù)我們一開始的圖:(我們假設(shè):判斷主庫客觀下線了,同時(shí)選出是哨兵leader)故障轉(zhuǎn)移流程如下將slave-1脫離原從節(jié)點(diǎn)(PS: 5.0 中應(yīng)該是),升級(jí)主節(jié)點(diǎn),將從節(jié)點(diǎn)slave-2指向新的主節(jié)點(diǎn)通知客戶端主節(jié)點(diǎn)已更換將原主節(jié)點(diǎn)(oldMaster)變成從節(jié)點(diǎn),指向新的主節(jié)點(diǎn)

轉(zhuǎn)移之后環(huán)境準(zhǔn)備

配置哨兵集群步驟:1.在所有節(jié)點(diǎn)搭建redis2.配置主從復(fù)制,一主兩從3.在所有節(jié)點(diǎn)配置sentinel,啟動(dòng)sentinel后,配置文件會(huì)自動(dòng)增加在所有機(jī)器上部署redis

192.168.81.210配置

192.168.81.220配置

由于redis-1已經(jīng)部署好了一套redis,我們可以直接復(fù)制過來使用

192.168.81.230配置

由于redis-1已經(jīng)部署好了一套redis,我們可以直接復(fù)制過來使用

三臺(tái)redis部署完成

配置redis主從

要在兩臺(tái)slave上同步主庫配置

部署哨兵進(jìn)程sentinel

配置文件解釋

三臺(tái)redis服務(wù)器都要按如下配置,已經(jīng)將配置文件中的bind寫成了系統(tǒng)變量,在配合cat寫入到文件,因此直接執(zhí)行如下命令即可

配置完記得查看下配置文件bind一列是否是各自主機(jī)的ip地址啟動(dòng)哨兵觀察配置文件的變化

三臺(tái)機(jī)器都這么操作啟動(dòng)哨兵

觀察哨兵啟動(dòng)前后配置文件的變化啟動(dòng)前啟動(dòng)后

每臺(tái)哨兵主機(jī)都自動(dòng)增加了一個(gè)myid的配置,這個(gè)就是當(dāng)主庫掛掉后,哨兵選舉的依據(jù),判斷誰的myid大誰就當(dāng)選為主庫。

每臺(tái)哨兵主機(jī)還自動(dòng)增加了sentinel known-sentinel這個(gè)配置,這個(gè)配置每個(gè)哨兵會(huì)記錄集群中其他節(jié)點(diǎn)的id號(hào),這樣就能夠?qū)崿F(xiàn)信息共享,即使應(yīng)用在詢問哨兵進(jìn)程誰是主庫,這時(shí)由于每個(gè)哨兵進(jìn)程都有其他節(jié)點(diǎn)的信息,因此就能里面告訴應(yīng)用誰是主庫。模擬主庫故障驗(yàn)證應(yīng)用是否可用

配置完哨兵后,每個(gè)節(jié)點(diǎn)上都有集群的信息共享,當(dāng)主庫掛掉后,哨兵進(jìn)程確認(rèn)主庫下線了,哨兵根據(jù)各自的id大小選舉新的主庫,接替主庫的工作,保證應(yīng)用程序不受影響,當(dāng)主庫修復(fù)好后,在通過提權(quán)的方式先同步目前主庫的數(shù)據(jù),在讓自身成為主庫。

主庫掛掉其他節(jié)點(diǎn)配置文件的變化

主庫掛掉后,其他兩個(gè)節(jié)點(diǎn)選舉出master后,配置文件也會(huì)填寫為新master的地址。至此,一個(gè) Redis 哨兵集群架構(gòu)說部署完成了。更多關(guān)于 Redis 學(xué)習(xí)的文章,請(qǐng)參閱:NoSQL 數(shù)據(jù)庫系列之 Redis ,本系列持續(xù)更新中。

當(dāng)主庫修復(fù)后重新上線首先通過哨兵知道誰是當(dāng)前的主庫,然后就會(huì)去找主庫同步數(shù)據(jù),并且會(huì)自動(dòng)修改配置文件,當(dāng)數(shù)據(jù)同步后,想恢復(fù)的主庫重新成為主庫則需要把主庫的權(quán)重調(diào)高,然后重新選舉,這時(shí)原來的主庫就能成為新的主庫,調(diào)整完再將主庫的權(quán)重值調(diào)成默認(rèn)的。實(shí)現(xiàn)思路1.將故障的主庫重新恢復(fù)2.查看當(dāng)前的主從狀態(tài),驗(yàn)證由于主庫宕機(jī),與從庫產(chǎn)生的數(shù)據(jù)是否同步3.調(diào)整權(quán)重值4.重新選舉,使原來的主庫變成新的主庫5.恢復(fù)的主庫重新成為新的主庫后,要把調(diào)整的權(quán)重值全部變成默認(rèn)值

主庫可以重新加入哨兵集群的前提:剩余的兩個(gè)節(jié)點(diǎn)必須有一個(gè)是master,且這兩個(gè)節(jié)點(diǎn)配置文件已經(jīng)指定了新的master地址恢復(fù)損壞的主庫

查看恢復(fù)的主庫redis-1配置文件

可以看到已經(jīng)自動(dòng)修改為當(dāng)前庫的地址查看恢復(fù)的主庫redis-1的主從關(guān)系

配置恢復(fù)的主庫的權(quán)重值,使其重新選舉為主庫

哨兵的選舉首先是查看誰的權(quán)重優(yōu)先級(jí)比較高的當(dāng)選為主庫權(quán)重優(yōu)先級(jí)一致,就比較id,id大的當(dāng)選

根據(jù)日志的輸出,可以明顯的看出調(diào)整了redis-1的權(quán)重優(yōu)先級(jí)為150,比其他兩個(gè)節(jié)點(diǎn)的高,因此redis-1就變成了主庫。查看節(jié)點(diǎn)的主從復(fù)制關(guān)系。

主庫沒有同步的庫,其他兩個(gè)節(jié)點(diǎn)都同步redis-1的主庫。

將權(quán)重值調(diào)整為默認(rèn)值

將權(quán)重值調(diào)整為默認(rèn)值,方便下次選舉時(shí)作為判斷條件。

參考文章:https://www.pdai.tech/md/db/nosql-redis/db-redis-x-sentinel.html https://jiangxl.blog.csdn.net/article/details/120703648 https://jiangxl.blog.csdn.net/article/details/120703831

邀你加入技術(shù)交流群,2023 我們一起卷!

推薦閱讀 點(diǎn)擊標(biāo)題可跳轉(zhuǎn)

CPU 100% 都打爆了,你卻連哪里出的問題都不知道

第一批因AI失業(yè)的人已出現(xiàn)!有公司直接裁掉一半

適合個(gè)人用戶使用的 6 款最佳虛擬化軟件!

中國電科(CETC)成都員工大罵領(lǐng)導(dǎo)截圖火遍全網(wǎng)

幾款讓人難以置信的軟件!純國產(chǎn),真實(shí)用

Docker 認(rèn)錯(cuò)了!!!

Redis 主從復(fù)制及數(shù)據(jù)恢復(fù)實(shí)踐

PS:因?yàn)楣娞?hào)平臺(tái)更改了推送規(guī)則,如果不想錯(cuò)過內(nèi)容,記得讀完點(diǎn)一下“在看”,加個(gè)“星標(biāo)”,這樣每次新文章推送才會(huì)第一時(shí)間出現(xiàn)在你的訂閱列表里。點(diǎn)“在看”支持我們吧!


南京兆柏?cái)?shù)據(jù)恢復(fù)中心
相關(guān)推薦