1. 程式人生 > >Redis哨兵原理總結(一)

Redis哨兵原理總結(一)

本博文主要總結關於哨兵的一些理論知識,主要關注點有一下幾個方面:

一、哨兵解決了什麼問題?

二、哨兵是如何解決“問題一”的?

三、如何使用哨兵?

四、Redis Sentinel客戶端實現的原理是什麼?Java如何操作Redis Sentinel?

一、哨兵解決了什麼問題?

這個問題要從Redis主從模式說起。Redis的主從模式可以將主節點的資料改變同步給從節點,從節點就可以起到兩個作用:

(1)作為主節點的一個備份。一旦主節點出現了故障,不可達,從節點可以作為後備,頂上來,保證資料儘量不丟失。

(2)從節點可以擴充套件主節點的讀能力。如果主節點撐不住大量併發的讀操作,此時可以分擔主節點的讀能力。

主從複製也隨之帶來了一下幾個問題:

(1)一旦主節點出現了故障,需要手動的將一個從節點晉升為主節點,同時需要修改應用方(即客戶端)的連線主節點的地址和埠號。還需要命令其他從節點去複製新的主節點,這整個過程都需要人工的操作。

(2)主節點的寫能力、儲存能力收到單機的限制。

第(1)個問題就是Redis的高可用問題了,第(2)個問題是Redis分散式的問題。這裡主要總結第一個問題,Redis的高可用問題。

Redis 哨兵就能解決這個問題。其實,哨兵不止解決了自動故障轉移問題,還能提供監控Redis主從資料庫、提醒的重要功能。

因此,哨兵具有以下功能:

監控:哨兵節點定期檢測Redis資料節點,其餘哨兵節點是否可達;

通知:哨兵節點會將故障轉移的結果通知給應用方;

主節點故障轉移:實現從節點晉升為主節點並維護後續正確的主從關係;

配置提供者:在Redis哨兵結構中,客戶端在初始化的時候連線的哨兵節點集合,從中獲取主節點資訊。

下一篇:Redis哨兵原理總結(二) 將介紹哨兵是如何解決第(1)個問題。