redis哨兵(sentinel)搭建以及springboot實戰

哨兵是建立在redis主從集羣的基礎上的,所以本文是承接上一篇redis主從複製的。一主二從三哨兵,哨兵也是部在主從節點上的,端口爲26379

主從節點

master
node01 192.168.71.101 6379
slave1
node02 192.168.71.102 6379
slave2
node03 192.168.71.103 6379

哨兵節點

sentinel1
192.168.71.101 26379
sentinel2
192.168.71.102 26379
sentinel3
192.168.71.103 26379

在這裏插入圖片描述

哨兵配置

開啓守護進程

daemonize yes

關閉保護模式

protected-mode no

指定監聽主服務器名稱、ip、port和幾個sentinel檢測異常執行故障轉移

#mymaster是自定義的,因爲我是三哨兵,所以指定當有2個哨兵檢測到異常才執行故障轉移
sentinel monitor mymaster 192.168.71.102 6379 2

指定監聽服務器密碼

#注意這個步驟必須在指定監聽服務器名稱後面,不然會報不知道mymaster
sentinel auth-pass mymaster 123456

其他配置使用默認配置

端口

port 26379

指定sentinel判定master斷線時長

sentinel down-after-milliseconds mymaster 30000

指定故障切換超時時長

sentinel failover-timeout mymaster 900000

指定sentinel日誌文件

logfile "/opt/redis/log/sentinel.log"

三臺哨兵的配置都是一樣的,配置完成後,分別啓動三臺機子的redis服務進程和sentinel服務進程

#啓動redis服務進程
./redis-server ../redis.conf
#啓動sentinel服務進程
./redis-server ../sentinel.conf --sentinel
#或者
./redis-sentinel ../sentinel.conf

打開192.168.71.101節點的sentinel日誌文件查看有以下內容

[root@node03 log]# tail -20 sentinel.log 
10656:X 17 Jun 14:00:43.355 * Running mode=sentinel, port=26379.
10656:X 17 Jun 14:00:43.356 # Sentinel ID is 69eba2364497f8ea68131787de656207cec5ee0e
10656:X 17 Jun 14:00:43.356 # +monitor master mymaster 192.168.71.101 6379 quorum 2
10656:X 17 Jun 14:00:43.356 * +slave slave 192.168.71.102:6379 192.168.71.102 6379 @ mymaster 192.168.71.101 6379
10656:X 17 Jun 14:00:43.372 * +slave slave 192.168.71.103:6379 192.168.71.103 6379 @ mymaster 192.168.71.101 6379
10656:X 17 Jun 14:01:10.429 * +sentinel sentinel f0fc111b6d3ad60914566d2df3b5ee592415f3e4 192.168.71.102 26379 @ mymaster 192.168.71.101 6379
10656:X 17 Jun 14:01:26.347 * +sentinel sentinel d445b01ec9d79f90fe9f3d0377906be2290399f3 192.168.71.103 26379 @ mymaster 192.168.71.101 6379

打開192.168.71.102節點的sentinel日誌文件查看有以下內容

[root@node03 log]# tail -20 sentinel.log 
6254:X 17 Jun 14:01:34.097 * Running mode=sentinel, port=26379.
6254:X 17 Jun 14:01:34.098 # Sentinel ID is f0fc111b6d3ad60914566d2df3b5ee592415f3e4
6254:X 17 Jun 14:01:34.098 # +monitor master mymaster 192.168.71.101 6379 quorum 2
6254:X 17 Jun 14:01:34.099 * +slave slave 192.168.71.102:6379 192.168.71.102 6379 @ mymaster 192.168.71.101 6379
6254:X 17 Jun 14:01:34.118 * +slave slave 192.168.71.103:6379 192.168.71.103 6379 @ mymaster 192.168.71.101 6379
6254:X 17 Jun 14:01:35.644 * +sentinel sentinel 69eba2364497f8ea68131787de656207cec5ee0e 192.168.71.101 26379 @ mymaster 192.168.71.101 6379
6254:X 17 Jun 14:01:52.041 * +sentinel sentinel d445b01ec9d79f90fe9f3d0377906be2290399f3 192.168.71.103 26379 @ mymaster 192.168.71.101 6379

打開192.168.71.103節點的sentinel日誌文件查看有以下內容

[root@node03 log]# tail -20 sentinel.log 
3798:X 18 Jun 03:43:30.475 * Running mode=sentinel, port=26379.
3798:X 18 Jun 03:43:30.475 # Sentinel ID is d445b01ec9d79f90fe9f3d0377906be2290399f3
3798:X 18 Jun 03:43:30.475 # +monitor master mymaster 192.168.71.101 6379 quorum 2
3798:X 18 Jun 03:43:30.476 * +slave slave 192.168.71.102:6379 192.168.71.102 6379 @ mymaster 192.168.71.101 6379
3798:X 18 Jun 03:43:30.486 * +slave slave 192.168.71.103:6379 192.168.71.103 6379 @ mymaster 192.168.71.101 6379
3798:X 18 Jun 03:43:30.769 * +sentinel sentinel f0fc111b6d3ad60914566d2df3b5ee592415f3e4 192.168.71.102 26379 @ mymaster 192.168.71.101 6379
3798:X 18 Jun 03:43:32.396 * +sentinel sentinel 69eba2364497f8ea68131787de656207cec5ee0e 192.168.71.101 26379 @ mymaster 192.168.71.101 6379

