1. 程式人生 > >配置了兩臺redis主從failover

配置了兩臺redis主從failover

使用keepalived+lvs配置了兩臺redis,

用作主從failover,

192.168.56.101:6380工作機器1 ;部署redis1 keepalived 1

192.168.56.102:6380工作機器2;部署redis1 keepalived 1

192.168.56.103對外開放的訪問VIP

效果:兩臺機器中有任何一臺keepalived掛掉後,另外一臺keepalived會爭搶VIP,同時執行切換指令碼,保證了VIP服務的可用性

客戶端只要連線VIP就可以透明使用redis.

缺點:如果只是redis掛掉,keepalived沒掛掉,則切換不成功 

-----------------------------------keepalived配置-----------------------------------------

檔案/etc/keepalived/keepalived.conf

vrrp_script chk_redis {
                script "/home/proxy/keep2machine2redis/scripts/redis_check.sh" 2
                interval 2
}
vrrp_instance VI_1 {
        state SLAVE                             
        interface eth3                             
        virtual_router_id 51
        priority 150
	 nopreempt                                
        authentication {
                     auth_type PASS
                    auth_pass redis 
        track_script {
                chk_redis 
        }
        virtual_ipaddress {
             192.168.56.103                        
        }
        notify_master /home/proxy/keep2machine2redis/scripts/redis_master.sh
        notify_backup /home/proxy/keep2machine2redis/scripts/redis_backup.sh
        notify_fault  /home/proxy/keep2machine2redis/scripts/redis_fault.sh
        notify_stop   /home/proxy/keep2machine2redis/scripts/redis_stop.sh
}

redis狀態與主從切換指令碼

/home/proxy/keep2machine2redis/scripts

檢測存活指令碼

#!/bin/bash
echo "going PING 6380" >>/home/proxy/keep2machine2redis/log.txt
ALIVE=`/home/cache/redis6380/src/redis-cli -p 6380 PING`
echo  "6380" $ALIVE  >>/home/proxy/keep2machine2redis/log.txt

if [ "$ALIVE" == "PONG" ]; then
  
  echo $ALIVE
  exit 0
else
  echo $ALIVE
  exit 1
fi

切換本機redis為主機指令碼
#!/bin/bash

REDISCLI="/home/cache/redis6380/src/redis-cli -p 6380"
LOGFILE="/home/proxy/keep2machine2redis/log.txt"

echo "[master]" >> $LOGFILE
date >> $LOGFILE
echo "Being master...." >> $LOGFILE 2>&1

echo "Run SLAVEOF cmd ..." >> $LOGFILE
$REDISCLI SLAVEOF 192.168.56.102 6380 >> $LOGFILE  2>&1
sleep 10 #延遲10秒以後待資料同步完成後再取消同步狀態

echo "Run SLAVEOF NO ONE cmd ..." >> $LOGFILE
$REDISCLI SLAVEOF NO ONE >> $LOGFILE 2>&1

切換本機為從 指令碼
#!/bin/bash

REDISCLI="/home/cache/redis6380/src/redis-cli -p 6380 "
LOGFILE="/home/proxy/keep2machine2redis/log.txt"

echo "[backup]" >> $LOGFILE
date >> $LOGFILE
echo "Being slave....wait" >> $LOGFILE 2>&1

sleep 5 
echo "Run SLAVEOF cmd ..." >> $LOGFILE
$REDISCLI SLAVEOF 192.168.56.102 6380 >> $LOGFILE  2>&1

需要解決的問題:

1.keepalived是多久檢測一次redis狀態,是否可以心跳?

2.我試圖在同一個keepalived配置中配置兩個vrrp例項,但是這樣啟動有問題,檢視ip addr發現vip沒繫結上

3.我本來是用keepalived -f configFile.conf 的啟動方式,但是檢視/etc/log/message  發現三個程序中有一個child process faild,啟動失敗,

後來是用預設的配置檔案位置就好了。。。。