1. 程式人生 > >Redis哨兵例項搭建

Redis哨兵例項搭建

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 <master-name> <ip> <redis-port> <quorum>
sentinel monitor mymaster 127.0.0.1 6379  2
類似這種配置,來指定對一個master的監控,給監控的master指定的一個名稱,因為後面分散式叢集架構裡會講解,可以配置多個master做資料拆分
sentinel down-after-milliseconds mymaster 60000
sentinel failover-timeout mymaster 180000
sentinel parallel-syncs mymaster 1

上面的三個配置,都是針對某個監控的master配置的,給其指定上面分配的名稱即可
上面這段配置,就監控了兩個master node(mymaster ,resque )
這是最小的哨兵配置,如果發生了master-slave故障轉移,或者新的哨兵程序加入哨兵叢集,那麼哨兵會自動更新自己的配置檔案

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、在伺服器上再部署一個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

3、正式的配置

哨兵預設用26379埠,預設不能跟其他機器在指定埠連通,只能在本地訪問

1.建立資料夾
mkdir /etc/sentinal (存放配置檔案)
mkdir -p /var/sentinal/5000 (資料檔案)

2.將配置檔案(entinel.conf)copy到 /etc/sentinal 資料夾中並修文件名為5000.conf

在這裡插入圖片描述

3.修改 5000.conf 配置

port 5000
bind 172.16.1.185   (此處是本機IP)
dir /var/sentinal/5000
sentinel monitor mymaster 192.168.31.187 6379 2  (此處是master 地址ip)
sentinel down-after-milliseconds mymaster 30000
sentinel failover-timeout mymaster 60000
sentinel parallel-syncs mymaster 1

在這裡插入圖片描述

在這裡插入圖片描述

在這裡插入圖片描述

其他預設即可。

注:之前配置redis叢集使用了安全認證,此處需要去除redis安全認證才可以連線上(不去除暫時還不知道怎麼配置,註釋掉即可)
在這裡插入圖片描述

4.啟動哨兵程序
在eshop-01、eshop-02、eshop-03三臺機器上,分別啟動三個哨兵程序,組成一個叢集,觀察一下日誌的輸出

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

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

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

5、檢查哨兵狀態

redis-cli -h 172.16.1.187 -p 5000 連線哨兵

sentinel master mymaster
SENTINEL slaves mymaster
SENTINEL sentinels mymaster

SENTINEL get-master-addr-by-name mymaster