使用keepalived打造redis雙機熱備

來源:互聯網
上載者:User

標籤:

redis是非常實用的優秀nosql開源產品,在高並發的伺服器環境中,可以作為緩衝和隊列使用.美中不足的是,到現在為止,redis並沒有推出自己的叢集方案,對一個完善的生產環境,負載平衡,高可用,主從備份都是必不可少的選項,redis提供了穩定·的主從備份功能,提供了數種持久化策略,在主從備份上也提供了增量備份的功能,現在通過sentinel提供主從熱備的功能,可惜功能上並不完善,達不到生產環境的要求。

現在我們選定keepalived作為redis的高可用支援,keepalived不僅可以比較完善的支援redis的高可用,而且作為lvs負載平衡的配套產品,和lvs天然具有較好的配合,對於搭建redis叢集有較好的擴充性。

redis和keepalived的安裝非常簡單,網上大把的文章可以參考,這裡就不再贅述,這裡按照redis雙機主從熱備的情境,講需要注意的幾點,網上的很多文章沒有講清楚。

1,lvs和keepalived的關係,lvs起的是負載平衡功能,而keepalived則是高可用(熱備)的支援,keeplaived可以單獨使用。

2,keepalived通過VIP虛擬ip的綁定轉換來打造熱備支援,在轉化主從身份的過程中,還支援指令碼的調用,根據不同的指令碼,keepalived可以用於不同的情境要求,可謂功能強

3,centos環境中keepalived的使用需要安裝ipvsadm支援。

4,如果負載平衡使用的是nat策略,那麼可以不設定linux的arp_ignore(arp組播忽略)選項。

5,/etc/sysconfig/keeaplived 為keepalived的啟動指令碼,這個可以不用修改,如果keepalived的啟動配置不在/etc/keepalived/keepalived.conf下則需要在這裡指定設定檔的位置

  /etc/keepalived/keepalived.conf為kaapalived的預設設定檔所在位置

  /var/log/messages中記載了keepalived的啟動,vip轉化等log資訊,至於角色轉化過程中的指令碼執行日誌,由各個指令碼自己指定

 

下面貼出主從的keepalived.conf設定,在centos7下測試通過

主機keepalived.conf

! Configuration File for keepalivedglobal_defs {   notification_email {     [email protected]     [email protected]     [email protected]   }   notification_email_from [email protected]   smtp_server 128.0.0.1   smtp_connect_timeout 30   router_id LVS_MASTER}vrrp_script chk_redis {      script "/usr/local/redis/sh/redis_check.sh 127.0.0.1 6379"      interval 2      timeout 2     fall 3}vrrp_instance VI_1 {    state MASTER    interface eno16777736    virtual_router_id 60    priority 100    advert_int 3    authentication {        auth_type PASS        auth_pass 1111    }    virtual_ipaddress {        192.168.72.115       # 192.168.200.17       # 192.168.200.18    }     track_script {        chk_redis    }    notify_master "/usr/local/redis/sh/redis_master_master.sh 127.0.0.1 192.168.72.128 6379"    notify_backup "/usr/local/redis/sh/redis_master_slave.sh 127.0.0.1 192.168.72.128 6379"    notify_fault "/usr/local/redis/sh/redis_fault.sh" }virtual_server 192.168.72.115 6379 {    delay_loop 6    lb_algo rr    lb_kind NAT    nat_mask 255.255.255.0    persistence_timeout 50    protocol TCP    sorry_server 127.0.0.1 80    real_server 192.168.72.11 6379 {        weight 1    TCP_CHECK {          connect_timeout 3          nb_get_retry 3          delay_before_retry 3          connect_port 6379        }    }   real_server 192.168.72.128 6379 {        weight 1        TCP_CHECK {          connect_timeout 3          nb_get_retry 3          delay_before_retry 3          connect_port 6379        }    }}

從機的keepalived.conf配置

! Configuration File for keepalivedglobal_defs {   notification_email {     [email protected]     [email protected]     [email protected]   }   notification_email_from [email protected]   smtp_server 128.0.0.1   smtp_connect_timeout 30   router_id LVS_BACKUP}vrrp_script chk_redis {      script "/usr/local/redis/sh/redis_check.sh 127.0.0.1 6379"      interval 2      timeout 2     fall 3}vrrp_instance VI_1 {    state BACKUP    interface eno16777736    virtual_router_id 60    priority 99    advert_int 3    nopreempt    authentication {        auth_type PASS        auth_pass 1111    }    virtual_ipaddress {        192.168.72.115       # 192.168.200.17       # 192.168.200.18    }     track_script {        chk_redis    }    notify_master "/usr/local/redis/sh/redis_backup_master.sh 127.0.0.1 192.168.72.11 6379"    notify_backup "/usr/local/redis/sh/redis_backup_slave.sh 127.0.0.1 192.168.72.11 6379"    notify_fault "/usr/local/redis/sh/redis_fault.sh" }virtual_server 192.168.72.115 6379 {    delay_loop 6    lb_algo rr    lb_kind NAT    nat_mask 255.255.255.0    persistence_timeout 50    protocol TCP    sorry_server 127.0.0.1 80    real_server 192.168.72.11 6379 {        weight 1    TCP_CHECK {          connect_timeout 3          nb_get_retry 3          delay_before_retry 3          connect_port 6379        }    }   real_server 192.168.72.128 6379 {        weight 1        TCP_CHECK {          connect_timeout 3          nb_get_retry 3          delay_before_retry 3          connect_port 6379        }    }}

 

請大家注意幾點:

1,同一組裡的各個機器設定檔中router_id不能相同,很多文章講這裡可以相同是錯誤的,這個是組中身份的標識。同一個組裡的virtual_router_id必須相同,這是組標識。

2,priority是設定優先權別的,主伺服器的優先順序必須高於從伺服器,即這個數字要大些。

3,interface後跟的是網卡名,在centos7中可不叫eth0,最好在配置之前使用ifconfig查看下你的網卡名稱。

4,real_server中的weight設定的是負載平衡優先順序,如果主從熱備的情境下,這裡可以設定為相同。

 

keeaplived可以在主從都運行良好的情況下檢測主從狀態,當主伺服器down掉,或者進程意外終止時,先將VIP綁定到從伺服器上,然後通過指定的指令碼來提升從伺服器的應用程式層面的角色定位,在redis中就是運行slave no one,當主伺服器恢複服務後,將VIP恢複綁定至主伺服器,然後呼叫指令碼同步主伺服器宕機時間中從伺服器儲存的資料,然後將主伺服器redis進程提升為主redis,從伺服器redis降格為備份進程。這些功能的實現都是通過主動調用notify_master指令碼實現,這個指令碼當然可以配置為其他的功能,所以,這就可以使keepalived在很多場合發揮作用。

使用keepalived打造redis雙機熱備

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在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.