Sentinel 哨兵是 redis 官方提供的高可用方案,可以用它來監控多個 Redis 服務實例的運行情況。Redis Sentinel 是一個運行在特殊模式下的 Redis 服務器。Redis Sentinel 是在多個Sentinel 進程環境下互相協作工作的。
Sentinel 系統有三個主要任務:
● 監控:Sentinel 不斷的檢查主服務和從服務器是否按照預期正常工作。
● 提醒:被監控的 Redis 出現問題時,Sentinel 會通知管理員或其他應用程序。
● 自動故障轉移:監控的主 Redis 不能正常工作,Sentinel 會開始進行故障遷移操作。將一個從服務器升級新的主服務器。 讓其他從服務器掛到新的主服務器。同時向客戶端提供新的主服務器地址。
Sentinel 配置文件
復制三份sentinel.conf文
三個文件分別命名:
● sentinel26380.conf
● sentinel26382.conf
● sentinel26384.conf
● 執行復制命令 cp sentinel.conf xxx.conf
● 修改 port 26380、 port 26382、 port 26384
● 修改 sentinel monitor mymaster 127.0.0.1 6380 2
格式:sentinel monitor <name> <masterIP> <masterPort> <Quorum 投票數>
Sentinel監控主(Master)Redis, Sentinel根據Master的配置自動發現Master的Slave,Sentinel默認端口號為26379 。
sentinel26380.conf
(1) 修改 port
(2)修改監控的 master 地址
sentinel26382.conf 修改port 26382 , master的port 6382
sentinel26384.conf 修改port 26384 , master的port 6382
啟動 Reids
查看 Master 的配置信息
連接到 6382 端口
使用 info 命令查看 Master/Slave
redis安裝時make編譯后就產生了redis-sentinel程序文件,可以在一個redis中運行多個sentinel進程。
啟動一個運行在Sentinel模式下的Redis服務實例
./redis-sentinel sentinel 配置文件
執行以下三條命令,將創建三個監視主服務器的Sentinel實例:
./redis-sentinel ../sentinel26380.conf
./redis-sentinel ../sentinel26382.conf
./redis-sentinel ../sentinel26384.conf
在 XShell 開啟三個窗口分別執行:
讓 Master 的 Redis 停止服務, 執行 shutdown
先執行 info replication 確認 Master 的 Redis ,再執行 shutdown
查看當前 Redis 的進程情況
在 Master 執行 shutdown 后, 稍微等一會 Sentinel 要進行投票計算,從可用的 Slave選舉新的 Master。
查看 Sentinel 日志,三個 Sentinel 窗口的日志是一樣的。
查看新的 Master
查看原 Slave 的變化
重新啟動 6382
查看 6384 的信息
測試數據:在 Master 寫入數據
在 6382 上讀取數據,不能寫入
● Sentinel 會不斷檢查 Master 和 Slave 是否正常
● 如果 Sentinel 掛了,就無法監控,所以需要多個哨兵,組成 Sentinel 網絡,一個健康的Sentinel 至少有 3 個 Sentinel 應用。 彼此在獨立的物理機器或虛擬機。
● 監控同一個 Master 的 Sentinel 會自動連接,組成一個分布式的 Sentinel 網絡,互相通信并交換彼此關于被監控服務器的信息
● 當一個 Sentinel 認為被監控的服務器已經下線時,它會向網絡中的其它 Sentinel 進行確認,判斷該服務器是否真的已經下線
● 如果下線的服務器為主服務器,那么 Sentinel 網絡將對下線主服務器進行自動故障轉移, 通過將下線主服務器的某個從服務器提升為新的主服務器,并讓其從服務器轉移到新的主服務器下,以此來讓系統重新回到正常狀態
● 下線的舊主服務器重新上線,Sentinel 會讓它成為從,掛到新的主服務器下
主從復制,解決了讀請求的分擔,從節點下線,會使得讀請求能力有所下降,Master 下線,寫請求無法執行
Sentinel 會在 Master 下線后自動執行故障轉移操作,提升一臺 Slave 為 Master,并讓其它Slave 成為新 Master 的 Slave。