Redis之高可用方案

Redis之高可用方案

Redis以其高效的訪問速度著稱。但因爲官方還未發佈redis-cluster,而redis的replica又有諸多不便:好比一組master-slave的機器,若是之間有連接瞬段,或者對slave從新執行slaveof命令,會致使slave機器從頭開始同步一次master的數據,形成較大的開銷。
 
如下描述了使用keepalived+redis主從的一種高可用方法。安裝方法在這裏就不贅述了,google之則可。
1. redis服務配置
主機     端口   角色
redis0 6379   master
redis1 6379   slave
 
2. keepalived的配置
redis0和redis1使用一個虛擬ip
 
並使用以下腳本監控redis服務是否存活。監控腳本:

 

 

[html]  view plain copy
 
  1. #!/bin/bash  
  2. /usr/local/bin/redis-cli -h 192.168.1.53 -p 6379 info > /dev/null  
  3. if [ $? -eq 0 ]; then  
  4. echo "redis OK"  
  5. exit 0  
  6. else  
  7. echo "no redis service found!"  
  8. /usr/local/bin/redis-server /path/to/redis.conf  
  9.   
  10. # try to start it again  
  11. /usr/local/bin/redis-cli -h 192.168.11.53 -p 6380 info > /dev/null  
  12. if [ $? -eq 0 ]; then  
  13. exit 0  
  14. else  
  15.   
  16. # restart failed  
  17. killall keepalived  
  18. echo "error"  
  19. fi  
  20. fi  

 

要實現redis故障恢復,能夠使用keepalived配置的notify_master, notify_backup這兩個方法執行特有的腳本。實際上只要在slave(即redis1)上有2個腳本,第一個用於在redis1接管虛擬ip以後,執行slaveof no one把本身變成master。第二個用戶在redis1交出虛擬ip以後,在redis0執行slaveof no one確保redis0恢復爲主的狀態,並對本身執行slaveof redis0 6379開始從新從master同步數據,若是本身已是slave就不必同步了。
 
redis1上keepalived的配置方法以下,redis0只要去掉notify_master, notify_backup兩行便可。
[cpp]  view plain copy
 
  1. ! Configuration File for keepalived  
  2. global_defs {  
  3. router_id redis1  
  4. }  
  5. vrrp_script Monitor_Redis {  
  6.  script "/opt/redis_keepalive.sh"  
  7.  interval 10  
  8.  weight 2  
  9. }  
  10. vrrp_instance 360 {  
  11.  state BUCKUP #(主機爲MASTER,備用機爲BACKUP)  
  12.  interface eth0 #(HA監測網絡接口)  
  13.  virtual_router_id 110 #(主、備機的virtual_router_id必須相同)  
  14.  mcast_src_ip 192.168.11.53 #(多播的源IP,設置爲本機外網IP,與VIP同一網卡)此項可不設置  
  15.  priority 70 #(主、備機取不一樣的優先級,主機值較大,備份機值較小,值越大優先級越高)  
  16.  advert_int 1 #(VRRP Multicast廣播週期秒數)  
  17.  authentication {  
  18.   ......  
  19. }  
  20.  notify_master /opt/redis_2master.sh  
  21.  notify_backup /opt/redis_2backup.sh  
  22.  track_script {  
  23.  Monitor_Redis #(調用nginx進程檢測腳本)  
  24. }  
  25.  virtual_ipaddress {  
  26.  192.168.11.4 #(VRRP HA虛擬地址)  
  27.  }  
  28. }  
相關文章
相關標籤/搜索