1. 程式人生 > 實用技巧 >sentinel實戰

sentinel實戰

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