我的组织让 Redis 在主/从配置中运行,使用 Keepalived 在两者之间切换。发现当Slave实例因为某种原因死亡时,Keepalived不会重启它。我开始编写一个 cron 作业来检查并查看 redis 是否正在运行,如果 slave 死了,则重新启动它。
#!/bin/bash
#redis_cron_restart.sh
######variables########
REDIS_IP="10.19.105.229"
REDIS_CONF="/var/lib/redis/redis.conf"
#Check to see if Redis is running
killall -0 redis-server
if [ $? -eq 1 ]
then
date >> /var/lib/redis/log.txt
echo redis-server not running. Checking redis master >> /var/lib/redis/log.txt
redis-cli -h ${REDIS_IP} PING
if [ $? -eq 1 ]
then
echo redis master not running. Doing nothing. >> /var/lib/redis/log.txt
else
echo redis master is running. I must be the slave. Restarting keepalived >> /var/lib/redis/log.txt
redis-server ${REDIS_CONF}
sleep 1
wait
redis-cli SLAVEOF ${REDIS_IP} 6379
fi
else
echo redis-server running. >> /var/lib/redis/log.txt
fi
它运行,并重新启动 Redis。但是,它不会将 Redis 置于从属模式。如果我输入
redis-cli SLAVEOF 10.19.105.229 6379
然而,在我的终端,它进入了从属模式。有任何想法吗?
是否有可能,在您最里面
else
的块中,对 的调用redis-server
立即返回,但服务器本身需要一秒钟以上的时间才能启动?那样的话,wait
等不了多久了。您是否尝试在脚本中编写 redis-cli 和 redis-server 的完整路径?或者简单地在脚本的开头设置 PATH 变量,并使其与您
echo $PATH
在终端中键入时看到的相同。