1、概念
Redis Sentinel爲Redis提供高可用性。主要有如下功能
監控,Sentinel會不斷檢查主節點和從節點是否按預期工做。
通知。Sentinel能夠經過API通知系統管理員,一個受監控的Redis實例出現問題。
自動故障轉移。若是主服務器未按預期工做,Sentinel能夠啓動故障轉移過程,其中從節點升級爲主節點,其餘服務器從新配置向新主同步數據
Sentinel自己設計爲在多個Sentinel進程協同工做的配置中運行。讓多個Sentinel進程協做的優點以下:
當多個Sentinels贊成給定主設備再也不可用時,將執行故障檢測。這下降了誤報的可能性。
即便並不是全部Sentinel進程都正常工做,哨兵也能正常工做,從而使系統可以抵禦故障。畢竟,擁有故障轉移系統並非一件好事,而故障轉移系統自己就是一個單一的故障點。
2、配置前第幾個說明
一、Sentinel會自動發現從節點,也就是咱們只須要配置好監控的主節點,Sentinel會本身找到主節點的從節點,已經一樣在監控主節點的其餘Sentinel
二、配置Sentinel節點個數通常大於3 且是奇數,若是隻有2個,那麼發生網絡分區的時候只須要1票就能夠認爲節點down了,這個就很不合理了。
2、實現
一、配置
查看哨兵是否生效(登陸哨兵所在cli):
redis-cli -p 26380
#
sentinel master mymaster
127.0.0.1:26381> sentinel master mymaster
1) "name"
2) "mymaster" #標識名
3) "ip"
4) "127.0.0.1" #主節點ip
5) "port"
6) "6380" #端口
7) "runid"
8) "76bd28b96c8bb8c1ea9d8c5ceb62e4cd77265a7c"
9) "flags" #標識,這裏表示是一個主節點
10) "master"
11) "link-pending-commands"
12) "0"
13) "link-refcount"
14) "1"
15) "last-ping-sent"
16) "0"
17) "last-ok-ping-reply"
18) "827"
19) "last-ping-reply"
20) "827"
21) "down-after-milliseconds"
22) "60000"
23) "info-refresh"
24) "1065"
25) "role-reported"
26) "master"
27) "role-reported-time"
28) "399885"
29) "config-epoch"
30) "0"
31) "num-slaves" #哨兵數量
32) "2"
33) "num-other-sentinels"
34) "2"
35) "quorum" ##法定票數
36) "2"
37) "failover-timeout" #故障轉移的超時時間
38) "180000"
39) "parallel-syncs" #支持多少個slave同時同步數據,值太大對主庫有壓力。過小的話整個集羣同步時間慢
40) "1"
二、測試自動從新分配
1)鏈接主庫,關閉服務
redis-cli -p 6380
#shutdown
2)鏈接哨兵查看
redis-cli -p 26381
1) "name"
2) "mymaster"
3) "ip"
4) "127.0.0.1"
5) "port"
6) "6382" #已自動切換6382爲主服務器
3)登陸6382查看
redis-cli -p 6382
127.0.0.1:6382> info replication
# Replication
role:master #
已自動切換6382爲主服務器
connected_slaves:1
#從服務器1個
slave0:ip=127.0.0.1,port=6381,state=online,offset=133493,lag=0
master_replid:36a566012f6cb1a42d69273ceebbb1187943477c
master_replid2:6a9a9ea6c3ee248c95b65e689841f3edcc0bc5fa
master_repl_offset:133493
second_repl_offset:111505
repl_backlog_active:1
repl_backlog_size:1048576
repl_backlog_first_byte_offset:423
repl_backlog_histlen:133071
4)重啓以前的主服務器後
再次查看,以前的主服務器自動變爲從服務器
redis-cli -p 6382
127.0.0.1:6382> info replication
# Replication
role:master
connected_slaves:2
slave0:ip=127.0.0.1,port=6381,state=online,offset=173563,lag=1
slave1:ip=127.0.0.1,port=6380,state=online,offset=173563,lag=1
master_replid:36a566012f6cb1a42d69273ceebbb1187943477c
master_replid2:6a9a9ea6c3ee248c95b65e689841f3edcc0bc5fa
master_repl_offset:173696
second_repl_offset:111505
repl_backlog_active:1
repl_backlog_size:1048576
repl_backlog_first_byte_offset:423
repl_backlog_histlen:173274
參考: