redis-sentienl哨兵
- 1.簡介
- 1.1sentinel 架構
- 2.主從配置
- 3.sentinel配置
- 3.測驗
- 4.總結
1.簡介
凌晨2點,你睡得正香,老板就突然打電話過來說,redis服務器炸了,網站癱瘓了!你不得不起床打開電腦開始苦逼的解決問題:重新配置redis,把專案的redis的地址切換到從節點的redis,然后重新打包專案,部署等一系列困擾你睡美夢的操作,然而,如果你配置redis哨兵,這一切將不會發生,你還可以繼續睡你的美夢,
1.1sentinel 架構
三個哨兵充當對redis實體的實時監控,如果主節點掛掉,哨兵察覺到后立即在兩個從節點中選舉新的master,當掛掉的主節點恢復正常后,充當新master的從節點,

2.主從配置
你需要有三個redis實體,一個主節點和兩個從節點
關于主從同步的配置可以看我的這篇博客
注意:我的redis是5版本的
redis主從復制
3.sentinel配置
在每一份redis實體上創建一份組態檔,在單機環境中,確保埠唯一即可(其他的配置不需要動)
#啟動埠
port 26379
#監控主節點redis 服務名 ip和埠 當兩個哨兵覺得主節點不可用時主節點下線
sentinel monitor mymaster 主節點redis的ip 埠 2
#5秒內主節點沒有回應認定為掛掉了
sentinel down-after-milliseconds mymaster 5000
#選舉另一個master超時時間
sentinel failover-timeout mymaster 60000
#選舉中 最多有一個從節點同步主節點
sentinel parallel-syncs mymaster 1
ok,現在我們的整個環境搭建,三個redis實體和三個sentinel實體,我是在單機的centos環境下測驗,在這里請各位讀者十分的注意自己的ip和埠避免弄錯! 我這里使用的外網的ip,你可以用內網本地ip即可,
| 實體 | ip:port |
|---|---|
| redis1 | 192.168.72.134:6379 |
| redis2 | 192.168.72.134:6380 |
| redis3 | 192.168.72.134:6381 |
| sentinel1 | 192.168.72.134:26379 |
| sentinel2 | 192.168.72.134:26380 |
| sentinel3 | 192.168.72.134:26381 |
我們打開主節點redis實體客戶端 查看具體資訊
[root@localhost redis-5.0.3]# redis
127.0.0.1:6379> info replication
# Replication
#角色是master 其他從節點為salve
role:master
connected_slaves:2
#可以看到下面兩個從節點實體 如果你的沒有 請務必檢查自己的操作步驟
slave0:ip=192.168.72.134,port=6381,state=online,offset=28,lag=1
slave1:ip=192.168.72.134,port=6380,state=online,offset=28,lag=1
master_replid:7387ff36c2ebcf7d1440e07c5cc006c96ae414c3
master_replid2:0000000000000000000000000000000000000000
master_repl_offset:42
second_repl_offset:-1
repl_backlog_active:1
repl_backlog_size:1048576
repl_backlog_first_byte_offset:1
repl_backlog_histlen:42
我們啟動三個哨兵實體,如下圖

啟動任一sentinel客戶端,查看其資訊
[root@localhost redis-5.0.3]# redis-cli -p 26379
127.0.0.1:26379> sentinel master mymaster
1) "name"
2) "mymaster"
3) "ip"
4) "192.168.72.134"
5) "port"
6) "6379"
7) "runid"
8) "f51aee2ec220f0f662c248542bf9d03c86cc3834"
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) "514"
19) "last-ping-reply"
20) "514"
21) "down-after-milliseconds"
22) "5000"
23) "info-refresh"
24) "1239"
25) "role-reported"
26) "master"
27) "role-reported-time"
28) "121624"
29) "config-epoch"
30) "4"
31) "num-slaves"
32) "2"
33) "num-other-sentinels"
34) "2"
35) "quorum"
36) "2"
37) "failover-timeout"
38) "180000"
39) "parallel-syncs"
40) "1"
可以看到num-slaves和num-other-sentinels都是2,前者是從節點數量,后者是關聯的哨兵數量,如果你的引數例外,請檢查你的操作步驟,
3.測驗
查看當前的master
顯然是我們前面哨兵配置中監聽的主節點
127.0.0.1:26379> SENTINEL get-master-addr-by-name mymaster
1) "192.168.72.134"
2) "6379"
宕機測驗:
現在我們關閉redis 6379實體30秒
redis-cli -p 6379 DEBUG sleep 30
再查看主節點時發現已經切換6380埠的redis實體
127.0.0.1:26379> SENTINEL get-master-addr-by-name mymaster
1) "192.168.72.134"
2) "6380"
6379實體恢復時,我們可以看到它變成了從節點
127.0.0.1:6379> info replication
# Replication
role:slave
master_host:192.168.72.134
master_port:6380
master_link_status:up
master_last_io_seconds_ago:0
master_sync_in_progress:0
slave_repl_offset:415421
slave_priority:100
slave_read_only:1
connected_slaves:0
master_replid:c6eba63129405a3f0fe2786b974fa2048179bafd
master_replid2:0000000000000000000000000000000000000000
master_repl_offset:415421
second_repl_offset:-1
repl_backlog_active:1
repl_backlog_size:1048576
repl_backlog_first_byte_offset:393523
repl_backlog_histlen:21899
4.總結
本次教程就到此結束,請讀者嚴格按照每一步操作來,避免踩坑,
當你再打開redis的組態檔查看最底部時,你會發現其中的主從配置ip和埠已經被sentinel動態的修改,每一次的宕機,sentinel都會對組態檔進行動態的修改,
如果此篇文章對你有用,不妨點個贊吧!一起加油
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/169963.html
標籤:其他
上一篇:我們與微服務的糾纏的這些年
下一篇:微服務架構的九大特性
