1. 程式人生 > >Redis Sentinel主從複製自動切換方案

Redis Sentinel主從複製自動切換方案

一、準備環境
#配置環境:
Redis Sentinel:192.68.40.16:26379
Redis server主:192.168.40.17:6379
Redis server從:192.168.40.18:6380
#檢視主伺服器狀態:
[[email protected] ~]# redis-cli -p 6379 -a pwd123 info Replication
# Replication
role:master
connected_slaves:1
slave0:ip=127.0.0.1,port=6380,state=online,offset=27794,lag=0
master_repl_offset:27794
repl_backlog_active:1
repl_backlog_size:1048576
repl_backlog_first_byte_offset:2
repl_backlog_histlen:27793
You have new mail in /var/spool/mail/root
#檢視從伺服器狀態
[
[email protected]
~]# redis-cli -p 6380 -a pwd123 info Replication
# Replication
role:slave
master_host:127.0.0.1
master_port:6379
master_link_status:up
master_last_io_seconds_ago:2
master_sync_in_progress:0
slave_repl_offset:29162
slave_priority:100
slave_read_only:1
connected_slaves:0
master_repl_offset:0
repl_backlog_active:0
repl_backlog_size:1048576
repl_backlog_first_byte_offset:0
repl_backlog_histlen:0
二、搭建sentinel哨兵服務
#啟動Redis Sentinel
#Sentinel的配置檔案為sentinel.conf,複製一下配置,修改IP地址即可
[
[email protected]
~]# vim /etc/redis/sentinel.conf
#sentinel例項監聽的埠
port 26379
#守護程序模式
daemonize yes
#指明日誌檔名
logfile "./sentinel1.log"
#工作路徑,sentinel一般指定/tmp比較簡單
dir ./
#master1
#哨兵監控這個master,在至少quorum個哨兵例項都認為master down後把master標記為odown
#(objective down客觀down;相對應的存在sdown,subjective down,主觀down)狀態。
#slaves是自動發現,所以你沒必要明確指定slaves。
sentinel monitor master1 192.168.40.17 6379 1
# master或slave多長時間(預設30秒)不能使用後標記為s_down狀態。
sentinel down-after-milliseconds master1 1500
#若sentinel在該配置值內未能完成failover操作(即故障時master/slave自動切換),則認為本次failover失敗。
sentinel failover-timeout master1 10000
#設定master和slaves驗證密碼
sentinel auth-pass master1 pwd123 


[
[email protected]
~]# redis-server /etc/redis/sentinel.conf --sentinel &
[1] 19296
#在sentinel中檢視redis主從資訊
[[email protected] ~]# redis-cli -p 26379
127.0.0.1:26379> info Sentinel
# Sentinel
sentinel_masters:1
sentinel_tilt:0
sentinel_running_scripts:0
sentinel_scripts_queue_length:0
master0:name=master1,status=ok,address=192.168.40.17:6379,slaves=3,sentinels=1 
#在sentinel中檢視所監控道的master和slave
127.0.0.1:26379> SENTINEL masters
1)  1) "name"
    2) "master1"
    3) "ip"
    4) "192.168.40.17"
    5) "port"
    6) "6379"
    7) "runid"
    8) "91399b3205a9061a5f1aa306692886f200374e90"
    9) "flags"
   10) "master"
   11) "pending-commands"
   12) "0"
   13) "last-ok-ping-reply"
   14) "898"
   15) "last-ping-reply"
   16) "898"
   17) "info-refresh"
   18) "5019"
   19) "role-reported"
   20) "master"
   21) "role-reported-time"
   22) "266970"
   23) "config-epoch"
   24) "0"
   25) "num-slaves"
   26) "1"
   27) "num-other-sentinels"
   28) "0"
   29) "quorum"
   30) "1"
   31) "down-after-milliseconds"
   32) "1500"
   33) "failover-timeout"
   34) "10000"
   35) "parallel-syncs"
   36) "1"
127.0.0.1:26379> SENTINEL slaves master1
    1) "name"
    2) "192.168.40.18:6380"
    3) "ip"
    4) "192.168.40.18"
    5) "port"
    6) "6380"
    7) "runid"
    8) "7087b2cf81bcb53da6603ed5d7bc6509a632d11a"
    9) "flags"
   10) "slave"
   11) "pending-commands"
   12) "0"
   13) "last-ok-ping-reply"
   14) "843"
   15) "last-ping-reply"
   16) "842"
   17) "info-refresh"
   18) "7765"
   19) "role-reported"
   20) "slave"
   21) "role-reported-time"
   22) "88238"
   23) "master-link-down-time"
   24) "0"
   25) "master-link-status"
   26) "ok"
   27) "master-host"
   28) "192.168.40.17"
   29) "master-port"
   30) "6379"
   31) "slave-priority"
   32) "100"
   33) "slave-repl-offset"
   34) "6114"
#檢視當前Master
127.0.0.1:26379> SENTINEL get-master-addr-by-name master1
1) "192.168.40.17"
2) "6379"
三、驗證:
#停止主伺服器
[[email protected] ~]# kill -9 2793
#登陸sentinel檢視6380從伺服器已經自動轉為主伺服器
[[email protected] ~]# redis-cli -p 26379
127.0.0.1:26379> SENTINEL get-master-addr-by-name master1
1) "127.0.0.1"
2) "6380"
#6379主伺服器轉為從伺服器,狀態為down
127.0.0.1:26379>  SENTINEL slaves master1
1)  1) "name"
    2) "127.0.0.1:6379"
    3) "ip"
    4) "127.0.0.1"
    5) "port"
    6) "6379"
    7) "runid"
    8) ""
    9) "flags"
   10) "s_down,slave,disconnected"
   11) "pending-commands"
   12) "0"
   13) "last-ok-ping-reply"
   14) "47310"
   15) "last-ping-reply"
   16) "47310"
   17) "s-down-time"
   18) "45778"
   19) "info-refresh"
   20) "1488253183255"
   21) "role-reported"
   22) "slave"
   23) "role-reported-time"
   24) "47310"
   25) "master-link-down-time"
   26) "0"
   27) "master-link-status"
   28) "err"
   29) "master-host"
   30) "?"
   31) "master-port"
   32) "0"
   33) "slave-priority"
   34) "100"
   35) "slave-repl-offset"
   36) "0"
#/etc/redis/6379.conf配置檔案自動增加slaveof 127.0.0.1 6380
#/etc/redis/6380.conf配置檔案裡面的slaveof 127.0.0.1 6379自動消失
#如果需要將6379在此變為主伺服器,需要手動更改slaveof配置即可。