redis高可用:keepalived+redis
具备的条件:部署好 【Redis Master-Slave + Keepalived 】 Keepalived安装、Tengine+Keepalived部署手册
1.先验证redis主从
分别在139主140从 开启redis服务cd /usr/local/redis/redis-5.0.5 执行命令 ./src/redis-server /usr/local/redis/conf/redis.conf之后执行客户端命令./src/redis-cli
2.主从公共脚本 在139主和140从 /etc/keepalived/新建scripts
2.1Redis监控脚本
/etc/keepalived/srcipts/check_redis.sh
#!/bin/bash
CHECK=`/usr/local/redis/redis-5.0.5/src/redis-cli PING`
if [ "$CHECK" == "PONG" ] ;then
echo $CHECK
exit 0
else
echo $CHECK
service keepalived stop #可确保让出MASTER
exit 1
Fi
2.2redis_fault.sh 和 redis_redis_stop.sh
vim /etc/keepalived/scripts/redis_fault.sh
#!/bin/bash
LOGFILE=/usr/local/redis/logs/keepalived-redis-state.log
echo "[fault]" >> $LOGFILE
date >> $LOGFILE
vim /etc/keepalived/scripts/redis_stop.sh
#!/bin/bash
LOGFILE=/usr/local/redis/logs/keepalived-redis-state.log
echo "[stop]" >> $LOGFILE
date >> $LOGFILE
3.3 keepalived scripts for redis
在redis主139配置:
vim/etc/keepalived/scripts/redis_master.sh
#!/bin/bash
REDISCLI="/usr/local/redis/redis-5.0.5/src/redis-cli"
LOGFILE="/usr/local/redis/logs/keepalived-redis-state.log"
echo "[master]" >> $LOGFILE
date >> $LOGFILE
echo "Being master...." >> $LOGFILE 2>&1
echo "Run SLAVEOF cmd ..." >> $LOGFILE
$REDISCLI SLAVEOF 172.168.2.140 6379 >> $LOGFILE 2>&1
sleep 10 #延迟10秒以后待数据同步完成后再取消同步状态
echo "Run SLAVEOF NO ONE cmd ..." >> $LOGFILE
$REDISCLI SLAVEOF NO ONE >> $LOGFILE 2>&1
vim /etc/keepalived/scripts/redis_backup.sh
#!/bin/bash
REDISCLI="/usr/local/redis/redis-5.0.5/src/redis-cli"
LOGFILE="/usr/local/redis/logs/keepalived-redis-state.log"
echo "[backup]" >> $LOGFILE
date >> $LOGFILE
echo "Being slave...." >> $LOGFILE 2>&1
sleep 15 #延迟15秒待数据被对方同步完成之后再切换主从角色
echo "Run SLAVEOF cmd ..." >> $LOGFILE
$REDISCLI SLAVEOF 172.30.1.140 6379 >> $LOGFILE 2>&1
在reids从140配置:
vim/etc/keepalived/scripts/redis_master.sh
#!/bin/bash
REDISCLI="/usr/local/redis/redis-5.0.5/src/redis-cli"
LOGFILE="/usr/local/redis/logs/keepalived-redis-state.log"
echo "[master]" >> $LOGFILE
date >> $LOGFILE
echo "Being master...." >> $LOGFILE 2>&1
echo "Run SLAVEOF cmd ..." >> $LOGFILE
$REDISCLI SLAVEOF 172.168.2.139 6379 >> $LOGFILE 2>&1
sleep 10 #延迟10秒以后待数据同步完成后再取消同步状态
echo "Run SLAVEOF NO ONE cmd ..." >> $LOGFILE
$REDISCLI SLAVEOF NO ONE >> $LOGFILE 2>&1
vim /etc/keepalived/scripts/redis_backup.sh
#!/bin/bash
REDISCLI="/usr/local/redis/redis-5.0.5/src/redis-cli"
LOGFILE="/usr/local/redis/logs/keepalived-redis-state.log"
echo "[backup]" >> $LOGFILE
date >> $LOGFILE
echo "Being slave...." >> $LOGFILE 2>&1
sleep 15 #延迟15秒待数据被对方同步完成之后再切换主从角色
echo "Run SLAVEOF cmd ..." >> $LOGFILE
$REDISCLI SLAVEOF 172.30.1.139 6379 >> $LOGFILE 2>&1
3.4配置keepalived.conf 注意 红色为主从配置不一样的地方
在139配置keepalived.conf
global_defs {
notification_email {
acassen@firewall.loc
failover@firewall.loc
sysadmin@firewall.loc
}
notification_email_from Alexandre.Cassen@firewall.loc
smtp_server 192.168.200.1
smtp_connect_timeout 30
router_id LVS_DEVEL
}
vrrp_script chk_redis {
script "/etc/keepalived/scripts/check_redis.sh"
interval 1 #健康检查周期
weight -20 #优先级变化幅度
}
vrrp_instance VI_1 {
state MASTER
interface eth1
virtual_router_id 51
priority 101
advert_int 1
nopreempt
authentication {
auth_type PASS
auth_pass 1111
}
virtual_ipaddress {
172.168.2.142/24
}
track_script { #执行脚本chk_redis
chk_redis
}
notify_master /etc/keepalived/scripts/redis_master.sh
notify_backup /etc/keepalived/scripts/redis_slave.sh
notify_fault /etc/keepalived/scripts/redis_fault.sh
notify_stop /etc/keepalived/scripts/redis_stop.sh
}
在140配置keepalived.conf
global_defs {
notification_email {
acassen@firewall.loc
failover@firewall.loc
sysadmin@firewall.loc
}
notification_email_from Alexandre.Cassen@firewall.loc
smtp_server 192.168.200.1
smtp_connect_timeout 30
router_id LVS_DEVEL2
}
vrrp_script chk_redis {
script "/etc/keepalived/scripts/check_redis.sh"
interval 1 #健康检查周期
weight -20 #优先级变化幅度
}
vrrp_instance VI_1 {
state BACKUP
interface eth1
virtual_router_id 51
priority 90
advert_int 1
authentication {
auth_type PASS
auth_pass 1111
}
virtual_ipaddress {
172.168.2.142/24
}
nopreempt
track_script { #执行脚本chk_redis
chk_redis
}
notify_master /etc/keepalived/scripts/redis_master.sh
notify_backup /etc/keepalived/scripts/redis_slave.sh
notify_fault /etc/keepalived/scripts/redis_fault.sh
notify_stop /etc/keepalived/scripts/redis_stop.sh
}
4.启动keepalived
启动 service keepalived start 或者 /etc/init.d/keepalived start
4.1用ip a查看虚拟vip 此时是在139主上
4.2用 ./src/redis-cli -h 172.168.2.142 -p 6379 此时连的是139主
4.3测试vip漂移,此时的vip是在139,把139的redis服务断掉会切换掉140
此时发现vip飘到
4.4此时在140从用虚拟ip登陆,140角色变换成主master
4.5 139重新开启redis和keepalived 则139 又变成主 也能备份刚刚140设置的新数据demo1
此时就实现了高可用的基本功能。
redis主从访问不了一定要看两台linux的端口是否开发。