一起來分析Redis哨兵模式
這篇文章為大家帶來了關於Redis的相關知識,其中主要介紹了哨兵模式的相關問題,包括了哨兵概念、哨兵作用、啟用哨兵、哨兵原理等等,希望對大家有幫助。
推薦學習:Redis教學
#哨兵模式
1. 哨兵概念
在一主多從結構中,如果master宕機了,就需要從多個slave中選出一個作為新的master,要想完成這樣的功能,就需要使用Redis的哨兵機制
-
哨兵 (sentinel) 是一個分散式系統,用於對主從結構中的每台伺服器進行監控,當發生故障時透過投票機制選擇新的master並將所有slave連接到新的master,如下圖所示:
2. 哨兵作用
-
監控:監控master和slave
- 不斷的檢查master和slave是否正常運作
- master存活偵測、master與slave運作偵測
通知(提醒):當被監控的伺服器出現問題時,向其他哨兵、Redis伺服器發送通知
#故障轉移:斷開宕機的master與slave的連接,選取一個slave作為master,將其他slave連接新的master,並告知客戶端新的伺服器位址
注意:哨兵也是redis伺服器,僅提供監控服務,不提供資料管理服務;通常哨兵的數量配置為單數(方便投票)
#3. 啟用哨兵
-
修改哨兵的設定檔
sentinel.conf
,設定檔位於Redis目錄下,如下圖所示: - ##部分配置的意義如下圖所顯示:
- 啟動哨兵
redis-sentinel filename #filename指的是配置文件名 #每个哨兵都要配置自己的配置文件
登入後複製 - #設定並啟動哨兵之後,主伺服器當機之後,會
自動的執行投票、主從切換等過程
4. 哨兵原則
哨兵在進行主從切換過程中經歷三個階段:- 監控
- 通知
##4.1 監控
用來同步各個節點的狀態訊息,這些節點包含master、slave、哨兵,也就是整個系統所有伺服器的資訊。主要完成的功能:
- # 取得各個sentinel的狀態(是否在線):新添加的哨兵要與系統中已經存在的哨兵進行資訊的交互
- 取得master的狀態(透過info指令)
- 所取得的內容如下
1. master属性 runid role:master 2. 各个slave在master中保存的基本信息
登入後複製
- 所取得的內容如下
- 取得所有slave的狀態(根據master中slave的資訊向所有的slave發送info指令)
- 取得的內容如下
slave属性 runid role:slave master_host、master_port offset
登入後複製
- 取得的內容如下
具體的內部運作原理如下所述:
- 哨兵1向master發送info指令之後,會建立一個cmd連接,創建的連接是用來發送命令的
- 創建好cmd連接之後,會在哨兵1這一端保存目前他所獲得的所有信息,另一端master也會保存自己持有的信息
- 然後哨兵1根據從master獲取的關於salve的信息,向slave發送info指令,得到salve的信息,豐富這一端所保存的資訊
- 當新增一個新的哨兵2時,哨兵2向master發送info指令,建立cmd連接,根據master中的信息可以得到之前已經存在的哨兵1,在自己這一端保存已經獲得的資訊。然後判斷哨兵1是否在線,與哨兵1建立連接,二者互相交換各自的信息,並且雙方會持續的ping,保證他們之間是暢通的
- 哨兵2根據從master獲得的slave信息,再從slave獲取信息,豐富自己所保存的信息
- 再新增一個哨兵3時,與之前的過程類似,最終三個哨兵建立起了關係網
- 關係網中三者會互相交換、發送訊息,關係網中的這種工作模式稱為發布訂閱模式
4.2 通知
哨兵在通知階段要不斷的去獲取master與slave的信息,然後將獲得的信息在各個哨兵之間進行共享。
具體的流程如下:
哨兵透過建立的cmd連接,向master、slave發送hello
指令,得到他們的訊息,然後在關係網中共用:
4.3 故障轉移
##斷開宕機的master與slave的連接,選取一個slave身為master,將其他slave連接新的master,並告知客戶端新的伺服器位址。具體的流程如下所述:
- 哨兵1總是無法得到master的回應,主觀判斷master宕機,標記
sdown
(只有一個哨兵認為master宕機)
- 哨兵1在關係網中傳遞訊息,向其他哨兵發送圖中左上角的訊息
- 其他哨兵得到訊息之後,全部向master發送訊息,確定master是否宕機,他們也會將自己得到的結果發送給關係網中的其他哨兵,確定master宕機後,將標記改為
odown
(所有哨兵偵測之後,超過一半的哨兵認為master宕機)
- 當認定master宕機之後,此時需要選舉新的master,由哪個哨兵完成這件事要通過哨兵之間的選舉決定,具體過程如下所述:
- 在選舉的時候每個哨兵手裡都有一票,每個哨兵都會發出一個指令,在內網裡邊告訴其他哨兵自己當選舉人,比如說sentinel1和sentinel2發出這個選舉指令,那麼sentinel3接收到他們的申請之後,sentinel3就會把自己的一票投給其中一方,根據
- 到達的先後順序投票,獲得票的那一方就會多一張選舉票,按照這樣的一種形式,最終會有一個選舉結果,獲得票數最多的哨兵會被獲選 在這個過程中有可能會存在失敗的現象,例如第一輪沒有選舉成功,那就會接著進行第二輪第三輪直到完成選舉
- 當完成哨兵之間的選舉之後,接下來就要由選舉勝出的哨兵去slave中挑選一個,將其變成新的master,具體的流程如下所述:
- 哨兵在伺服器清單中挑選備選master的原則:
- 先排除,後選擇
- 不在線的OUT
- 回應慢的OUT
- 與原始master斷開時間久的OUT
- #排除結束,開始進行選擇
- 優先順序高的獲選
- offset較大的獲選(比較大說明同步原來master的資料最多)
- 若還沒選出,則最後根據runid選出
- 先排除,後選擇
- 選出新的master之後,哨兵傳送指令給伺服器:
- 向新的master傳送
slaveof no one
指令
- 向其他slave傳送
slaveof 新masterIP埠
指令
- 向新的master傳送
- #同時也要告訴其他的哨兵新master是誰
#5.總結
監控階段:同步訊息通知階段:保持聯通故障轉移階段:- 哨兵發現問題,依序標記主觀下線與客觀下線
- 競選負責哨兵
- 優選新master
- 新master上任,其他slave連接新的master,
- 原master恢復之後作為slave連接到新master
以上是一起來分析Redis哨兵模式的詳細內容。更多資訊請關注PHP中文網其他相關文章!

