我的组织有Redis以主/从configuration运行,使用Keepalived在两者之间切换。 发现当Slave实例因某种原因死亡时,Keepalived不会重新启动它。 我开始写一个cron作业来检查redis是否正在运行,如果从站死了,重新启动它。
#!/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置于从属模式。 如果我input
redis-cli SLAVEOF 10.19.105.229 6379
在我的terminal,但是,它进入奴隶模式。 有任何想法吗?
是否有可能在你最内层的块中, redis-server的调用立即返回,但服务器本身启动的时间超过一秒? 在这种情况下, wait时间不会太长。
你有没有尝试在脚本中写入redis-cli和redis-server的完整path? 或者简单地在脚本的开始处设置PATHvariables,并使其与您在terminal中键入echo $PATH时所看到的相同。