久久精品人人爽,华人av在线,亚洲性视频网站,欧美专区一二三

Redis中的哨兵模式有什么用

152次閱讀
沒有評論

共計 5185 個字符,預計需要花費 13 分鐘才能閱讀完成。

這篇文章將為大家詳細講解有關 Redis 中的哨兵模式有什么用,丸趣 TV 小編覺得挺實用的,因此分享給大家做個參考,希望大家閱讀完這篇文章后可以有所收獲。

基本介紹

哨兵(sentinel)是 Redis 的高可用性 (High Availability) 的解決方案:

由一個或多個 sentinel 實例組成 sentinel 集群可以監(jiān)視一個或多個主服務器和多個從服務器。【相關推薦:Redis 視頻教程】

當主服務器進入下線狀態(tài)時,sentinel 可以將該主服務器下的某一從服務器升級為主服務器繼續(xù)提供服務,從而保證 redis 的高可用性。

圖解

哨兵模式搭建步驟

1、復制一份 sentinel.conf 文件

cp sentinel.conf sentinel‐26379.conf
cp sentinel.conf sentinel‐26380.conf
cp sentinel.conf sentinel‐26381.conf

2、相關配置修改

# 哨兵 sentinel 實例運行的端口默認 26379
port 26379
#將 `daemonize` 由 `no` 改為 `yes`
daemonize yes
#哨兵 sentinel 監(jiān)控的 redis 主節(jié)點的  ip port
#master-name 可以自己命名的主節(jié)點名字只能由字母 A -z、數(shù)字 0 -9、這三個字符 .-_ 組成。#quorum 當這些 quorum 個數(shù) sentinel 哨兵認為 master 主節(jié)點失聯(lián)那么這時客觀上認為主節(jié)點失聯(lián)了
#sentinel monitor  master-name   ip   redis-port   quorum 
sentinel monitor master 127.0.0.1 6379 2
#當在 Redis 實例中開啟了 requirepass foobared 授權密碼這樣所有連接 Redis 實例的客戶端都要提供密碼
#設置哨兵 sentinel 連接主從的密碼注意必須為主從設置一樣的驗證密碼
#sentinel auth-pass  master-name   password 
sentinel auth-pass master MySUPER--secret-0123passw0rd
#指定多少毫秒之后主節(jié)點沒有應答哨兵 sentinel 此時哨兵主觀上認為主節(jié)點下線默認 30 秒,改成 3 秒
#sentinel down-after-milliseconds  master-name   milliseconds 
sentinel down-after-milliseconds master 3000
#這個配置項指定了在發(fā)生 failover 主備切換時最多可以有多少個 slave 同時對新的 master 進行同步,這個數(shù)字越小,完成 failover 所需的時間就越長,但是如果這個數(shù)字越大,就意味著越多的 slave 因為 replication 而不可用。可以通過將這個值設為 1 來保證每次只有一個 slave 處于不能處理命令請求的狀態(tài)。#sentinel parallel-syncs  master-name   numslaves 
sentinel parallel-syncs master 1
#故障轉移的超時時間 failover-timeout 可以用在以下這些方面:#1. 同一個 sentinel 對同一個 master 兩次 failover 之間的間隔時間。#2. 當一個 slave 從一個錯誤的 master 那里同步數(shù)據(jù)開始計算時間。直到 slave 被糾正為向正確的 master 那里同步數(shù)據(jù)時。#3. 當想要取消一個正在進行的 failover 所需要的時間。#4. 當進行 failover 時,配置所有 slaves 指向新的 master 所需的最大時間。不過,即使過了這個超時,slaves 依然會被正確配置為指向 master,但是就不按 parallel-syncs 所配置的規(guī)則來了 #默認三分鐘
#sentinel failover-timeout  master-name   milliseconds 
sentinelf ailover-timeout master1 80000
docker run -it --name redis-sentinel2639 -v /Users/yujiale/docker/redis/conf/sentinel6379.conf:/etc/redis/sentinel.conf -v /Users/yujiale/docker/redis/data26379:/data --network localNetwork --ip 172.172.0.16 -d redis:6.2.6 redis-sentinel /etc/redis/sentinel.conf

3、啟動 sentinel 哨兵實例

# 啟動 redis-master 和 redis-slaver

在 redis-master 目錄下  ./redis-server redis.conf
在 redis-slaver1 目錄下  ./redis-server redis.conf
在 redis-slaver2 目錄下  ./redis-server redis.conf

# 啟動 redis-sentinel

