redis系列07--redis哨兵集羣搭建

目錄

一、搭建

1、哨兵的配置文件

2、在eshop-cache03上再部署一個redis

2、正式的配置

3、啓動哨兵進程

4、檢查哨兵狀態

二、操作

1、哨兵節點的增加和刪除

2、slave的永久下線

3、slave切換爲Master的優先級

4、基於哨兵集羣架構下的安全認證

5、容災演練

6、哨兵的生產環境部署


一、搭建

1、哨兵的配置文件

sentinel.conf

最小的配置

每一個哨兵都可以去監控多個maser-slaves的主從架構

因爲可能你的公司裏,爲不同的項目,部署了多個master-slaves的redis主從集羣

相同的一套哨兵集羣,就可以去監控不同的多個redis主從集羣

你自己給每個redis主從集羣分配一個邏輯的名稱

sentinel monitor mymaster 127.0.0.1 6379 2
sentinel down-after-milliseconds mymaster 60000
sentinel failover-timeout mymaster 180000
sentinel parallel-syncs mymaster 1

sentinel monitor resque 192.168.1.3 6380 4
sentinel down-after-milliseconds resque 10000
sentinel failover-timeout resque 180000
sentinel parallel-syncs resque 5

sentinel monitor mymaster 127.0.0.1 6379 

類似這種配置,來指定對一個master的監控,給監控的master指定的一個名稱,因爲後面分佈式集羣架構裏會講解,可以配置多個master做數據拆分

sentinel down-after-milliseconds mymaster 60000
sentinel failover-timeout mymaster 180000
sentinel parallel-syncs mymaster 1

上面的三個配置,都是針對某個監控的master配置的,給其指定上面分配的名稱即可

上面這段配置,就監控了兩個master node

這是最小的哨兵配置,如果發生了master-slave故障轉移,或者新的哨兵進程加入哨兵集羣,那麼哨兵會自動更新自己的配置文件

sentinel monitor master-group-name hostname port quorum

quorum的解釋如下:

(1)至少多少個哨兵要一致同意,master進程掛掉了,或者slave進程掛掉了,或者要啓動一個故障轉移操作
(2)quorum是用來識別故障的,真正執行故障轉移的時候,還是要在哨兵集羣執行選舉,選舉一個哨兵進程出來執行故障轉移操作
(3)假設有5個哨兵,quorum設置了2,那麼如果5個哨兵中的2個都認爲master掛掉了; 2個哨兵中的一個就會做一個選舉,選舉一個哨兵出來,執行故障轉移; 如果5個哨兵中有3個哨兵都是運行的,那麼故障轉移就會被允許執行

down-after-milliseconds,超過多少毫秒跟一個redis實例斷了連接,哨兵就可能認爲這個redis實例掛了

parallel-syncs,新的master別切換之後,同時有多少個slave被切換到去連接新master,重新做同步,數字越低,花費的時間越多

假設你的redis是1個master,4個slave

然後master宕機了,4個slave中有1個切換成了master,剩下3個slave就要掛到新的master上面去

這個時候,如果parallel-syncs是1,那麼3個slave,一個一個地掛接到新的master上面去,1個掛接完,而且從新的master sync完數據之後,再掛接下一個

如果parallel-syncs是3,那麼一次性就會把所有slave掛接到新的master上去

failover-timeout,執行故障轉移的timeout超時時長

2、在eshop-cache03上再部署一個redis

只要安裝redis就可以了,不需要去部署redis實例的啓動

wget http://downloads.sourceforge.net/tcl/tcl8.6.1-src.tar.gz
tar -xzvf tcl8.6.1-src.tar.gz
cd  /usr/local/tcl8.6.1/unix/
./configure  
make && make install

使用redis-3.2.8.tar.gz(截止2017年4月的最新穩定版)
tar -zxvf redis-3.2.8.tar.gz
cd redis-3.2.8
make && make test
make install

2、正式的配置

哨兵默認用26379端口,默認不能跟其他機器在指定端口連通,只能在本地訪問

mkdir /etc/sentinal
mkdir -p /var/sentinal/5000

/etc/sentinel/5000.conf

