sentinel實戰
阿新 • • 發佈:2020-08-09
1.環境準備
| 角色 | 主機 | IP | 埠 |
| ---- | ---- | ----------- | ---- |
| 主庫 | db01 | 172.16.1.51 | 6379 |
| 從庫 | db02 | 172.16.1.52 | 6379 |
| 從庫 | db03 | 172.16.1.53 | 6379 |
2.恢復主從狀態
# 修復壞掉的主庫 [root@db01 ~]# redis-server /service/redis/6379/redis.conf [root@db01 ~]# redis-cli -h 172.16.1.51 172.16.1.51:6379> info replication 172.16.1.51:6379> SLAVEOF 172.16.1.52 6379 OK 172.16.1.51:6379> info replication # 主庫檢視 172.16.1.52:6379> info replication # Replication role:master connected_slaves:2 slave0:ip=172.16.1.53,port=6379,state=online,offset=4229,lag=1 slave1:ip=172.16.1.51,port=6379,state=online,offset=4229,lag=1 master_repl_offset:4229 repl_backlog_active:1 repl_backlog_size:1048576 repl_backlog_first_byte_offset:2 repl_backlog_histlen:4228
3.配置sentinel哨兵
# 建立目錄(隨便建立) [root@db01 ~]# mkdir /service/redis/26379 # 編輯sentinel配置檔案 [root@db01 ~]# vim /service/redis/26379/sentinel.conf port 26379 daemonize yes pidfile /service/redis/26379/sentinel.pid logfile /service/redis/26379/sentinel.log dir /service/redis/26379 bind 172.16.1.51 127.0.0.1 sentinel monitor mymaster 172.16.1.52 6379 1 sentinel down-after-milliseconds mymaster 5000 sentinel failover-timeout mymaster 180000 sentinel parallel-syncs mymaster 1
4.啟動sentinel
[root@db01 ~]# redis-sentinel /service/redis/26379/sentinel.conf #啟動之後配置檔案會發生改變 [root@db01 ~]# vim /service/redis/26379/sentinel.conf port 26379 daemonize yes pidfile "/service/redis/26379/sentinel.pid" logfile "/service/redis/26379/sentinel.log" dir "/service/redis/26379" bind 172.16.1.51 127.0.0.1 sentinel myid 7d430385a1269307819e5300ecf09dfbf92b46f5 sentinel monitor mymaster 172.16.1.52 6379 1 sentinel down-after-milliseconds mymaster 5000 sentinel config-epoch mymaster 0 # Generated by CONFIG REWRITE sentinel leader-epoch mymaster 0 sentinel known-slave mymaster 172.16.1.51 6379 sentinel known-slave mymaster 172.16.1.53 6379 sentinel current-epoch 0
5.停止sentinel
[root@db01 ~]# redis-cli -p 26379 shutdown
6.測試sentinel
# 關閉主庫的redis
[root@db02 ~]# redis-cli shutdown
# 檢視其它從庫主從狀態
172.16.1.51:6379> info replication
# Replication
role:master
connected_slaves:1
slave0:ip=172.16.1.53,port=6379,state=online,offset=586,lag=1
master_repl_offset:723
repl_backlog_active:1
repl_backlog_size:1048576
repl_backlog_first_byte_offset:2
repl_backlog_histlen:722
7.恢復故障節點
# 修復故障節點
[root@db02 ~]# redis-server /service/redis/6379/redis.conf
# 檢視主庫狀態
172.16.1.51:6379> info replication
# Replication
role:master
connected_slaves:2
slave0:ip=172.16.1.53,port=6379,state=online,offset=5077,lag=1
slave1:ip=172.16.1.52,port=6379,state=online,offset=5077,lag=1
master_repl_offset:5077
repl_backlog_active:1
repl_backlog_size:1048576
repl_backlog_first_byte_offset:2
repl_backlog_histlen:5076
8.sentinel管理命令(不常用)
#連線sentinel管理埠
[root@db01 ~]# redis-cli -p 26379
# 檢測狀態,返回PONG
127.0.0.1:26379> ping
PONG
# 列出所有被監視的主伺服器
127.0.0.1:26380> SENTINEL masters
# 列出所有被監視的從伺服器
127.0.0.1:26380> SENTINEL slaves mymaster
# 返回給定名字的主伺服器的IP地址和埠號
127.0.0.1:26380> SENTINEL get-master-addr-by-name mymaster
1) "172.16.1.51"
2) "6379
# 重置所有名字和給定模式
127.0.0.1:26380> SENTINEL reset mymaster
# 當主伺服器失效時,在不詢問其他Sentinel意見的情況下,強制開始一次自動故障遷移。
127.0.0.1:26380> SENTINEL failover mymaster
9.設定權重,指定主庫的優先順序
# 檢視db02的權重
172.16.1.52:6379> CONFIG GET slave-priority
1) "slave-priority"
2) "100"
# 修改db02的權重值為0
172.16.1.52:6379> CONFIG set slave-priority 0
OK
172.16.1.52:6379> CONFIG GET slave-priority
1) "slave-priority"
2) "0"
# 權重值越低越不會優先切換為主庫
# 強制開始一次自動故障遷移
127.0.0.1:26380> SENTINEL failover mymaster
# 再次檢視,主庫為db03
172.16.1.53:6379> info replication
# Replication
role:master
connected_slaves:2
slave0:ip=172.16.1.52,port=6379,state=online,offset=71377,lag=0
slave1:ip=172.16.1.51,port=6379,state=online,offset=71377,lag=0
master_repl_offset:71514
repl_backlog_active:1
repl_backlog_size:1048576
repl_backlog_first_byte_offset:70496
repl_backlog_histlen:1019