HAProxy提供高可用性、負載均衡以及基於TCP和HTTP應用的代理,支持虛擬主機,它是免費、快速而且可靠的一種解決方案。
HAProxy特別 適用於那些負載特大的web站點,這些站點一般又須要會話保持或七層處理。HAProxy運行在當前的硬件上,徹底能夠支持數以萬計的併發鏈接。而且它的 運行模式使得它能夠很簡單安全的整合進您當前的架構中,同時能夠保護你的web服務器不被暴露到網絡上。
HAProxy實現了一種事件驅動,單一進程模型,此模型支持很是大的併發鏈接數。多進程或多線程模型受內存限制、系統調度器限制以及無處不在的鎖限 制,不多能處理數千併發鏈接。事件驅動模型由於在有更好的資源和時間管理的用戶端(User-Space) 實現全部這些任務,因此沒有這些問題。此模型的弊端是,在多核系統上,這些程序一般擴展性較差。這就是爲何他們必須進行優化以 使每一個CPU時間片(Cycle)作更多的工做。
--摘自百度百科php
實現過程圖:css
第一步:安裝httpd、php以及haproxy,這裏咱們直接用yum來安裝便可,這裏咱們使用三臺虛擬機來作測試,前端一臺haproxy作調度,後端兩臺httpd服務器提供web服務,在作動靜分離時時前端haproxy來判斷動態和靜態內容分別調度到哪臺服務器上;html
[root@node0 ~]# yum -y install httpd php haproxy
第二步:安裝好以後給這三臺虛擬配置好相關的網絡設備以及提供相關的測試頁面等,在eth1這張網卡上選擇相同的一個通訊通道,node0這臺虛擬機上haproxy的主機,node1和node2是不一樣的兩臺後端提供web服務器的虛擬主機;前端
[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地址和默認網關接口,然後再提供不一樣的頁面以便測試用;node
[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的相關配置信息;linux
第四步:登陸到咱們配置好的管理界面:web
第五步:配置好相關的配置以後就能夠測試一下了,vim
最後咱們再分別對這兩個頁面的請求作一下壓力測試看看:後端
總結:安全
HAProxy是一款比較輕量級的負載均衡服務器,特別適用於那些負載特大的web站點,這些站點一般又須要會話保持或七層處理。HAProxy運行在 當前的硬件上,徹底能夠支持數以萬計的併發鏈接。而且它的運行模式使得它能夠很簡單安全的整合進您當前的架構中,同時能夠保護你的web服務器不被暴露到 網絡上。