Keepalived+LVS+Nginx負載均衡之高可用


Keepalived+LVS+Nginx負載均衡之高可用

上一篇寫了nginx負載均衡,此篇實現高可用(HA)。系統整體設計是采用Nginx做負載均衡,若出現Nginx單機故障,則導致整個系統無法正常運行。針對系統架構設計的高可用要求,我們需要解決Nginx負載均衡出現單機故障時,系統正常運行的需求。所以系統架構引入Keepalived組件,實現系統高可用。

  一、Keepalived介紹

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

 


 

  二、Keepalived技術原理

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

 


 

  三、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 不同端口

 

 

  

 

 

  1、安裝ipvsadm,CentOS7自帶安裝包,通過yum進行安裝。實現系統支持LVS

1
yum install ipvsadm

  2、安裝Keepalived軟件,並將keepalived設置開機啟動

1
yum install Keepalived
1
systemctl enable keepalived

  

  3、進行Keepalived.conf配置,如果是MASTER機,將state BACKUP改為state MASTER。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
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
         }
     }
}

  4、配置監控shell腳本

1
2
3
4
5
6
7
8
9
10
(1)創建:vim /usr/local/etc/keepalived/script/monitor_nginx.sh<br><br>(2)SHELL文件內容<br>#!/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服務以上一篇博客內容一致。如下對功能進行驗證測試。

 


 

  四、實現測試展示

   1、訪問系統情況:通過VIP(192.168.1.120)訪問系統頁面。因為設置了輪詢調度,所以刷新頁面訪問不同站點。

        

 

  2、將 MASTER(192.168.1.104)關機前后,查看相關VLS情況:

  (1)關機前:

  (2)關機后:

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

 

  3、關機后,BACKUP服務器 keepalived日志顯示無法連接104,並移除掉

  

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

  

 

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

 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM