1. 指定一台redis server為
master,另一台為slave
2. 在slave server設定crontab執行以下shell script
3.
執行邏輯是
a. 當master,及slave都回PONG,那就設定master server為master, slave server為slave
b. 當只有slave回PONG,那就將slave server改為master, 並將hosts 的 lan.redis IP改為slave IP
c. 當只有master回PONG, 將hosts 的lan.redis IP改為master
d. 都連不上..., email通知?
也就 master reids修復後,就符合條件 a或 c;
master
redis faile時,則符合條件 b 條件d,
沒有可服務的redis, 需通知維運人員來處理。
slave=$(/usr/bin/docker exec -i redis_cli bash -c "redis-cli -h 172.20.0.6 ping" | cut -c 1-4)
master=$(/usr/bin/docker exec -i redis_cli bash -c "redis-cli -h 10.123.123.20 ping" | cut -c 1-4)
echo "Master=$master"
echo "slave="${slave}
if [ "${master}" == "PONG" ] && [ "${slave}" == "PONG" ]; then
slave_role=$(/usr/bin/docker exec -i redis_cli redis-cli -h 172.20.0.6 info replication | grep role | cut -c 6-10)
if [ "${slave_role}" == "maste" ]; then
master_role=$(/usr/bin/docker exec -i redis_cli redis-cli -h 10.123.123.20 info replication | grep role)
slave_role=$(/usr/bin/docker exec -i redis_cli redis-cli -h 172.20.0.6 info replication | grep role | cut -c 6-10)
echo "master_role(10.123.123.20): "${master_role}
echo "slave_role(10.123.123.11):"$savle_role
#10.123.123.11為slave, 10.123.123.20為master
/usr/bin/docker exec -i redis_cli redis-cli -h 172.20.0.6 slaveof 10.123.123.20 6379
/usr/bin/docker exec -i redis_cli redis-cli -h 10.123.123.20 slaveof no one
#lan.redis 為 10.123.123.20
sed -i 's/172.20.0.6/10.123.123.20/g' /home/docker/nginx-dev/vol/auth_api_dev/etc/hosts
fi
elif [ "${master}" != "PONG" ] && [ "${slave}" == "PONG" ]; then
#master 10.123.123.20連不上去,改至 10.123.123.11為 master
/usr/bin/docker exec -i redis_cli redis-cli -h 172.20.0.6 slaveof no one
#lan.redis 為 10.123.123.11
sed -i 's/10.123.123.20/172.20.0.6/g' /home/docker/nginx-dev/vol/auth_api_dev/etc/hosts
echo "遠端 10.123.123.20 redis連不上,改連 10.123.123.11(172.20.0.6) redis"
elif [ "${master}" == "PONG" ] && [ "${slave}" != "PONG" ]; then
#10.123.123.20為 master
/usr/bin/docker exec -i redis_cli redis-cli -h 10.123.123.20 slaveof no one
#lan.redis 為 10.123.123.20
sed -i 's/172.20.0.6/10.123.123.20/g' /home/docker/nginx-dev/vol/auth_api_dev/etc/hosts
echo "本機 10.123.123.11(172.20.0.6) redis連不上,改連master 10.123.123.20 redis"
else
echo "10.123.123.20 and 10.123.123.11的 redis都連不上"
fi
沒有留言:
張貼留言