一、簡介
HAProxy提供高可用性、負載均衡以及基于TCP和HTTP應用的代 理,支援虛拟主機,它是免費、快速并且可靠的一種解決方案。HAProxy特别适用于那些負載特大的web站點,這些站點通常又需要會話保持或七層處理。HAProxy運作在目前的硬體上,完全可以支援數以萬計的并發連接配接。并且它的運作模式使得它可以很簡單安全的整合進您目前的架構中, 同時可以保護你的web伺服器不被暴露到網絡上。
HAProxy實作了一種事件驅動, 單一程序模型,此模型支援非常大的并發連接配接數。多程序或多線程模型受記憶體限制 、系統排程器限制以及無處不在的鎖限制,很少能處理數千并發連接配接。事件驅動模型因為在有更好的資源和時間管理的使用者端(User-Space) 實作所有這些任務,是以沒有這些問題。此模型的弊端是,在多核系統上,這些程式通常擴充性較差。這就是為什麼他們必須進行優化以 使每個CPU時間片(Cycle)做更多的工作。
HAProxy是免費、極速且可靠的用于為TCP和基于HTTP應用程式提供高可用、負載均衡和代理服務的解決方案,尤其适用于高負載且需要持久連接配接或7層處理機制的web站點。
二、安裝配置
1.拓撲圖
<a href="http://s3.51cto.com/wyfs02/M01/25/8F/wKiom1NkiSjh5emhAAENceqyIUY124.jpg" target="_blank"></a>
說明:1.由于測試環境虛拟機有限,此處将靜态頁面和圖檔放在了一台機器上
2.由于測試環境虛拟機有限,此處動态頁面和靜态頁面各提供一台機器,不考慮單點故障
3.使用者看到的伺服器為HAproxy對外提供的ip位址,看不到後面的各伺服器組
4.此處不涉及php頁面與資料庫的互動内容
2.ip位址規劃
功用
ip位址
安裝軟體
作業系統
反向代理伺服器
192.168.1.201
Haproxy
centos6.5
靜态頁面伺服器
192.168.1.202
httpd
動态頁面伺服器
192.168.1.203
httpd、php
3.安裝配置HAproxy
①、安裝
HAproxy可以通過yum源安裝也可以通過源碼編譯安裝,經檢視得知yum源中提供的1.4.24版本,而官方提供的為1.4.25版本,所有本次我們通過yum來進行安裝
1
<code>[root@node1 ~]# yum install haproxy -y</code>
②、啟動配置檔案選項
2
3
4
5
6
<code>[root@node1 ~]# vi /etc/rsyslog.conf</code>
<code>啟用一下兩行</code>
<code>$ModLoad imudp</code>
<code>$UDPServerRun </code><code>514</code>
<code>添加以下一行</code>
<code>local2.* /</code><code>var</code><code>/log/haproxy.log</code>
将rsyslog日志檔案系統重新開機
③、配置動靜分離
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
66
67
68
69
70
71
72
73
74
75
<code>#---------------------------------------------------------------------</code>
<code># Example configuration </code><code>for</code> <code>a possible web application. See the</code>
<code># full configuration options online.</code>
<code>#</code>
<code># http:</code><code>//haproxy.1wt.eu/download/1.4/doc/configuration.txt</code>
<code># Global settings</code>
<code>global</code>
<code> </code><code># to have these messages end up </code><code>in</code> <code>/</code><code>var</code><code>/log/haproxy.log you will</code>
<code> </code><code># need to:</code>
<code> </code><code>#</code>
<code> </code><code># </code><code>1</code><code>) configure syslog to accept network log events. This </code><code>is</code> <code>done</code>
<code> </code><code># by adding the </code><code>'-r'</code> <code>option to the SYSLOGD_OPTIONS </code><code>in</code>
<code> </code><code># /etc/sysconfig/syslog</code>
<code> </code><code># </code><code>2</code><code>) configure local2 events to go to the /</code><code>var</code><code>/log/haproxy.log</code>
<code> </code><code># file. A line like the following can be added to</code>
<code> </code><code># /etc/sysconfig/syslog</code>
<code> </code><code># local2.* /</code><code>var</code><code>/log/haproxy.log</code>
<code> </code><code>log </code><code>127.0</code><code>.</code><code>0.1</code> <code>local2</code>
<code> </code><code>chroot /</code><code>var</code><code>/lib/haproxy</code>
<code> </code><code>pidfile /</code><code>var</code><code>/run/haproxy.pid</code>
<code> </code><code>maxconn </code><code>4000</code>
<code> </code><code>user haproxy</code>
<code> </code><code>group haproxy</code>
<code> </code><code>daemon</code>
<code> </code><code># turn on stats unix socket</code>
<code> </code><code>stats socket /</code><code>var</code><code>/lib/haproxy/stats</code>
<code># common defaults that all the </code><code>'listen'</code> <code>and </code><code>'backend'</code> <code>sections will</code>
<code># </code><code>use</code> <code>if</code> <code>not designated </code><code>in</code> <code>their block</code>
<code>defaults</code>
<code> </code><code>mode http</code>
<code> </code><code>log global</code>
<code> </code><code>option httplog</code>
<code> </code><code>option dontlognull</code>
<code> </code><code>option http-server-close</code>
<code> </code><code>option forwardfor except </code><code>127.0</code><code>.</code><code>0.0</code><code>/</code><code>8</code>
<code> </code><code>option redispatch</code>
<code> </code><code>retries </code><code>3</code>
<code> </code><code>timeout http-request 10s</code>
<code> </code><code>timeout queue 1m</code>
<code> </code><code>timeout connect 10s</code>
<code> </code><code>timeout client 1m</code>
<code> </code><code>timeout server 1m</code>
<code> </code><code>timeout http-keep-alive 10s</code>
<code> </code><code>timeout check 10s</code>
<code> </code><code>maxconn </code><code>3000</code>
<code># main frontend which proxys to the backends</code>
<code>frontend main *:</code><code>80</code>
<code> </code><code>acl url_static path_beg -i /</code><code>static</code> <code>/images /javascript /stylesheets</code>
<code> </code><code>acl url_static path_end -i .jpg .gif .png .css .js .html</code>
<code> </code><code>acl host_static hdr_beg(host) -i img. video. download. ftp. imgs.</code>
<code> </code><code>use_backend </code><code>static</code> <code>if</code> <code>url_static</code>
<code> </code><code>default_backend app</code>
<code># </code><code>static</code> <code>backend </code><code>for</code> <code>serving up images, stylesheets and such</code>
<code>backend </code><code>static</code>
<code> </code><code>balance roundrobin</code>
<code> </code><code>server </code><code>static</code> <code>192.168</code><code>.</code><code>1.202</code><code>:</code><code>80</code> <code>check maxconn </code><code>2000</code>
<code># round robin balancing between the </code><code>var</code><code>ious backends</code>
<code>backend app</code>
<code> </code><code>server app1 </code><code>192.168</code><code>.</code><code>1.203</code><code>:</code><code>80</code> <code>check maxconn </code><code>200</code>
④、準備靜态頁面與動态頁面
<code>靜态頁面</code>
<code>[root@node2 ~]# vi /</code><code>var</code><code>/www/html/index.html</code>
<code>hello,wangfeng7399</code>
動态頁
<code>[root@node3 ~]# yum install -y php httpd</code>
<code>[root@node3 html]# vi index.php</code>
<code><?php</code>
<code> </code><code>phpinfo();</code>
<code>?></code>
<code>~</code>
⑤、測試
<a href="http://s3.51cto.com/wyfs02/M01/25/90/wKioL1NkmUmjxYkoAATbpVIjZps749.jpg" target="_blank"></a>
<a href="http://s3.51cto.com/wyfs02/M00/25/90/wKiom1NkmXTB5CN3AABw1VvkVmM647.jpg" target="_blank"></a>
⑥、啟動狀态輸出頁面,在配置檔案添加如下行
<code>listen stats</code>
<code> </code><code>mode http</code>
<code> </code><code>bind *:</code><code>1090</code>
<code> </code><code>stats enable</code>
<code> </code><code>stats hide-version</code>
<code> </code><code>stats uri /hadmin?stats</code>
<code> </code><code>stats realm Haproxy\ Statistics</code>
<code> </code><code>stats auth admin:admin</code>
<code> </code><code>stats admin </code><code>if</code> <code>TRUE</code>
重新載入服務
<a href="http://s3.51cto.com/wyfs02/M01/25/90/wKiom1NkmumTDo-qAACjYZ2UDWw454.jpg" target="_blank"></a>
<a href="http://s3.51cto.com/wyfs02/M00/25/90/wKioL1Nkmr_S1e-nAAhWLhOGAe8217.jpg" target="_blank"></a>
大功告成 ,由于本人水準有限,可能有錯誤,請各位大牛比對指正
本文轉自wangfeng7399 51CTO部落格,原文連結:http://blog.51cto.com/wangfeng7399/1405758,如需轉載請自行聯系原作者