Redis開發與運維之第九章哨兵(五)--部署技巧

1)Sentinel節點不應該部署在一臺物理“機器”上。

       這裏特意強調物理機是因爲一臺物理機做成了若干虛擬機或者現今比較流行的容器,它們雖然有不同的IP地址,但實際上它們都是同一臺物理機,同一臺物理機意味着如果這臺機器有什麼硬件故障,所有的虛擬機都會受到影響,爲了實現Sentinel節點集合真正的高可用,請勿將Sentinel節點部署在同一臺物理機器上。

 2)部署至少三個且奇數個的Sentinel節點。

    3個以上是通過增加Sentinel節點的個數提高對於故障判定的準確性,因爲領導者選舉需要至少一半加1個節點,奇數個節點可以在滿足該條件的基礎上節省一個節點。有關Sentinel節點如何判斷節點失敗

 3)只有一套Sentinel,還是每個主節點配置一套Sentinel?

 Sentinel節點集合可以只監控一個主節點,也可以監控多個主節點,也就意味着部署拓撲可能是圖9-19和圖9-20兩種情況。

 

 

 那麼在實際生產環境中更偏向於哪一種部署方式呢,下面分別分析兩種方案的優缺點。

方案一:

       一套Sentinel,很明顯這種方案在一定程度上降低了維護成本,因爲只需要維護固定個數的Sentinel節點,集中對多個Redis數據節點進行管理就可以了。但是這同時也是它的缺點,如果這套Sentinel節點集合出現異常,可能會對多個Redis數據節點造成影響。還有如果監控的Redis數據節點較多,會造成Sentinel節點產生過多的網絡連接,也會有一定的影響。

 方案二:

        多套Sentinel,顯然這種方案的優點和缺點和上面是相反的,每個Redis主節點都有自己的Sentinel節點集合,會造成資源浪費。但是優點也很明顯,每套Redis Sentinel都是彼此隔離的。

 如果Sentinel節點集合監控的是同一個業務的多個主節點集合,那麼使用方案一、否則一般建議採用方案二。

 API

 Sentinel節點是一個特殊的Redis節點,它有自己專屬的API。爲了方便演示,以圖9-21進行說明:Sentinel節點集合監控着
兩組主從模式的Redis數據節點。

1.sentinel masters

展示所有被監控的主節點狀態以及相關的統計信息

 

127.0.0.1:26379> sentinel masters
1) 1) "name"
2) "mymaster-2"
3) "ip"
4) "127.0.0.1"
5) "port"
6) "6382"
.........忽略............
2) 1) "name"
2) "mymaster-1"
3) "ip"
4) "127.0.0.1"
5) "port"
6) "6379"
.........忽略............

 2.sentinel master<master name>

展示指定<master name>的主節點狀態以及相關的統計信息

127.0.0.1:26379> sentinel master mymaster-1
1) "name"
2) "mymaster-1"
3) "ip"
4) "127.0.0.1"
5) "port"
6) "6379"
.........忽略............

 3.sentinel slaves<master name>

 展示指定<master name>的從節點狀態以及相關的統計信息

127.0.0.1:26379> sentinel slaves mymaster-1
1) 1) "name"
2) "127.0.0.1:6380"
3) "ip"
4) "127.0.0.1"
5) "port"
6) "6380"
.........忽略............
2) 1) "name"
2) "127.0.0.1:6381"
3) "ip"
4) "127.0.0.1"
5) "port"
6) "6381"
.........忽略............

4.sentinel sentinels<master name>

 展示指定<master name>的Sentinel節點集合(不包含當前Sentinel節點)

127.0.0.1:26379> sentinel sentinels mymaster-1
1) 1) "name"
2) "127.0.0.1:26380"
3) "ip"
4) "127.0.0.1"
5) "port"
6) "26380"
.........忽略............
2) 1) "name"
2) "127.0.0.1:26381"
3) "ip"
4) "127.0.0.1"
5) "port"
6) "26381"
.........忽略............

5.sentinel get-master-addr-by-name<master name>

 返回指定<master name>主節點的IP地址和端口

127.0.0.1:26379> sentinel get-master-addr-by-name mymaster-1
1) "127.0.0.1"
2) "6379"

6.sentinel reset<pattern>

當前Sentinel節點對符合<pattern>(通配符風格)主節點的配置進行重置,包含清除主節點的相關狀態(例如故障轉移),重新發現從節點和Sentinel節點。 