port 5000
bind 192.168.31.187
dir /var/sentinal/5000
sentinel monitor mymaster 192.168.31.187 6379 2
sentinel down-after-milliseconds mymaster 30000
sentinel failover-timeout mymaster 60000
sentinel parallel-syncs mymaster 1
#加上reids密碼
sentinel auth-pass mymaster 123123
protected-mode no

port 5000
bind 192.168.31.19
dir /var/sentinal/5000
sentinel monitor mymaster 192.168.31.187 6379 2
sentinel down-after-milliseconds mymaster 30000
sentinel failover-timeout mymaster 60000
sentinel parallel-syncs mymaster 1

port 5000
bind 192.168.31.227
dir /var/sentinal/5000
sentinel monitor mymaster 192.168.31.187 6379 2
sentinel down-after-milliseconds mymaster 30000
sentinel failover-timeout mymaster 60000
sentinel parallel-syncs mymaster 1

3、啓動哨兵進程

在eshop-cache01、eshop-cache02、eshop-cache03三臺機器上,分別啓動三個哨兵進程,組成一個集羣,觀察一下日誌的輸出

redis-sentinel /etc/sentinal/5000.conf
redis-server /etc/sentinal/5000.conf --sentinel

日誌裏會顯示出來,每個哨兵都能去監控到對應的redis master,並能夠自動發現對應的slave

哨兵之間,互相會自動進行發現,用的就是之前說的pub/sub,消息發佈和訂閱channel消息系統和機制

4、檢查哨兵狀態

redis-cli -h 192.168.31.187 -p 5000

sentinel master mymaster
SENTINEL slaves mymaster
SENTINEL sentinels mymaster

SENTINEL get-master-addr-by-name mymaster

二、操作


1、哨兵節點的增加和刪除

增加sentinal,會自動發現

刪除sentinal的步驟

(1)停止sentinal進程
(2)SENTINEL RESET *,在所有sentinal上執行,清理所有的master狀態
(3)SENTINEL MASTER mastername,在所有sentinal上執行,查看所有sentinal對數量是否達成了一致

2、slave的永久下線

讓master摘除某個已經下線的slave:SENTINEL RESET mastername,在所有的哨兵上面執行

3、slave切換爲Master的優先級

slave->master選舉優先級:slave-priority,值越小優先級越高

4、基於哨兵集羣架構下的安全認證

每個slave都有可能切換成master,所以每個實例都要配置兩個指令

master上啓用安全認證,requirepass
master連接口令,masterauth

sentinal,sentinel auth-pass <master-group-name> <pass>

5、容災演練

通過哨兵看一下當前的master:SENTINEL get-master-addr-by-name mymaster

把master節點kill -9掉,pid文件也刪除掉

查看sentinal的日誌,是否出現+sdown字樣,識別出了master的宕機問題; 然後出現+odown字樣,就是指定的quorum哨兵數量,都認爲master宕機了

(1)三個哨兵進程都認爲master是sdown了
(2)超過quorum指定的哨兵進程都認爲sdown之後,就變爲odown
(3)哨兵1是被選舉爲要執行後續的主備切換的那個哨兵
(4)哨兵1去新的master(slave)獲取了一個新的config version
(5)嘗試執行failover
(6)投票選舉出一個slave區切換成master,每個哨兵都會執行一次投票
(7)讓salve,slaveof noone,不讓它去做任何節點的slave了; 把slave提拔成master; 舊的master認爲不再是master了
(8)哨兵就自動認爲之前的187:6379變成了slave了,19:6379變成了master了
(9)哨兵去探查了一下187:6379這個salve的狀態,認爲它sdown了

所有哨兵選舉出了一個,來執行主備切換操作

如果哨兵的majority都存活着,那麼就會執行主備切換操作

再通過哨兵看一下master:SENTINEL get-master-addr-by-name mymaster

嘗試連接一下新的master

故障恢復,再將舊的master重新啓動,查看是否被哨兵自動切換成slave節點

(1)手動殺掉master
(2)哨兵能否執行主備切換,將slave切換爲master
(3)哨兵完成主備切換後,新的master能否使用
(4)故障恢復,將舊的master重新啓動
(5)哨兵能否自動將舊的master變爲slave,掛接到新的master上面去,而且也是可以使用的

6、哨兵的生產環境部署

daemonize yes
logfile /var/log/sentinal/5000/sentinal.log

mkdir -p /var/log/sentinal/5000
 

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