使用HAproxy如何實現web站點的動靜分離


HAProxy提供高可用性、負載均衡以及基於TCP和HTTP應用的代理,支持虛擬主機,它是免費、快速並且可靠的一種解決方案。
      HAProxy特別 適用於那些負載特大的web站點,這些站點通常又需要會話保持或七層處理。HAProxy運行在當前的硬件上,完全可以支持數以萬計的並發連接。並且它的 運行模式使得它可以很簡單安全的整合進您當前的架構中,同時可以保護你的web服務器不被暴露到網絡上。
   HAProxy實現了一種事件驅動,單一進程模型,此模型支持非常大的並發連接數。多進程或多線程模型受內存限制、系統調度器限制以及無處不在的鎖限 制,很少能處理數千並發連接。事件驅動模型因為在有更好的資源和時間管理的用戶端(User-Space) 實現所有這些任務,所以沒有這些問題。此模型的弊端是,在多核系統上,這些程序通常擴展性較差。這就是為什么他們必須進行優化以 使每個CPU時間片(Cycle)做更多的工作。
                                                                         --摘自百度百科

實現過程圖:

wKioL1Npn2qDdiOwAAEUH5H3E2Y175.jpg

 

   第一步:安裝httpd、php以及haproxy,這里我們直接用yum來安裝即可,這里我們使用三台虛擬機來做測試,前端一台haproxy做調度,后端兩台httpd服務器提供web服務,在做動靜分離時時前端haproxy來判斷動態和靜態內容分別調度到哪台服務器上;

[root@node0 ~]# yum -y install httpd php haproxy

 

   第二步:安裝好之后給這三台虛擬配置好相關的網絡設備以及提供相關的測試頁面等,在eth1這張網卡上選擇相同的一個通信通道,node0這台虛擬機上haproxy的主機,node1和node2是不同的兩台后端提供web服務器的虛擬主機;

wKiom1NpycrTigk9AAFTVY806zA030.jpg

[root@node0 ~]# ifconfig eth1 192.168.27.10/24 up   # 給eth1配置ip地址
[root@node0 ~]# ifconfig
eth0      Link encap:Ethernet  HWaddr 00:0C:29:B2:AD:BA  
         inet addr:172.16.27.88  Bcast:172.16.255.255  Mask:255.255.0.0
         inet6 addr: fe80::20c:29ff:feb2:adba/64 Scope:Link
         UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
         RX packets:11122303 errors:0 dropped:0 overruns:0 frame:0
         TX packets:1193136 errors:0 dropped:0 overruns:0 carrier:0
         collisions:0 txqueuelen:1000 
         RX bytes:697850934 (665.5 MiB)  TX bytes:74549101 (71.0 MiB)

eth1      Link encap:Ethernet  HWaddr 00:0C:29:B2:AD:C4  
         inet addr:192.168.27.10  Bcast:192.168.27.255  Mask:255.255.255.0
         inet6 addr: fe80::20c:29ff:feb2:adc4/64 Scope:Link
         UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
         RX packets:0 errors:0 dropped:0 overruns:0 frame:0
         TX packets:6 errors:0 dropped:0 overruns:0 carrier:0
         collisions:0 txqueuelen:1000 
         RX bytes:0 (0.0 b)  TX bytes:468 (468.0 b)
[root@node0 ~]#

[root@node1 ~]# ifconfig eth0 192.168.27.18/24 up在node1和node2上設置好相關配置,選擇虛擬機上的VMnet2與haproxy上的eth1的同一通信通道,再配置IP地址和默認網關接口,而后再提供不同的頁面以便測試用;

[root@node1 ~]# route add defaulte gw 192.168.27.18  # 網關指向haproxy主機的eth1地址
[root@node1 ~]# ping 192.168.27.10  # ping一下haproxy的節點看是否ping通
[root@node1 ~]# vim /var/www/html/index.html
<h1>node1.tanxw.com</h1>
[root@node1 ~]# service httpd start # 配置好之后就把web服務啟動起來,再訪問測試一下,測試的連接改為橋接方式                        
[root@node2 ~]# ifconfig eth0 192.168.27.19/24 up
[root@node2 ~]# route add defaulte gw 192.168.27.18  # 網關指向haproxy主機的eth1地址
[root@node2 ~]# ping 192.168.27.10  # ping一下haproxy的節點看是否ping通
[root@node2 ~]# vim /var/www/html/index.php
<h1>node2.tanxw.com</h1>
<?php
     phpinfo();
?>
[root@node2 ~]# service httpd start # 配置好之后就把web服務啟動起來,再訪問測試一下,測試的連接改為橋接方式

 

############## 以上的使用默認配置就可以了 #######################

frontend web *:80   # *表示haproxy監聽所有地址,監聽的端口為80
   # 定義訪問控制,表示以url以.css .js .html .php結尾的分別調度到哪台服務器上訪問
    acl url_static       path_end       -i .css .js .html    
    acl url_dynamic      path_end       -i .php

    # usr_backend表示使用backend服務,if表示如果滿足url_static這個條件就調度到這台服務器上
    use_backend        static          if url_static    
    default_backend    dynamic

backend static   # 定義調用后端的靜態頁面的服務器上
    server node1 192.168.27.18:80 check inter 3000 rise 2 fall 2 maxconn 5000
backend dynamic  # 定義調用后端的動態頁面的服務器上
    server node2 192.168.27.19:80 check inter 3000 rise 2 fall 2 maxconn 5000   
listen statspage # 定義監控管理接口的界面
    bind *:8888    # 定義訪問頁面端口
    stats enable    # 啟用管理界面
    stats hide-version    # 隱藏版本
    stats uri /admin?stats    # 訪問路徑
    stats auth xiao:linux    # 訪問時需要驗證登錄
    stats admin if TRUE    # 如果登錄成功就可以管理在線服務器

 

   第三步:配置haproxy的相關配置信息;

第四步:登錄到我們配置好的管理界面:

wKioL1NpyEvQG7J1AAFJFJbGr34770.jpg

wKioL1NpyJGDqzq2AAXT8Ek41q0971.jpg

第五步:配置好相關的配置之后就可以測試一下了,

wKioL1NpyMmRMgcTAAC7idNwGA8311.jpg

wKiom1NpyRCSCcioAAJBUPeM-gA579.jpg

最后我們再分別對這兩個頁面的請求做一下壓力測試看看:

wKioL1NpyUSDI2rLAAVLyURyTn4797.jpg

wKioL1NpyWbjjJwLAAV5MtRD1BY046.jpg

 

總結:

   HAProxy是一款比較輕量級的負載均衡服務器,特別適用於那些負載特大的web站點,這些站點通常又需要會話保持或七層處理。HAProxy運行在 當前的硬件上,完全可以支持數以萬計的並發連接。並且它的運行模式使得它可以很簡單安全的整合進您當前的架構中,同時可以保護你的web服務器不被暴露到 網絡上。


免責聲明!

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



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