centos 7.3
三臺機器:
192-168-1-103 10.36.8.223 主 sentinel
192-168-1-102 10.36.8.109 從 sentinel
192-168-1-104 10.36.8.108 從 sentinelredis
安裝:
yum -y install redis
cp /etc/redis.conf{,.bak}
cp /etc/redis-sentinel.conf{,.bak}
redis配置:
主:
bind 0.0.0.0 #綁定地址
protected-mode no
port 6379 #端口
daemonize yes #以守護進程的方式在後臺啓動
pidfile "/var/run/redis_6379.pid" #進程文件
loglevel notice #日誌等級
logfile "/var/log/redis/redis.log" #日誌輸出位置
dbfilename "dump.rdb" #持久化方式
dir "/var/lib/redis" #保存位置
masterauth "123456" #主從作切換時認證須要用到,當此節點成爲主節點是有用,因此全部節點都配置
requirepass "123456" #本地認證密碼
從:多加一個這個配置
slaveof 10.36.8.222 6379
啓動:
systemctl start redis.servicevim
驗證:
netstat -tnlp
redis-cli -a 123456 info replication #查看主從狀態信息
[root@host-192-168-1-103 ~]# redis-cli -p 6379 -a 123456 info replication
# Replication
role:master
connected_slaves:2
slave0:ip=10.36.8.109,port=6379,state=online,offset=125452,lag=0
slave1:ip=10.36.8.108,port=6379,state=online,offset=125313,lag=1
master_repl_offset:125452
repl_backlog_active:1
repl_backlog_size:1048576
repl_backlog_first_byte_offset:2
repl_backlog_histlen:125451centos
redis-sentinel配置:
protected-mode no
daemonize yes
bind 0.0.0.0
port 26379
dir "/tmp"
sentinel monitor mymaster 10.36.8.222 6379 2 #mymaster做爲master的別名,後面綁定master的ip和端口,2根據節點數來設置,這裏表示當超過兩個節點都贊成master斷了才經過
sentinel auth-pass mymaster 123456 #須要監聽master的狀態,因此放在上面的後面,否則不知道mymaster是誰,同時監聽master須要認證
logfile "/var/log/redis/sentinel.log"
sentinel down-after-milliseconds mymaster 10000 若是10秒內master8000沒有響應,就認爲SDOWN
sentinel failover-timeout mymaster 15000
#全部節點配置都同樣bash
啓動:
systemctl start redis-sentinel.service
驗證:
若是日誌報
7634:X 17 Apr 11:37:46.176 # WARNING: The TCP backlog setting of 511 cannot be enforced because /proc/sys/net/core/somaxconn is set to the lower value of 128.
7634:X 17 Apr 11:37:46.176 # Sentinel ID is 36585ad02dec7a6cf5abeb499758abab3e330b98
7634:X 17 Apr 11:37:46.176 # +monitor master mymaster 10.36.8.222 6379 quorum 2
7634:X 17 Apr 11:38:16.232 # +sdown master mymaster 10.36.8.222 6379服務器
通常是是認證失敗
sentinel auth-pass mymaster 123456 必須寫在 sentinel monitor mymaster 10.36.8.222 6379 2 以後
否則 主機mymaster別名不能釋義ui
7634:X 17 Apr 11:56:50.150 # User requested shutdown...
7634:X 17 Apr 11:56:50.150 # Sentinel is now ready to exit, bye bye...
這個能夠經過sentinel是否啓動以及兩種日誌來來排查
netstat -tnlp
tail -300f /var/log/messages
redis-sentinel /etc/redis-sentinel
若成功:
[root@host-192-168-1-103 ~]# redis-cli -p 26379 info sentinel
# Sentinel
sentinel_masters:1
sentinel_tilt:0
sentinel_running_scripts:0
sentinel_scripts_queue_length:0
sentinel_simulate_failure_flags:0
master0:name=mymaster,status=ok,address=10.36.8.222:6379,slaves=2,sentinels=3spa
查看配置有變更:
[root@host-192-168-1-103 ~]# grep -v -E "^#|^$" /etc/redis-sentinel.conf
protected-mode no
daemonize yes
bind 0.0.0.0
port 26379
dir "/tmp"
sentinel myid 36585ad02dec7a6cf5abeb499758abab3e330b98 #生產的節點id
sentinel monitor mymaster 10.36.8.222 6379 2
sentinel notification-script mymaster /tmp/ceshi.sh
sentinel auth-pass mymaster 123456
sentinel config-epoch mymaster 0
logfile "/var/log/redis/sentinel.log"
sentinel leader-epoch mymaster 0
#redis節點的信息
sentinel known-slave mymaster 10.36.8.109 6379
sentinel known-slave mymaster 10.36.8.108 6379
#redis-sentinel節點信息
sentinel known-sentinel mymaster 192.168.1.102 26379 a9498fa128582873584d985b92ec4fe2fa9e1196
sentinel known-sentinel mymaster 192.168.1.104 26379 3cb4035f5564cbb8274914f1db5c0ca0bee2f940
sentinel current-epoch 0日誌
down掉主10.36.8.222:
systemctl stop redis.service
[root@host-192-168-1-103 ~]# redis-cli -a 123456 info replication
# Replication
role:master
connected_slaves:2
slave0:ip=10.36.8.108,port=6379,state=online,offset=546968,lag=1
slave1:ip=10.36.8.109,port=6379,state=online,offset=546968,lag=0
master_repl_offset:546968
repl_backlog_active:1
repl_backlog_size:1048576
repl_backlog_first_byte_offset:2
repl_backlog_histlen:546967
[root@host-192-168-1-103 ~]#
[root@host-192-168-1-103 ~]# systemctl stop redis.service
[root@host-192-168-1-103 ~]# redis-cli -a 123456 info replication
Could not connect to Redis at 127.0.0.1:6379: Connection refused
redis-sentinel在配置的時間內有指定的節點數贊成時會從新選舉
797:X 17 Apr 16:29:29.065 # +sdown master mymaster 10.36.8.222 6379
797:X 17 Apr 16:29:29.145 # +odown master mymaster 10.36.8.222 6379 #quorum 2/2
797:X 17 Apr 16:29:29.145 # +new-epoch 7
797:X 17 Apr 16:29:29.145 # +try-failover master mymaster 10.36.8.222 6379
797:X 17 Apr 16:29:29.157 # +vote-for-leader 3cb4035f5564cbb8274914f1db5c0ca0bee2f940 7
797:X 17 Apr 16:29:29.291 # 36585ad02dec7a6cf5abeb499758abab3e330b98 voted for 3cb4035f5564cbb8274914f1db5c0ca0bee2f940 7
797:X 17 Apr 16:29:29.298 # +elected-leader master mymaster 10.36.8.222 6379
797:X 17 Apr 16:29:29.298 # +failover-state-select-slave master mymaster 10.36.8.222 6379
797:X 17 Apr 16:29:29.384 # +selected-slave slave 10.36.8.109:6379 10.36.8.109 6379 @ mymaster 10.36.8.222 6379
797:X 17 Apr 16:29:29.384 * +failover-state-send-slaveof-noone slave 10.36.8.109:6379 10.36.8.109 6379 @ mymaster 10.36.8.222 6379
797:X 17 Apr 16:29:29.457 * +failover-state-wait-promotion slave 10.36.8.109:6379 10.36.8.109 6379 @ mymaster 10.36.8.222 6379
797:X 17 Apr 16:29:29.692 # +promoted-slave slave 10.36.8.109:6379 10.36.8.109 6379 @ mymaster 10.36.8.222 6379
797:X 17 Apr 16:29:29.692 # +failover-state-reconf-slaves master mymaster 10.36.8.222 6379
797:X 17 Apr 16:29:29.745 * +slave-reconf-sent slave 10.36.8.108:6379 10.36.8.108 6379 @ mymaster 10.36.8.222 6379
797:X 17 Apr 16:29:30.403 # -odown master mymaster 10.36.8.222 6379
797:X 17 Apr 16:29:30.506 * +slave-reconf-inprog slave 10.36.8.108:6379 10.36.8.108 6379 @ mymaster 10.36.8.222 6379
797:X 17 Apr 16:29:31.543 * +slave-reconf-done slave 10.36.8.108:6379 10.36.8.108 6379 @ mymaster 10.36.8.222 6379
797:X 17 Apr 16:29:31.595 # +failover-end master mymaster 10.36.8.222 6379
797:X 17 Apr 16:29:31.595 # +switch-master mymaster 10.36.8.222 6379 10.36.8.109 6379
797:X 17 Apr 16:29:31.595 * +slave slave 10.36.8.108:6379 10.36.8.108 6379 @ mymaster 10.36.8.109 6379
797:X 17 Apr 16:29:31.595 * +slave slave 10.36.8.222:6379 10.36.8.222 6379 @ mymaster 10.36.8.109 6379
由上日誌能夠指定新的master是10.36.8.109
注意點,全部Redis.conf 當中masterauth以及requirepass得提早設置好,sentinel切換的時候只會修改slaveof、sentinel monitor mymaster以及添加從節點和sentinel節點
若是認證沒有提早設置,主節點down掉以後,從新選舉的新主節點,其它從節點會由於沒法認證經過而失敗
從10.36.8.108 查看的信息:
[root@host-192-168-1-104 ~]# redis-cli -a 123456 info replication
# Replication
role:slave
master_host:10.36.8.222
master_port:6379
master_link_status:up
master_last_io_seconds_ago:0
master_sync_in_progress:0
slave_repl_offset:551027
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
[root@host-192-168-1-104 ~]# redis-cli -a 123456 info replication
# Replication
role:slave
master_host:10.36.8.109
master_port:6379
master_link_status:up
master_last_io_seconds_ago:1
master_sync_in_progress:0
slave_repl_offset:23113
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進程
當down掉的節點掛掉從新啓動時,會從新以slave的加入
vip 漂移
開啓配置
vim /etc/redis-sentinel.conf
sentinel client-reconfig-script mymaster /var/redis/notify_mymaster.ship
chmod +x /var/redis/notify_mymaster.sh
#!/usr/bin/env bash
Master_Ip=$6 #master地址
Local_Ip="10.36.8.108"
Vip="10.36.8.223"
NetMask="24"
Interface="eth0"
if [[ $Master_Ip == $Local_Ip ]];
then
/usr/sbin/ip addr add ${Vip}/${NetMask} dev ${Interface} #將VIP綁定到該服務器上
/usr/sbin/arping -q -c 3 -A ${Vip} -I ${Interface} #arp抑制
else
/usr/sbin/ip addr del ${Vip}/${NetMask} dev ${Interface} #將VIP從該服務器上刪除
exit 0
fi
exit 1
第一次配置得手動指定VIP地址 ip addr add 10.36.8.223/24 dev eth0 arping -q -c 3 -A 10.36.8.223 -I eth0