發布時間: 2023-04-19 16:10:49
Redis哨兵機制自動化了以下三個主要功能,實現了主從故障自動切換,可以減少Redis集群的運營和維護開銷:
監控主存儲庫的運行狀態,確定主庫何時客觀上處于離線狀態;
在主庫客觀上脫機后,選擇一個新的主庫;
一旦選擇了新的主庫,就會通知從庫和客戶端。
主從模式下,如果主庫發生故障了,那就直接會影響到從庫的同步,因為從庫沒有相應的主庫可以進行數據復制操作了。
而且,如果客戶端發送的都是讀操作請求,那還可以由從庫繼續提供服務,這在純讀的業務場景下還能被接受。但是,一旦有寫操作請求了,按照主從庫模式下的讀寫分離要求,需要由主庫來完成寫操作。
無論是寫服務中斷,還是從庫無法進行數據同步,都是不能接受的。所以,如果主庫掛了,我們就需要運行一個新主庫,比如說把一個從庫切換為主庫,把它當成主庫。
哨兵其實就是一個運行在特殊模式下的 Redis 進程,主從庫實例運行的同時,它也在運行。
哨兵主要負責的就是三個任務:監控、選主(選擇主庫)和通知。
1、監控
監控是指哨兵進程在運行時,周期性地給所有的主從庫發送 PING 命令,檢測它們是否仍然在線運行。
如果從庫沒有在規定時間內響應哨兵的 PING 命令,哨兵就會把它標記為“下線狀態”;同樣,如果主庫也沒有在規定時間內響應哨兵的 PING 命令,哨兵就會判定主庫下線,然后開始自動切換主庫的流程。
2、選主
這個流程首先是執行哨兵的第二個任務,選主。
主庫掛了以后,哨兵就需要從很多個從庫里,按照一定的規則選擇一個從庫實例,把它作為新的主庫。這一步完成后,現在的集群里就有了新主庫。
3、通知
然后,哨兵會執行最后一個任務:通知。
在執行通知任務時,哨兵會把新主庫的連接信息發給其他從庫,讓它們執行 replicaof 命令,和新主庫建立連接,并進行數據復制。同時,哨兵會把新主庫的連接信息通知給客戶端,讓它們把請求操作發到新主庫上。
上一篇: 云計算和大數據有哪些區別
下一篇: Redis內存碎片是什么