在 redis-sentinel1 目錄下  ./redis-sentinel sentinel.conf
在 redis-sentinel2 目錄下  ./redis-sentinel sentinel.conf
在 redis-sentinel3 目錄下  ./redis-sentinel sentinel.conf

4、查看啟動狀態(tài)

執(zhí)行流程

1、啟動并初始化 Sentinel

Sentinel 是一個特殊的 Redis 服務器不會進行持久化

Sentinel 實例啟動后每個 Sentinel 會創(chuàng)建 2 個連向主服務器的網(wǎng)絡連接

命令連接:用于向主服務器發(fā)送命令,并接收響應

訂閱連接:用于訂閱主服務器的—sentinel—:hello 頻道

2、獲取主 Master 信息

Sentinel 默認每 10s 一次,向被監(jiān)控的主服務器發(fā)送 info 命令,獲取主服務器和其下屬從服務器的信息。

3、獲取從 salve 信息

當 Sentinel 發(fā)現(xiàn)主服務器有新的從服務器出現(xiàn)時,Sentinel 還會向從服務器建立命令連接和訂閱連接。

在命令連接建立之后,Sentinel 還是默認 10s 一次,向從服務器發(fā)送 info 命令,并記錄從服務器的信息。

4、以訂閱的方式向主服務器和從服務器發(fā)送消息

默認情況下,Sentinel 每 2s 一次,向所有被監(jiān)視的主服務器和從服務器所訂閱的—sentinel—:hello 頻道上發(fā)送消息,消息中會攜帶 Sentinel 自身的信息和主服務器的信息。

5、接收來自主服務器和從服務器的頻道信息

當 Sentinel 與主服務器或者從服務器建立起訂閱連接之后,Sentinel 就會通過訂閱連接,向服務器發(fā)送以下命令

subscribe—sentinel—:hello

Sentinel 彼此之間只創(chuàng)建命令連接,而不創(chuàng)建訂閱連接,因為 Sentinel 通過訂閱主服務器或從服務器,就可以感知到新的 Sentinel 的加入,而一旦新 Sentinel 加入后,相互感知的 Sentinel 通過命令連接來通信就可以了。

6、檢測主觀下線狀態(tài)

Sentinel 每秒一次向所有與它建立了命令連接的實例 (主服務器、從服務器和其他 Sentinel) 發(fā)送 PING 命令實例在 down-after-milliseconds 毫秒內返回無效回復 (除了 +PONG、-LOADING、-MASTERDOWN 外) 實例在 down-after-milliseconds 毫秒內無回復(超時)Sentinel 就會認為該實例主觀下線(SDown)

7、檢查客觀下線狀態(tài)

當一個 Sentinel 將一個主服務器判斷為主觀下線后

Sentinel 會向同時監(jiān)控這個主服務器的所有其他 Sentinel 發(fā)送查詢命令

主機的

SENTINEL is-master-down-by-addr  ip   port   current_epoch   runid

其他 Sentinel 回復

down_state   leader_runid   leader_epoch

判斷它們是否也認為主服務器下線。如果達到 Sentinel 配置中的 quorum 數(shù)量的 Sentinel 實例都判斷主服務器為主觀下線,則該主服務器就會被判定為客觀下線(ODown)。

8、選舉 Leader Sentinel

當一個主服務器被判定為客觀下線后,監(jiān)視這個主服務器的所有 Sentinel 會通過選舉算法(raft),選出一個 Leader Sentinel 去執(zhí)行 failover(故障轉移)操作。

哨兵選舉

Raft

Raft 協(xié)議是用來解決分布式系統(tǒng)一致性問題的協(xié)議。

Raft 協(xié)議描述的節(jié)點共有三種狀態(tài):Leader, Follower, Candidate。

term:Raft 協(xié)議將時間切分為一個個的 Term(任期),可以認為是一種“邏輯時間”。

選舉流程

Raft 采用心跳機制觸發(fā) Leader 選舉

系統(tǒng)啟動后,全部節(jié)點初始化為 Follower,term 為 0。

節(jié)點如果收到了 RequestVote 或者 AppendEntries,就會保持自己的 Follower 身份

節(jié)點如果一段時間內沒收到 AppendEntries 消息,在該節(jié)點的超時時間內還沒發(fā)現(xiàn) Leader,F(xiàn)ollower 就會轉換成 Candidate,自己開始競選 Leader。

增加自己的 term。

啟動一個新的定時器。

給自己投一票。

向所有其他節(jié)點發(fā)送 RequestVote,并等待其他節(jié)點的回復。