熱AI工具

Undresser.AI Undress
人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover
用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool
免費脫衣圖片

Clothoff.io
AI脫衣器

Video Face Swap
使用我們完全免費的人工智慧換臉工具,輕鬆在任何影片中換臉!

熱門文章

熱工具

記事本++7.3.1
好用且免費的程式碼編輯器

SublimeText3漢化版
中文版,非常好用

禪工作室 13.0.1
強大的PHP整合開發環境

Dreamweaver CS6
視覺化網頁開發工具

SublimeText3 Mac版
神級程式碼編輯軟體(SublimeText3)

Redis集群模式通過分片將Redis實例部署到多個服務器,提高可擴展性和可用性。搭建步驟如下:創建奇數個Redis實例,端口不同;創建3個sentinel實例,監控Redis實例並進行故障轉移;配置sentinel配置文件,添加監控Redis實例信息和故障轉移設置;配置Redis實例配置文件,啟用集群模式並指定集群信息文件路徑;創建nodes.conf文件,包含各Redis實例的信息;啟動集群,執行create命令創建集群並指定副本數量;登錄集群執行CLUSTER INFO命令驗證集群狀態;使

如何清空 Redis 數據:使用 FLUSHALL 命令清除所有鍵值。使用 FLUSHDB 命令清除當前選定數據庫的鍵值。使用 SELECT 切換數據庫,再使用 FLUSHDB 清除多個數據庫。使用 DEL 命令刪除特定鍵。使用 redis-cli 工具清空數據。

要從 Redis 讀取隊列,需要獲取隊列名稱、使用 LPOP 命令讀取元素,並處理空隊列。具體步驟如下:獲取隊列名稱:以 "queue:" 前綴命名,如 "queue:my-queue"。使用 LPOP 命令:從隊列頭部彈出元素並返回其值,如 LPOP queue:my-queue。處理空隊列:如果隊列為空,LPOP 返回 nil,可先檢查隊列是否存在再讀取元素。

在CentOS系統上,您可以通過修改Redis配置文件或使用Redis命令來限制Lua腳本的執行時間,從而防止惡意腳本佔用過多資源。方法一:修改Redis配置文件定位Redis配置文件:Redis配置文件通常位於/etc/redis/redis.conf。編輯配置文件:使用文本編輯器(例如vi或nano)打開配置文件:sudovi/etc/redis/redis.conf設置Lua腳本執行時間限制:在配置文件中添加或修改以下行,設置Lua腳本的最大執行時間(單位:毫秒)

使用 Redis 命令行工具 (redis-cli) 可通過以下步驟管理和操作 Redis:連接到服務器,指定地址和端口。使用命令名稱和參數向服務器發送命令。使用 HELP 命令查看特定命令的幫助信息。使用 QUIT 命令退出命令行工具。

Redis計數器是一種使用Redis鍵值對存儲來實現計數操作的機制,包含以下步驟:創建計數器鍵、增加計數、減少計數、重置計數和獲取計數。 Redis計數器的優勢包括速度快、高並發、持久性和簡單易用。它可用於用戶訪問計數、實時指標跟踪、遊戲分數和排名以及訂單處理計數等場景。

Redis數據過期策略有兩種:定期刪除:定期掃描刪除過期鍵,可通過 expired-time-cap-remove-count、expired-time-cap-remove-delay 參數設置。惰性刪除:僅在讀取或寫入鍵時檢查刪除過期鍵,可通過 lazyfree-lazy-eviction、lazyfree-lazy-expire、lazyfree-lazy-user-del 參數設置。

在Debian系統中,readdir系統調用用於讀取目錄內容。如果其性能表現不佳,可嘗試以下優化策略:精簡目錄文件數量:盡可能將大型目錄拆分成多個小型目錄,降低每次readdir調用處理的項目數量。啟用目錄內容緩存:構建緩存機制,定期或在目錄內容變更時更新緩存,減少對readdir的頻繁調用。內存緩存(如Memcached或Redis)或本地緩存(如文件或數據庫)均可考慮。採用高效數據結構:如果自行實現目錄遍歷,選擇更高效的數據結構(例如哈希表而非線性搜索)存儲和訪問目錄信