驗證高可用

手動kill掉master 192.168.71.101節點的redis服務進程

[root@node01 log]# ps -ef|grep redis
root      10644      1  0 13:56 ?        00:00:00 src/redis-server 0.0.0.0:6379
root      10656  10545  0 14:00 pts/1    00:00:00 ./redis-server *:26379 [sentinel]       
root      10695  10676  0 14:05 pts/0    00:00:00 grep redis
[root@node01 log]# kill -9 10644

30s後觀察192.168.71.102和192.168.71.103兩臺sentinel日誌文件變化,這個30s就是上面指定sentinel判定master斷線的時長

sentinel down-after-milliseconds mymaster 30000

可以看到sentinel在投票選舉新的master,並會自動修改redis.conf和sentinel.conf文件保證集羣的高可用。

192.168.71.101節點的sentinel日誌

[root@node01 log]# tail -f sentinel.log 
10656:X 17 Jun 14:01:10.429 * +sentinel sentinel f0fc111b6d3ad60914566d2df3b5ee592415f3e4 192.168.71.102 26379 @ mymaster 192.168.71.101 6379
10656:X 17 Jun 14:01:26.347 * +sentinel sentinel d445b01ec9d79f90fe9f3d0377906be2290399f3 192.168.71.103 26379 @ mymaster 192.168.71.101 6379
10656:X 17 Jun 14:06:36.683 # +sdown master mymaster 192.168.71.101 6379
10656:X 17 Jun 14:06:36.827 # +new-epoch 1
10656:X 17 Jun 14:06:36.830 # +vote-for-leader d445b01ec9d79f90fe9f3d0377906be2290399f3 1
10656:X 17 Jun 14:06:37.309 # +config-update-from sentinel d445b01ec9d79f90fe9f3d0377906be2290399f3 192.168.71.103 26379 @ mymaster 192.168.71.101 6379
10656:X 17 Jun 14:06:37.310 # +switch-master mymaster 192.168.71.101 6379 192.168.71.102 6379
10656:X 17 Jun 14:06:37.310 * +slave slave 192.168.71.103:6379 192.168.71.103 6379 @ mymaster 192.168.71.102 6379
10656:X 17 Jun 14:06:37.310 * +slave slave 192.168.71.101:6379 192.168.71.101 6379 @ mymaster 192.168.71.102 6379
10656:X 17 Jun 14:07:07.316 # +sdown slave 192.168.71.101:6379 192.168.71.101 6379 @ mymaster 192.168.71.102 6379

192.168.71.102節點的sentinel日誌

6254:X 17 Jun 14:07:02.426 # +sdown master mymaster 192.168.71.101 6379
6254:X 17 Jun 14:07:02.519 # +new-epoch 1
6254:X 17 Jun 14:07:02.524 # +vote-for-leader d445b01ec9d79f90fe9f3d0377906be2290399f3 1
6254:X 17 Jun 14:07:02.526 # +odown master mymaster 192.168.71.101 6379 #quorum 2/2
6254:X 17 Jun 14:07:02.526 # Next failover delay: I will not start a failover before Mon Jun 17 14:37:03 2019
6254:X 17 Jun 14:07:03.004 # +config-update-from sentinel d445b01ec9d79f90fe9f3d0377906be2290399f3 192.168.71.103 26379 @ mymaster 192.168.71.101 6379
6254:X 17 Jun 14:07:03.004 # +switch-master mymaster 192.168.71.101 6379 192.168.71.102 6379
6254:X 17 Jun 14:07:03.004 * +slave slave 192.168.71.103:6379 192.168.71.103 6379 @ mymaster 192.168.71.102 6379
6254:X 17 Jun 14:07:03.004 * +slave slave 192.168.71.101:6379 192.168.71.101 6379 @ mymaster 192.168.71.102 6379
6254:X 17 Jun 14:07:33.052 # +sdown slave 192.168.71.101:6379 192.168.71.101 6379 @ mymaster 192.168.71.102 6379

192.168.71.103節點的sentinel日誌