一旦轉化為 Candidate,該節(jié)點立即開始下面幾件事情:

如果在計時器超時前,節(jié)點收到多數(shù)節(jié)點的同意投票,就轉換成 Leader。同時向所有其他節(jié)點發(fā)送 AppendEntries,告知自己成為了 Leader。

每個節(jié)點在一個 term 內只能投一票,采取先到先得的策略,Candidate 前面說到已經(jīng)投給了自己,F(xiàn)ollower 會投給第一個收到 RequestVote 的節(jié)點。

Raft 協(xié)議的定時器采取隨機超時時間,這是選舉 Leader 的關鍵。

在同一個 term 內,先轉為 Candidate 的節(jié)點會先發(fā)起投票,從而獲得多數(shù)票。

Sentinel 的 leader 選舉流程

1、某 Sentinel 認定 master 客觀下線后,該 Sentinel 會先看看自己有沒有投過票,如果自己已經(jīng)投過票給其他 Sentinel 了,在一定時間內自己就不會成為 Leader。

2、如果該 Sentinel 還沒投過票,那么它就成為 Candidate。

3、Sentinel 需要完成幾件事情:

更新故障轉移狀態(tài)為 start

當前 epoch 加 1,相當于進入一個新 term,在 Sentinel 中 epoch 就是 Raft 協(xié)議中的 term。

向其他節(jié)點發(fā)送 is-master-down-by-addr 命令請求投票。命令會帶上自己的 epoch。

給自己投一票(leader、leader_epoch)

4、當其它哨兵收到此命令時,可以同意或者拒絕它成為領導者;(通過判斷 epoch)

5、Candidate 會不斷的統(tǒng)計自己的票數(shù),直到他發(fā)現(xiàn)認同他成為 Leader 的票數(shù)超過一半而且超過它配置的 quorum,這時它就成為了 Leader。

6、其他 Sentinel 等待 Leader 從 slave 選出 master 后,檢測到新的 master 正常工作后,就會去掉客觀下線的標識。

故障轉移

當選舉出 Leader Sentinel 后,Leader Sentinel 會對下線的主服務器執(zhí)行故障轉移操作

1. 它會將失效 Master 的其中一個 Slave 升級為新的 Master, 并讓失效 Master 的其他 Slave 改為復制新的 Master;

2. 當客戶端試圖連接失效的 Master 時,集群也會向客戶端返回新 Master 的地址,使得集群可以使用現(xiàn)在的 Master 替換失效 Master。

3.Master 和 Slave 服務器切換后,Master 的 redis.conf、Slave 的 redis.conf 和 sentinel.conf 的配置文件的內容都會發(fā)生相應的改變,即,Master 主服務器的 redis.conf 配置文件中會多一行 replicaof 的配置,sentinel.conf 的監(jiān)控目標會隨之調換。

主服務器的選擇

1. 過濾掉主觀下線的節(jié)點

2. 選擇 slave-priority 最高的節(jié)點,如果由則返回沒有就繼續(xù)選擇

3. 選擇出復制偏移量最大的系節(jié)點,因為復制偏移量越大則數(shù)據(jù)復制的越完整,如果由就返回了,沒有就繼續(xù)

4. 選擇 run_id 最小的節(jié)點,因為 run_id 越小說明重啟次數(shù)越少

關于“Redis 中的哨兵模式有什么用”這篇文章就分享到這里了,希望以上內容可以對大家有一定的幫助,使各位可以學到更多知識,如果覺得文章不錯,請把它分享出去讓更多的人看到。

正文完
 
丸趣
版權聲明:本站原創(chuàng)文章,由 丸趣 2023-07-15發(fā)表,共計5185字。
轉載說明:除特殊說明外本站除技術相關以外文章皆由網(wǎng)絡搜集發(fā)布,轉載請注明出處。
評論(沒有評論)
主站蜘蛛池模板: 南靖县| 木兰县| 科技| 开江县| 肃北| 洞口县| 双峰县| 教育| 宁陵县| 天峻县| 九江市| 扎赉特旗| 大城县| 慈利县| 怀安县| 化州市| 阿图什市| 汨罗市| 安丘市| 大关县| 本溪市| 剑阁县| 韶关市| 上饶市| 娄烦县| 吴堡县| 会理县| 深水埗区| 河间市| 恩施市| 温泉县| 博白县| 广昌县| 图木舒克市| 湟源县| 曲水县| 霍城县| 宜州市| 嘉义县| 噶尔县| 阿荣旗|