127.0.0.1:26379> sentinel reset mymaster-1
(integer) 1

7.sentinel failover<master name>

       對指定<master name>主節點進行強制故障轉移(沒有和其他Sentinel節點“協商”),當故障轉移完成後,其他Sentinel節點按照故障轉移的結果更新自身配置,這個命令在Redis Sentinel的日常運維中非常有用,將在9.6節進行詳細介紹。

例如,對mymaster-2進行故障轉移:

127.0.0.1:26379> sentinel failover mymaster-2
OK

執行命令前,mymaster-2是127.0.0.1:6382

127.0.0.1:26379> info sentinel
# Sentinel
sentinel_masters:2
sentinel_tilt:0
sentinel_running_scripts:0
sentinel_scripts_queue_length:0
master0:name=mymaster-2,status=ok,address=127.0.0.1:6382,slaves=2,sentinels=3
master1:name=mymaster-1,status=ok,address=127.0.0.1:6379,slaves=2,sentinels=3

執行命令後:mymaster-2由原來的一個從節點127.0.0.1:6383代替.

127.0.0.1:26379> info sentinel
# Sentinel
sentinel_masters:2
sentinel_tilt:0
sentinel_running_scripts:0
sentinel_scripts_queue_length:0
master0:name=mymaster-2,status=ok,address=127.0.0.1:6383,slaves=2,sentinels=3
master1:name=mymaster-1,status=ok,address=127.0.0.1:6379,slaves=2,sentinels=3

8.sentinel ckquorum<master name>

       檢測當前可達的Sentinel節點總數是否達到<quorum>的個數。例如quorum=3,而當前可達的Sentinel節點個數爲2個,那麼將無法進行故障轉移,Redis Sentinel的高可用特性也將失去。

127.0.0.1:26379> sentinel ckquorum mymaster-1
OK 3 usable Sentinels. Quorum and failover authorization can be reached

9.sentinel flushconfig

      將Sentinel節點的配置強制刷到磁盤上,這個命令Sentinel節點自身用得比較多,對於開發和運維人員只有當外部原因(例如磁盤損壞)造成配置文件損壞或者丟失時,這個命令是很有用的。 

127.0.0.1:26379> sentinel flushconfig
OK

10.sentinel remove<master name>

取消當前Sentinel節點對於指定<master name>主節點的監控。
例如sentinel-1當前對mymaster-1進行了監控:

127.0.0.1:26379> info sentinel
# Sentinel
sentinel_masters:2
sentinel_tilt:0
sentinel_running_scripts:0
sentinel_scripts_queue_length:0
master0:name=mymaster-2,status=ok,address=127.0.0.1:6382,slaves=2,sentinels=3
master1:name=mymaster-1,status=ok,address=127.0.0.1:6379,slaves=2,sentinels=3

例如下面,sentinel-1節點取消對mymaster-1節點的監控,但是要注意這個命令僅僅對當前Sentinel節點有效。

127.0.0.1:26379> sentinel remove mymaster-1
OK

再執行info sentinel命令,發現sentinel-1已經失去對mymaster-1的監控

127.0.0.1:26379> info sentinel
# Sentinel
sentinel_masters:1
sentinel_tilt:0
sentinel_running_scripts:0
sentinel_scripts_queue_length:0
master0:name=mymaster-2,status=ok,address=127.0.0.1:6383,slaves=2,sentinels=3

11.sentinel monitor<master name><ip><port><quorum>

 這個命令和配置文件中的含義是完全一樣的,只不過是通過命令的形式來完成Sentinel節點對主節點的監控。

例如命令sentinel-1節點重新監控mymaster-1節點

127.0.0.1:26379> sentinel monitor mymaster-1 127.0.0.1 6379 2
OK

命令執行後,發現sentinel-1節點重新對mymaster-1節點進行監控

# Sentinel
sentinel_masters:2
sentinel_tilt:0
sentinel_running_scripts:0
sentinel_scripts_queue_length:0
master0:name=mymaster-2,status=ok,address=127.0.0.1:6383,slaves=2,sentinels=3
master1:name=mymaster-1,status=ok,address=127.0.0.1:6379,slaves=2,sentinels=3

12.sentinel set<master name>

 動態修改Sentinel節點配置選項

13.sentinel is-master-down-by-addr

 Sentinel節點之間用來交換對主節點是否下線的判斷,根據參數的不同,還可以作爲Sentinel領導者選舉的通信方式

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章