3798:X 18 Jun 03:48:42.871 # +sdown master mymaster 192.168.71.101 6379
3798:X 18 Jun 03:48:42.943 # +odown master mymaster 192.168.71.101 6379 #quorum 3/2
3798:X 18 Jun 03:48:42.943 # +new-epoch 1
3798:X 18 Jun 03:48:42.943 # +try-failover master mymaster 192.168.71.101 6379
3798:X 18 Jun 03:48:42.945 # +vote-for-leader d445b01ec9d79f90fe9f3d0377906be2290399f3 1
3798:X 18 Jun 03:48:42.952 # f0fc111b6d3ad60914566d2df3b5ee592415f3e4 voted for d445b01ec9d79f90fe9f3d0377906be2290399f3 1
3798:X 18 Jun 03:48:42.952 # 69eba2364497f8ea68131787de656207cec5ee0e voted for d445b01ec9d79f90fe9f3d0377906be2290399f3 1
3798:X 18 Jun 03:48:43.001 # +elected-leader master mymaster 192.168.71.101 6379
3798:X 18 Jun 03:48:43.001 # +failover-state-select-slave master mymaster 192.168.71.101 6379
3798:X 18 Jun 03:48:43.067 # +selected-slave slave 192.168.71.102:6379 192.168.71.102 6379 @ mymaster 192.168.71.101 6379
3798:X 18 Jun 03:48:43.067 * +failover-state-send-slaveof-noone slave 192.168.71.102:6379 192.168.71.102 6379 @ mymaster 192.168.71.101 6379
3798:X 18 Jun 03:48:43.168 * +failover-state-wait-promotion slave 192.168.71.102:6379 192.168.71.102 6379 @ mymaster 192.168.71.101 6379
3798:X 18 Jun 03:48:43.324 # +promoted-slave slave 192.168.71.102:6379 192.168.71.102 6379 @ mymaster 192.168.71.101 6379
3798:X 18 Jun 03:48:43.324 # +failover-state-reconf-slaves master mymaster 192.168.71.101 6379
3798:X 18 Jun 03:48:43.423 * +slave-reconf-sent slave 192.168.71.103:6379 192.168.71.103 6379 @ mymaster 192.168.71.101 6379
3798:X 18 Jun 03:48:44.064 # -odown master mymaster 192.168.71.101 6379
3798:X 18 Jun 03:48:44.354 * +slave-reconf-inprog slave 192.168.71.103:6379 192.168.71.103 6379 @ mymaster 192.168.71.101 6379
3798:X 18 Jun 03:48:44.354 * +slave-reconf-done slave 192.168.71.103:6379 192.168.71.103 6379 @ mymaster 192.168.71.101 6379
3798:X 18 Jun 03:48:44.444 # +failover-end master mymaster 192.168.71.101 6379
3798:X 18 Jun 03:48:44.444 # +switch-master mymaster 192.168.71.101 6379 192.168.71.102 6379
3798:X 18 Jun 03:48:44.444 * +slave slave 192.168.71.103:6379 192.168.71.103 6379 @ mymaster 192.168.71.102 6379
3798:X 18 Jun 03:48:44.444 * +slave slave 192.168.71.101:6379 192.168.71.101 6379 @ mymaster 192.168.71.102 6379
3798:X 18 Jun 03:49:14.487 # +sdown slave 192.168.71.101:6379 192.168.71.101 6379 @ mymaster 192.168.71.102 6379

從日誌可以看出最後新投票選的master是192.168.71.102節點,這時再去啓動老master 192.168.71.101的redis服務,哨兵會將192.168.71.101轉成192.168.71.102的slave,從192.168.71.102 sentinel日誌可以看到信息

[root@node02 log]# tail -f sentinel.log 
6254:X 17 Jun 14:07:02.426 # +sdown master mymaster 192.168.71.101 6379
6254:X 17 Jun 14:07:02.519 # +new-epoch 1
6254:X 17 Jun 14:07:02.524 # +vote-for-leader d445b01ec9d79f90fe9f3d0377906be2290399f3 1
6254:X 17 Jun 14:07:02.526 # +odown master mymaster 192.168.71.101 6379 #quorum 2/2
6254:X 17 Jun 14:07:02.526 # Next failover delay: I will not start a failover before Mon Jun 17 14:37:03 2019
6254:X 17 Jun 14:07:03.004 # +config-update-from sentinel d445b01ec9d79f90fe9f3d0377906be2290399f3 192.168.71.103 26379 @ mymaster 192.168.71.101 6379
6254:X 17 Jun 14:07:03.004 # +switch-master mymaster 192.168.71.101 6379 192.168.71.102 6379
6254:X 17 Jun 14:07:03.004 * +slave slave 192.168.71.103:6379 192.168.71.103 6379 @ mymaster 192.168.71.102 6379
6254:X 17 Jun 14:07:03.004 * +slave slave 192.168.71.101:6379 192.168.71.101 6379 @ mymaster 192.168.71.102 6379
6254:X 17 Jun 14:07:33.052 # +sdown slave 192.168.71.101:6379 192.168.71.101 6379 @ mymaster 192.168.71.102 6379
6254:X 17 Jun 18:14:50.840 # -sdown slave 192.168.71.101:6379 192.168.71.101 6379 @ mymaster 192.168.71.102 6379
6254:X 17 Jun 18:15:00.777 * +convert-to-slave slave 192.168.71.101:6379 192.168.71.101 6379 @ mymaster 192.168.71.102 6379
6254:X 17 Jun 18:15:06.193 # +sdown sentinel 69eba2364497f8ea68131787de656207cec5ee0e 192.168.71.101 26379 @ mymaster 192.168.71.102 6379
6254:X 17 Jun 18:16:17.556 # -sdown sentinel 69eba2364497f8ea68131787de656207cec5ee0e 192.168.71.101 26379 @ mymaster 192.168.71.102 6379

與springboot實戰

github地址

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