Net分佈式系統之三:Keepalived+LVS+Nginx負載均衡之高可用

  上一篇寫了nginx負載均衡,此篇實現高可用(HA)。系統總體設計是採用Nginx作負載均衡,若出現Nginx單機故障,則致使整個系統沒法正常運行。針對系統架構設計的高可用要求,咱們須要解決Nginx負載均衡出現單機故障時,系統正常運行的需求。因此係統架構引入Keepalived組件,實現系統高可用。nginx

  1、Keepalived介紹web

   Keepalived是分佈式部署系統解決系統高可用的軟件,結合LVS(Linux Virtual Server)使用,其功能相似於heartbeat,解決單機宕機的問題。redis

 


 

  2、Keepalived技術原理shell

   keepalived是以VRRP協議爲實現基礎的,VRRP全稱Virtual Router Redundancy Protocol,即虛擬路由冗餘協議。經過VRRP協議結合LVS,對組羣服務器監控狀況,若master出現宕機狀況,則將VIP漂移到backup機上。實現了分佈式系統高可用。能夠理解爲:keepalived是LVS的管理軟件,根據監控狀況,將宕機服務器從ipvsadm移除掉。vim

 


 

  3、Keepalived+LVS+Nginx實現系統高可用設計模式

  

 
服務器 IP地址 說明
虛擬IP 192.168.1.120:80  
主機 192.168.1.104:80  
備機 192.168.1.103:80  
Web站點A 192.168.1.101:8081 不一樣端口
Web站點B 192.168.1.101:8082 不一樣端口

 

 

  

 

 

  一、安裝ipvsadm,CentOS7自帶安裝包,經過yum進行安裝。實現系統支持LVSbash

yum install ipvsadm

  二、安裝Keepalived軟件,並將keepalived設置開機啓動服務器

yum install Keepalived
systemctl enable keepalived

  

  三、進行Keepalived.conf配置,若是是MASTER機,將state BACKUP改成state MASTER。架構

vim /etc/keepalived/keepalived.conf
#配置的內容
! Configuration File for keepalived

global_defs {
   notification_email {
     xxx@126.com #收到通知的郵件地址
   }
   notification_email_from XX@126.com
   smtp_server 127.0.0.1
   smtp_connect_timeout 30
   router_id LVS_DEVEL
}

vrrp_script monitor_nginx{
   script "/usr/local/etc/keepalived/script/monitor_nginx.sh"
   interval 1
   weight -15
}

vrrp_instance VI_1 {
    state BACKUP 
    interface eno16777736 
    virtual_router_id 51
    priority 80
    advert_int 1
    authentication {
        auth_type PASS
        auth_pass 1111
    }
    virtual_ipaddress {
        192.168.1.120
    }
    track_script {
        monitor_nginx
    }
}

virtual_server 192.168.1.120 80 {
    delay_loop 6
    lb_algo wrr 
    lb_kind DR
    persistence_timeout 50
    protocol TCP

    real_server 192.168.1.103 80 {
        weight 1
        TCP_CHECK {
            connect_timeout 10
            nb_get_retry 3
            delay_before_retry 3
            connect_port 80
        }
    }

    real_server 192.168.1.104 80 {
        weight 5
        TCP_CHECK {
            connect_timeout 10
            nb_get_retry 3
            delay_before_retry 3
            connect_port 80
        }
    }
}

  四、配置監控shell腳本負載均衡

(1)建立:vim /usr/local/etc/keepalived/script/monitor_nginx.sh

(2)SHELL文件內容
#!/bin/bash if [ "$(ps -ef | grep "nginx: master process"| grep -v grep )" == "" ] then systemclt start nginx.service sleep 5 if [ "$(ps -ef | grep "nginx: master process"| grep -v grep )" == "" ] then killall keepalived fi fi

  以上完成相關配置,nginx和web服務以上一篇博客內容一致。以下對功能進行驗證測試。

 


 

  4、實現測試展現

   一、訪問系統狀況:經過VIP(192.168.1.120)訪問系統頁面。由於設置了輪詢調度,因此刷新頁面訪問不一樣站點。

        

 

  二、將 MASTER(192.168.1.104)關機先後,查看相關VLS狀況:

  (1)關機前:

  (2)關機後:

  咱們看到將104服務器從 LVS移除掉。此時則將後續請求轉發到103服務器。

 

  三、關機後,BACKUP服務器 keepalived日誌顯示沒法鏈接104,並移除掉

  

  五、開機後,將自動檢測到服務器正常,並加入LVS中。

  

 

做者:andon
出處: http://www.cnblogs.com/Andon_liu 關於做者:專一於微軟平臺項目架構、管理。熟悉設計模式、領域驅動、架構設計、敏捷開發和項目管理。現主要從事ASP.NET MVC、WCF/Web API、SOA、MSSQL、redis方面的項目開發、架構、管理工做。 若有問題或建議,請一塊兒學習討論! 本文版權歸做者和博客園共有,歡迎轉載,但未經做者贊成必須保留此段聲明,且在文章頁面明顯位置給出原文鏈接。 若有問題,能夠郵件:568773262@qq.com 聯繫我,謝謝。
相關文章
相關標籤/搜索