CentOS 6.5 HAProxy+apache實現web服務動靜分離

來源:互聯網
上載者:User

標籤:haproxy   高可用代理   反向 Proxy   apache   linux   web伺服器   

HAProxy提供高可用性、負載平衡以及基於TCP和HTTP應用的代理,支援虛擬機器主機,它是免費、快速並且可靠的一種解決方案。

   HAProxy提供高可用性、負載平衡以及基於TCP和HTTP應用的代理,支援虛擬機器主機,它是免費、快速並且可靠的一種解決方案。HAProxy特別適用於那些負載特大的web網站,這些網站通常又需要會話保持或七層處理。HAProxy運行在當前的硬體上,完全可以支援數以萬計的並發串連。並且它的運行模式使得它可以很簡單安全的整合進您當前的架構中,同時可以保護你的web伺服器不被暴露到網路上。

   HAProxy實現了一種事件驅動,單一進程模型,此模型支援非常大的並發串連數。多進程或多執行緒模式受記憶體限制、系統調度器限制以及無處不在的鎖限制,很少能處理數千並發串連。事件驅動模型因為在有更好的資源和時間管理的使用者端(User-Space) 實現所有這些任務,所以沒有這些問題。此模型的弊端是,在多核系統上,這些程式通常擴充性較差。這就是為什麼他們必須進行最佳化以 使每個CPU時間片(Cycle)做更多的工作。
                                                                         --來自百度百科

實現過程圖:

650) this.width=650;" src="http://s3.51cto.com/wyfs02/M02/26/0B/wKioL1Npn2qDdiOwAAEUH5H3E2Y175.jpg" title="haproxy.jpg" alt="wKioL1Npn2qDdiOwAAEUH5H3E2Y175.jpg" />


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

[[email protected] ~]# yum -y install httpd php haproxy

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

650) this.width=650;" src="http://s3.51cto.com/wyfs02/M02/26/16/wKiom1NpycrTigk9AAFTVY806zA030.jpg" title="7.png" alt="wKiom1NpycrTigk9AAFTVY806zA030.jpg" />

[[email protected] ~]# ifconfig eth1 192.168.27.10/24 up   # 給eth1配置ip地址
[[email protected] ~]# 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)
[[email protected] ~]#

在node1和node2上設定好相關配置,選擇虛擬機器上的VMnet2與haproxy上的eth1的同一通訊通道,再配置IP地址和預設閘道介面,而後再提供不同的頁面以便測試用;

[[email protected] ~]# ifconfig eth0 192.168.27.18/24 up

[[email protected] ~]# route add defaulte gw 192.168.27.18  # 網關指向haproxy主機的eth1地址

[[email protected] ~]# ping 192.168.27.10  # ping一下haproxy的節點看是否ping通

[[email protected] ~]# vim /var/www/html/index.html

<h1>node1.tanxw.com</h1>

[[email protected] ~]# service httpd start # 配置好之後就把web服務啟動起來,再訪問測試一下,測試的串連改為橋接方式

[[email protected] ~]# ifconfig eth0 192.168.27.19/24 up

[[email protected] ~]# route add defaulte gw 192.168.27.18  # 網關指向haproxy主機的eth1地址

[[email protected] ~]# ping 192.168.27.10  # ping一下haproxy的節點看是否ping通

[[email protected] ~]# vim /var/www/html/index.php

<h1>node2.tanxw.com</h1>

<?php

     phpinfo();

?>

[[email protected] ~]# service httpd start # 配置好之後就把web服務啟動起來,再訪問測試一下,測試的串連改為橋接方式

   第三步:配置haproxy的相關配置資訊;

############## 以上的使用預設配置就可以了 #######################

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    # 如果登入成功就可以管理線上服務器

第四步:登入到我們配置好的管理介面:

650) this.width=650;" src="http://s3.51cto.com/wyfs02/M00/26/17/wKioL1NpyEvQG7J1AAFJFJbGr34770.jpg" title="1.png" alt="wKioL1NpyEvQG7J1AAFJFJbGr34770.jpg" />

650) this.width=650;" src="http://s3.51cto.com/wyfs02/M02/26/17/wKioL1NpyJGDqzq2AAXT8Ek41q0971.jpg" title="2.png" alt="wKioL1NpyJGDqzq2AAXT8Ek41q0971.jpg" />

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

650) this.width=650;" src="http://s3.51cto.com/wyfs02/M01/26/17/wKioL1NpyMmRMgcTAAC7idNwGA8311.jpg" title="3.png" alt="wKioL1NpyMmRMgcTAAC7idNwGA8311.jpg" />

650) this.width=650;" src="http://s3.51cto.com/wyfs02/M00/26/16/wKiom1NpyRCSCcioAAJBUPeM-gA579.jpg" title="4.png" alt="wKiom1NpyRCSCcioAAJBUPeM-gA579.jpg" />

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

650) this.width=650;" src="http://s3.51cto.com/wyfs02/M01/26/17/wKioL1NpyUSDI2rLAAVLyURyTn4797.jpg" title="5.png" alt="wKioL1NpyUSDI2rLAAVLyURyTn4797.jpg" />

650) this.width=650;" src="http://s3.51cto.com/wyfs02/M02/26/17/wKioL1NpyWbjjJwLAAV5MtRD1BY046.jpg" title="6.png" alt="wKioL1NpyWbjjJwLAAV5MtRD1BY046.jpg" />


總結:

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

本文出自 “溫水煮青蛙” 部落格,請務必保留此出處http://tanxw.blog.51cto.com/4309543/1407694

聯繫我們

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