標籤: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