Redis高可用配置(Keepalived)

來源:互聯網
上載者:User

標籤:

主:172.16.0.104

備:172.16.0.105

VIP:172.16.0.107

用戶端直接連VIP,當master 104的redis掛掉後,105作為master。當104重啟後,104作為105的slave。當105又掛掉之後,104作為master......

1、安裝redis並配置主從同步

     安裝過程省略

    1.1 配置104的redis執行個體:/etc/redis/redis.conf

    requirepass 123456 #生產環境千萬不要配置這麼簡單的密碼

    masterauth 123456 #備庫密碼,這裡沒有配置slaveof卻配置masterauth是因為主備切換時需要用到密碼

    1.2 配置105的redis執行個體

    requirepass 123456 #生產環境千萬不要配置這麼簡單的密碼

    masterauth 123456 #主庫密碼

 

    slaveof 172.16.0.104 6379

2、安裝keepalived

   安裝過程省略

3、配置keepalived

  Master(104)執行個體:

  keepalived.conf    

global_defs {   router_id test}vrrp_script chk_redis {      script "/etc/keepalived/scripts/redis_check.sh 127.0.0.1 6379 123456"      interval 2      timeout 2     fall 3}vrrp_instance redis {    state BACKUP # 主也配置為SLAVE    interface eth0      virtual_router_id 51     priority  150           nopreempt # 不搶佔,注意加上    advert_int 1            authentication {           auth_type PASS           auth_pass 123456    }    virtual_ipaddress {      172.16.0.107    }    track_script {          chk_redis     }     notify_master "/etc/keepalived/scripts/redis_master.sh 127.0.0.1 6379 123456"    notify_backup "/etc/keepalived/scripts/redis_backup.sh 127.0.0.1 6379 123456 172.16.0.105 6379"    notify_fault /etc/keepalived/scripts/redis_fault.sh     notify_stop /etc/keepalived/scripts/redis_stop.sh  
}

redis_master.sh 

 #!/bin/bash  REDISCLI="redis-cli -h $1 -p $2 -a $3"  LOGFILE="/var/log/keepalived-redis-state.log"  echo "[master]" >> $LOGFILE  date >> $LOGFILE  echo "Being master...." >> $LOGFILE 2>&1  echo "Run SLAVEOF NO ONE cmd ..." >> $LOGFILE  $REDISCLI SLAVEOF NO ONE >> $LOGFILE 2>&1

 

redis_backup.sh

 #!/bin/bash  REDISCLI="redis-cli -h $1 -p $2 -a $3"  LOGFILE="/var/log/keepalived-redis-state.log"  echo "[backup]" >> $LOGFILE  date >> $LOGFILE  echo "Being slave...." >> $LOGFILE 2>&1  echo "Run SLAVEOF cmd ..." >> $LOGFILE  $REDISCLI SLAVEOF $4 $5 >> $LOGFILE  2>&1

 


Slave(105)執行個體

keepalived.conf
global_defs {    router_id redis}vrrp_script chk_redis {    script "/etc/keepalived/scripts/redis_check.sh 127.0.0.1 6379 123456"   ###監控指令碼    interval 2                  ###監控時間    timeout  2                                  ###逾時時間    fall     3                  ###重試次數}vrrp_instance redis {  state BACKUP                  ###設定為MASTER  interface eth0              ###監控網卡  virtual_router_id 51  priority 100              ###權重值  nopreempt # 不搶佔,注意加上  advert_int 1  authentication {         auth_type PASS          ###加密         auth_pass 123456        ###密碼  }  track_script {    chk_redis              ###執行上面定義的chk_redis  }  virtual_ipaddress {       172.16.0.107            ###VIP  }   notify_master "/etc/keepalived/scripts/redis_master.sh 127.0.0.1 6379 123456"   notify_backup "/etc/keepalived/scripts/redis_backup.sh 127.0.0.1 6379 123456 172.16.0.104 6379"   notify_fault /etc/keepalived/scripts/redis_fault.sh   notify_stop /etc/keepalived/scripts/redis_stop.sh}
 redis_master.sh
 #!/bin/bash  REDISCLI="redis-cli -h $1 -p $2 -a $3"  LOGFILE="/var/log/keepalived-redis-state.log"  echo "[master]" >> $LOGFILE  date >> $LOGFILE  echo "Being master...." >> $LOGFILE 2>&1  echo "Run SLAVEOF NO ONE cmd ..." >> $LOGFILE  $REDISCLI SLAVEOF NO ONE >> $LOGFILE 2>&1 

redis_backup.sh

   

 #!/bin/bash  REDISCLI="redis-cli -h $1 -p $2 -a $3"  LOGFILE="/var/log/keepalived-redis-state.log"  echo "[backup]" >> $LOGFILE  date >> $LOGFILE  echo "Being slave...." >> $LOGFILE 2>&1  echo "Run SLAVEOF cmd ..." >> $LOGFILE  $REDISCLI SLAVEOF $4 $5 >> $LOGFILE  2>&1

公用配置

redis_check.sh

#!/bin/bash ALIVE=`redis-cli -h $1 -p $2 -a $3 PING` LOGFILE="/var/log/keepalived-redis-check.log" echo "[CHECK]" >> $LOGFILEdate >> $LOGFILEif [ $ALIVE == "PONG" ]; then :    echo "Success: redis-cli -h $1 -p $2 PING $ALIVE" >> $LOGFILE 2>&1   exit 0 else    echo "Failed:redis-cli -h $1 -p $2 PING $ALIVE " >> $LOGFILE 2>&1   exit 1 fi 

redis_fault.sh

#!/bin/bash LOGFILE=/var/log/keepalived-redis-state.log echo "[fault]" >> $LOGFILEdate >> $LOGFILE 

redis_stop.sh

#!/bin/bash LOGFILE=/var/log/keepalived-redis-state.log echo "[stop]" >> $LOGFILE date >> $LOGFILE 

 

啟動keepalived:keepalived -D

查看ip漂移情況:ip a

配置要點:

雙BACKUP + nopreempt,優先順序大的先啟動作為master,當master掛掉後,slave被選中成為新的master。

參考文章:http://www.cnblogs.com/lulu/archive/2013/04/14/3021261.html

Redis高可用配置(Keepalived)

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.