#!/bin/bash
REDISPATH=/usr/local/redis-2.8.3
REDISCLI=$REDISPATH/bin/redis-cli
LOGFILE=$REDISPATH/logs/redis-state.log
LOCALIP=192.168.1.152
REMOTEIP=192.168.1.142
VIP=192.168.1.42
VIPALIVE=`ip a | grep "$VIP"`
if [ "$VIPALIVE" == "" ]; then
echo "[info]:"`date`" keepalived server is pengding or stop" >> $LOGFILE
else
echo "bbb" >> $LOGFILE
#check local service is running
if [ "`$REDISCLI PING`" == "PONG" ]; then
# check local redis server role.
REDISROLE=`$REDISCLI info | grep "role"`
if grep "role:slave" <<< $REDISROLE ; then
#change local redis server as master
echo "[info1]:"`date`" Run SLAVEOF NO ONE cmd ..." >> $LOGFILE
$REDISCLI SLAVEOF NO ONE >> $LOGFILE 2>&1
#change remoting redis server as slave
REMOTEREDISROLE=`$REDISCLI -h $REMOTEIP info | grep "role"`
if grep "role:master" <<< $REMOTEREDISROLE ; then
echo "[info2]:"`date`" Run remote server SLAVEOF cmd ..." >> $LOGFILE
$REDISCLI -h $REMOTEIP SLAVEOF $LOCALIP 6379 >> $LOGFILE 2>&1
fi
else
REMOTEREDISROLE=`$REDISCLI -h $REMOTEIP info | grep "role"`
if grep "role:master" <<< $REMOTEREDISROLE ; then
echo "[info3]:"`date`" Run remote server SLAVEOF cmd ..." >> $LOGFILE
$REDISCLI -h $REMOTEIP SLAVEOF $LOCALIP 6379 >> $LOGFILE 2>&1
fi
fi
else
echo "[warn]:"`date`" redis server($LOCALIP) is not health..." >> $LOGFILE
sleep 1
if [ "`$REDISCLI PING`" != "PONG" ]; then
echo "[error]:"`date`" redis server($LOCALIP) will be stop..." >> $LOGFILE
service keepalived stop
fi
fi
fi
这里是152的配置,另外一台服务器只要修改IP地址,其他不变。如上代码,这里不贴出来了。
六: 测试
只要任何一台keepalived正常,就可以提供vip服务。 redis的master会随着vip的漂移而改变,谁获得了vip,谁就具有redis 的master角色,其他都会置为slave角色