第1章 环境说明:
1.1系统版本:
cat /etc/redhat-release CentOS Linux release 7.4.1708 (Core)
1.2redis主从:
10.3.7.22:7001-主 10.3.7.25:7001-从 10.3.7.28:7001-从
1.3哨兵:
10.3.7.22:6800 10.3.7.25:6800 10.3.7.28:6800
1.4VIP
10.3.11.11
第2章 搭建redis主从模式
yum安装redis后修改下配置文件即可,这里redis主从的搭建就不粘贴了
第3章 配置redis-sentinel模式
三个节点的配置,只要保证sentinel myid不同即可,按照这个配置文件应该是可以的,哨兵的配置文件比较坑,网上看了好多资料,结果启动都是报错,我贴的这个可以试试,应该不会,如果报错logsfile不存在的话记得touch一下
cat /etc/redis-sentinel.conf
port 6800
bind 0.0.0.0
daemonize yes
pidfile "/var/run/redis-sentinel.pid"
logfile "/var/log/redis/sentinel.log"
dir "/tmp"
sentinel myid 82aab24bc703376697a7893302d6096e60766483
sentinel monitor mymaster 10.3.7.22 7001 2
sentinel down-after-milliseconds mymaster 5000
sentinel failover-timeout mymaster 15000
sentinel client-reconfig-script mymaster /opt/notify_master6800.sh
sentinel auth-pass mymaster kkQZ4_JkjcZN
第4章 配置vip自动漂移的执行脚本:
4.1下面的LOCAL_IP改成每个节点自己的ip
cat /opt/notify_master6800.sh
#!/bin/bash
MASTER_IP=$6
LOCAL_IP='10.3.7.22'
NETMASK='24'
INTERFACE='eth0'
VIP='10.3.11.11'
if [ ${MASTER_IP} = ${LOCAL_IP} ];then
ip addr add ${VIP}/${NETMASK} dev ${INTERFACE}
arping -c 1 -I ${INTERFACE} -U ${VIP}
exit 0
else
ip addr del ${VIP}/${NETMASK} dev ${INTERFACE}
exit 0
fi
exit 1
4.2遇到问题
脚本配置好以后应该检查下是否可以正常执行,因为我在第一次模拟故障的时候发现vip没有飘逸,手动执行脚本后发现以下报错:
-bash: $'\302\240ip': command not found
由于之前的脚本是我在网上复制下来的,怀疑字符集有问题,于是删除脚本,干脆手敲了一遍,再次模拟故障,vip切换成功
4.3脚本参数说明:
client-reconfig-script:这个参数配置执行脚本,sentinel在做failover的时候会执行这个脚本,并且传递6个参数<master-name>、<role>、<state>、<from-ip>、<from-port>、<to-ip> 、<to-port>,其中<to-ip>是新主redis的IP地址,可以在这个脚本里做VIP漂移操作,脚本编写好以后,可以自己加上以上六个参数执行脚本,检查是否有问题
第5章 查看所有节点哨兵状态
每个节点均看到以下输出即可
# redis-cli -h 10.3.7.22 -p 6800 info sentinel
# Sentinel
sentinel_masters:1
sentinel_tilt:0
sentinel_running_scripts:8
sentinel_scripts_queue_length:0
sentinel_simulate_failure_flags:0
master0:name=mymaster,status=ok,address=10.3.7.22:7001,slaves=2,sentinels=3
第6章 绑定vip到redis主服务器
6.1我的vip是腾讯上买的,因为服务器是腾讯云的服务器
手动将vip绑定到主服务器上,因为是第一次绑定,后面故障的话回自动进行切换
ip addr add 10.3.11.11/24 dev eth0
arp抑制
/usr/sbin/arping -c 1 -I eth0 -U 10.3.11.11
配置好vip以后,需要查看redis服务绑定的端口是否为0.0.0.0,即redis配置文件中bind是否为全部绑定
第7章 通过vip连接进行测试
查看redis集群状态
redis-cli -h 10.3.11.11 -p 7001 -a kkQZ4_JkjcZN info replication
# Replication
role:master
connected_slaves:2
slave0:ip=10.3.7.25,port=7001,state=online,offset=84533,lag=0
slave1:ip=10.3.7.28,port=7001,state=online,offset=84533,lag=0
master_repl_offset:84533
repl_backlog_active:1
repl_backlog_size:1048576
repl_backlog_first_byte_offset:2
repl_backlog_histlen:84532
查看sentinel状态
redis-cli -h 10.3.11.11 -p 6800 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.3.7.22:7001,slaves=2,sentinels=3
第8章 故障测试:
8.1kill掉主机点的redis模拟故障
[root@test-ops-redis-mha-1 opt]# ps -ef |grep redis
redis 9758 1 0 17:21 ? 00:00:00 /bin/redis-server 0.0.0.0:7001
root 9925 24205 0 17:23 pts/0 00:00:00 grep --color=auto redis
root 28539 1 0 14:47 ? 00:00:11 redis-sentinel 0.0.0.0:6800 [sentinel]
[root@test-ops-redis-mha-1 opt]# kill -9 9758
8.2vip已经漂移过去了
[root@test-ops-redis-mha-2 opt]# ip a
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN qlen 1
link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
inet 127.0.0.1/8 scope host lo
valid_lft forever preferred_lft forever
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc mq state UP qlen 1000
link/ether 52:54:00:bb:87:ec brd ff:ff:ff:ff:ff:ff
inet 10.3.7.25/24 brd 10.3.7.255 scope global eth0
valid_lft forever preferred_lft forever
inet 10.3.11.11/24 scope global eth0
valid_lft forever preferred_lft forever
8.3连接vip测试
[root@test-ops-redis-mha-1 opt]# redis-cli -h 10.3.11.11 -p 7001 -a kkQZ4_JkjcZN info replication
# Replication
role:master
connected_slaves:1
slave0:ip=10.3.7.28,port=7001,state=online,offset=5628,lag=0
master_repl_offset:5764
repl_backlog_active:1
repl_backlog_size:1048576
repl_backlog_first_byte_offset:2
repl_backlog_histlen:5763
转载于:https://blog.51cto.com/13520772/2356359