一文了解Redis中的哨兵模式
這篇文章帶大家了解一下Redis中的哨兵模式,希望對大家有幫助!
Redis 主從模式,一旦主節點發生故障,可以將從節點升為主節點,同時也要通知客戶端更新主節點位址,這樣一般是不可行的。所以,Redis 提供了 Redis Sentinel
哨兵機制 來解決這個問題。 【相關推薦:Redis影片教學】
主從複製的問題
1. 主從複製的好處
- 主節點發生故障,從節點會升級為主節點
- 擴展主節點的讀取能力,分擔主節點壓力
2. 存在的問題
- 從節點升級主節點的過程需要人工幹預,同時要更改客戶端Redis服務位址
- 主節點寫入能力、儲存能力受到單機限制
- 效能的影響:Redis 複製中斷後從節點會啟動
psync
。此時如果同步不成功,則會進行全量同步,主函式庫執行全量備份的同時,可能會造成毫秒或秒級的卡頓
Sentinel 實作原理
1. 一些概念
主要功能
- # 監控: 不斷檢查主從伺服器是否正常運作
- 通知: 一旦某個節點發生故障,會通知其他節點
- 自動故障轉移: 當主節點無法正常運作會自動進行故障轉移,從其中一個從節點升級為主節點
-
配置提供者: 用戶端不是配置單一節點,而是
Sentinel
節點集合
主觀下線和客觀下線
一般來說,每個Sentinel
節點會不斷的對其他Sentinel
節點和Redis
節點發送PING
,透過是否回復來確認是否在線
-
主觀下線: 適用於所有主節點和從節點,如果在
down-after-milliseconds
毫秒內,Sentinel
沒有收到目標節點的有效回复,則會判定該節點為主觀下線。 -
客觀下線: 只使用於主節點,如果主節點發生故障,
Sentinel
節點會透過sentinel is-master-down-by- addr
指令,向其它Sentinel
節點詢問對該節點的狀態判斷。如果超過<quorum></quorum>
個數的節點判定主節點不可達,則Sentinel
節點會判斷主節點為客觀下線。
2. 工作原理
- 每個
Sentinel
以1次/s
頻率,向其他Sentinel
節點、Redis
主從節點發送PING
指令。 - 如果一個實例,距離最後有效回應
PING
指令超過down-after-milliseconds
,這個實例被Sentinel
標記為主觀下線。 - 如果一個主伺服器 被標記為主觀下線,那麼正在監視這個主伺服器的所有
Sentinel
節點,以1次/s
確認此主伺服器是否進入主觀下線狀態 - 如果超過
<quorum></quorum>
個數的節點判定主節點不可達,則該Sentinel
節點會判斷主節點為客觀下線。 - 當主伺服器被標記為客觀下線時,
Sentinel
向下線伺服器的所欲伺服器發送INFO
指令,會從10次/s
改為1次/s
。 -
Sentinel
節點之間協商主節點狀態,如果主節點處於SDOWN
狀態,則投票自動選出新的 主節點。將剩餘的 從節點 指向 新的主節點 進行 資料複製。 - 當沒有足夠數量的
Sentinel
同意主伺服器 下線時,主伺服器 的客觀下線狀態就會被移除。當主伺服器 重新向Sentinel
的PING
指令傳回有效回覆 時,主伺服器 的主觀下線狀態 就會被移除。
3. 訊息遺失
Redis 採用主從複製的模式,一旦主節點掛掉,從節點正在同步的資料可能會遺失,延遲越大,丟失的越多。
Redis 提供了兩個設定項來限制主函式庫的請求處理,分別是min-slaves-to-write
和min-slaves-max-lag
。
- min-slaves-to-write:這個配置項設定了主函式庫能進行資料同步的最少從函式庫數量;
- min-slaves-max-lag:這個配置項設定了主從庫間進行資料複製時,從庫給主庫發送ACK 訊息的最大延遲(以秒為單位)。
這兩個組態項目組合後的要求是,主庫連接的從庫中至少有N 個從庫,和主庫進行資料複製時的ACK 訊息延遲不能超過T 秒,否則,主函式庫就不會再接收客戶端的請求了。
所以,Sentine 無法保證訊息完全不遺失,但也能盡量保證訊息少遺失。
小結
Sentinel
解決了高可用,沒有解決主節點單節點擴充的問題。
更多程式相關知識,請造訪:程式設計入門! !
以上是一文了解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)或本地緩存(如文件或數據庫)均可考慮。採用高效數據結構:如果自行實現目錄遍歷,選擇更高效的數據結構(例如哈希表而非線性搜索)存儲和訪問目錄信
