因公司业务需求需搭建redis 高可用方案
两台主机
10.21.10.43 master
10.21.10.44 slave
两台机器分别安装keeplived
yum install keepalived
在master(110.21.10.43)上修改keepalived的住配置文件
vim /etc/keepalived/keepalived.conf
修改内容如下
! Configuration File for keepalived
global_defs {
router_id redis100
}
vrrp_script chk_redis
{
script "/etc/keepalived/scripts/redis_check.sh 10.21.12.43 6379"
interval 2
timeout 2
fall 3
}
vrrp_instance redis {
state MASTER
interface bond1
virtual_router_id 50
priority 150
nopreempt # no seize,must add
advert_int 1
authentication { #all node must same
auth_type PASS
auth_pass 1111
}
virtual_ipaddress {
10.21.10.241/24 dev bond1 label eth0
}
track_script {
chk_redis
}
notify_fault /etc/keepalived/scripts/redis_fault.sh
notify_stop /etc/keepalived/scripts/redis_stop.sh
}
在slave(110.21.10.44)上修改keepalived的住配置文件
! Configuration File for keepalived
global_defs {
router_id redis101
}
vrrp_script chk_redis
{
script "/etc/keepalived/scripts/redis_check.sh 10.21.12.44 6379"
interval 2
timeout 2
fall 3
}
vrrp_instance redis {
state BACKUP
interface bond1
virtual_router_id 50
priority 100
advert_int 1
authentication { #all node must same
auth_type PASS
auth_pass 1111
}
virtual_ipaddress {
10.21.10.241/24 dev bond1 label eth0 #10.21.10.241是vip 地址 bond1 是本机网卡名 eth0 是虚出来的
}
track_script {
chk_redis
}
notify_master "/etc/keepalived/scripts/redis_master.sh 10.21.10.43 6379"
notify_backup "/etc/keepalived/scripts/redis_backup.sh 10.21.10.43 6379"
notify_fault /etc/keepalived/scripts/redis_fault.sh
notify_stop /etc/keepalived/scripts/redis_stop.sh
}
然后编写 脚本 在/etc/keepalived/scripts 路径下 创建 redis_check.sh redis_fault.sh redis_stop.sh 这三个脚本 和keepalived 调用的脚本一致
redis_check.sh 脚本内容如下
#!/bin/bash
ALIVE=`/usr/local/redis/bin/redis-cli -h $1 -p $2 -a 'redis 密码' PING`
LOGFILE="/var/log/keepalived-redis-check.log"
if [ "$ALIVE"x = "PONG"x ]; then :
exit 0
else
date >> $LOGFILE
echo "Failed:redis-cli -h $1 -p $2 PING $ALIVE " >> $LOGFILE 2>&1
/etc/init.d/keepalived stop
exit 1
fi
redis_fault.sh 脚本
#!/bin/bash
LOGFILE=/var/log/keepalived-redis-state.log
echo "[fault]" >> $LOGFILE
date >> $LOGFILE
redis_stop.sh 脚本
#!/bin/bash
LOGFILE=/var/log/keepalived-redis-state.log
echo "[stop]" >> $LOGFILE
date >> $LOGFILE
注意区别 slave 的配置文件比master 多两条执行脚本命令
然后编写slave 使用脚本 在/etc/keepalived/scripts 路径下 创建 redis_master.sh redis_back.sh 和 redis_check.sh redis_fault.sh redis_stop.sh 这三个脚本 和keepalived 调用的脚本一致
比master 多两个脚本
redis_master.sh 脚本内容
#!/bin/bash
REDISCLI="/usr/local/redis/bin/redis-cli -h $1 -p $2"
LOGFILE="/var/log/keepalived-redis-state.log"
echo "[master]" >> $LOGFILE
date >> $LOGFILE
echo "Being master...." >> $LOGFILE 2>&1
echo "Run SLAVEOF cmd ... " >> $LOGFILE
#$REDISCLI SLAVEOF $1 $2 >> $LOGFILE 2>&1
#echo "SLAVEOF $1 cmd can't excute ... " >> $LOGFILE
#sleep 10 ##delay 15 s wait data sync exchange role
echo "Run SLAVEOF NO ONE cmd ..." >> $LOGFILE
$REDISCLI SLAVEOF NO ONE >> $LOGFILE 2>&1
redis_back.sh 数据同步脚本
#!/bin/bash
REDISCLI="/usr/local/redis/bin/redis-cli"
LOGFILE="/var/log/keepalived-redis-state.log"
echo "[backup]" >> $LOGFILE
date >> $LOGFILE
echo "Run SLAVEOF cmd ..." >> $LOGFILE
$REDISCLI -a 'redis密码' SLAVEOF $1 $2 >> $LOGFILE 2>&1
# echo "Being slave...." >> $LOGFILE 2>&1
sleep 15 #delay 15 s wait data sync exchange role
redis_check.sh 脚本内容如下
#!/bin/bash
ALIVE=`/usr/local/redis/bin/redis-cli -h $1 -p $2 -a 'redis 密码' PING`
LOGFILE="/var/log/keepalived-redis-check.log"
if [ "$ALIVE"x = "PONG"x ]; then :
exit 0
else
date >> $LOGFILE
echo "Failed:redis-cli -h $1 -p $2 PING $ALIVE " >> $LOGFILE 2>&1
/etc/init.d/keepalived stop
exit 1
fi
redis_fault.sh 脚本
#!/bin/bash
LOGFILE=/var/log/keepalived-redis-state.log
echo "[fault]" >> $LOGFILE
date >> $LOGFILE
redis_stop.sh 脚本
#!/bin/bash
LOGFILE=/var/log/keepalived-redis-state.log
echo "[stop]" >> $LOGFILE
date >> $LOGFILE
给这些脚本执行权限
--------------------------------------------------------------------------------------------------------------------------------
二 安装 redis
具体安装不在这讲述 百度很多
修改redis配置文件
添加一下配置
daemonize yes
masterauth reidspass(redis住库密码)
-----------------------------------------------------------
三 验证
先在master 查看vip 是不是在生效
ip addr
吧 master 上 redis 停掉 查看slave vip 已经飘到slave