IP分配
ip | 角色 |
---|---|
192.168.1.235 | master |
192.168.1.236 | slave |
192.168.1.234 | vip |
部署redis
redis.conf
xxxx
两台均部署redis,启动redis
[root@redis01-test keepalived]# /usr/local/redis/bin/redis-server /usr/local/redis/etc/redis.conf &
在redis-slave(1.236上执行)
/usr/local/redis/bin/redis-cli REPLICAOF 192.168.1.235 6379
验证主从
/usr/local/redis/bin/redis-cli info
配置keepalived高可用
安装keepalived
配置master-keepalived[1.235]
! Configuration File for keepalived
global_defs {
router_id redis_1.235
}
vrrp_script chk_redis
{
script "/etc/keepalived/scripts/redis_check.sh"
interval 2
timeout 2
fall 3
}
vrrp_instance redis_63 {
state MASTER
interface ens192
virtual_router_id 63
priority 100
advert_int 1
authentication {
auth_type PASS
auth_pass xxxx
}
virtual_ipaddress {
192.168.1.234
}
track_script {
chk_redis
}
notify_master "/etc/keepalived/scripts/redis_master.sh"
notify_backup "/etc/keepalived/scripts/redis_backup.sh"
notify_fault /etc/keepalived/scripts/redis_fault.sh
notify_stop /etc/keepalived/scripts/redis_stop.sh
}
配置slave-keepalived[1.236]
! Configuration File for keepalived
global_defs {
router_id redis_1.236
}
vrrp_script chk_redis
{
script "/etc/keepalived/scripts/redis_check.sh"
interval 2
timeout 2
fall 3
}
vrrp_instance redis_63{
state BACKUP
interface ens192
virtual_router_id 63
priority 99
advert_int 1
authentication {
auth_type PASS
auth_pass xxxx
}
virtual_ipaddress {
192.168.1.234
}
track_script {
chk_redis
}
notify_master "/etc/keepalived/scripts/redis_master.sh"
notify_backup "/etc/keepalived/scripts/redis_backup.sh"
notify_fault /etc/keepalived/scripts/redis_fault.sh
notify_stop /etc/keepalived/scripts/redis_stop.sh
}
redis_check.sh
#!/bin/bash
ALIVE=`/usr/local/redis/bin/redis-cli PING`
LOGFILE="/var/log/keepalived/keepalived-redis-check.log"
echo "[CHECK]" >> $LOGFILE
date >> $LOGFILE
if [ $ALIVE == "PONG" ]; then
echo "Success: redis-cli PING $ALIVE" >> $LOGFILE 2>&1
exit 0
else
echo "Failed:redis-cli PING $ALIVE " >> $LOGFILE 2>&1
exit 1
redis_master.sh
#!/bin/bash
REDISCLI="/usr/local/redis/bin/redis-cli"
LOGFILE="/var/log/keepalived/keepalived-redis-state.log"
echo "[master]" >> $LOGFILE
date >> $LOGFILE
echo "Being master...." >> $LOGFILE 2>&1
echo "Run SLAVEOF cmd ... " >> $LOGFILE
$REDISCLI REPLICAOF 192.168.1.234 6379 >> $LOGFILE 2>&1
#echo "SLAVEOF $2 cmd can't excute ... " >> $LOGFILE
sleep 10 ##delay 15 s wait data sync exchange role
echo "Run SLAVEOF NO ONE cmd ..." >> $LOGFILE
$REDISCLI REPLICAOF NO ONE >> $LOGFILE 2>&1
sleep 5
/sbin/arping -b -f 192.168.1.1 -I ens192 -s 192.168.1.234
redis_backup.sh
#!/bin/bash
REDISCLI="/usr/local/redis/bin/redis-cli"
LOGFILE="/var/log/keepalived/keepalived-redis-state.log"
echo "[BACKUP]" >> $LOGFILE
date >> $LOGFILE
echo "Being slave...." >> $LOGFILE 2>&1
echo "Run SLAVEOF cmd ..." >> $LOGFILE 2>&1
$REDISCLI REPLICAOF 192.168.1.234 6379 >> $LOGFILE
sleep 100 #delay 10 s wait data async cancel sync
exit(0)
**redis_fault.sh **
#!/bin/bash
LOGFILE=/var/log/keepalived/keepalived-redis-state.log
echo "[fault]" >> $LOGFILE
date >> $LOGFILE
redis_stop.sh
#!/bin/bash
LOGFILE=/var/log/keepalived/keepalived-redis-state.log
echo "[stop]" >> $LOGFILE
date >> $LOGFILE
附录
notify的用法:
notify_master:当此节点成为master时,通知脚本执行任务(一般用于启动某服务)
notify_backup:当此节点成为backup时,通知脚本执行任务(一般用于关闭某服务)
notify_fault:当此节点出现故障,执行的任务;