天天看點

基于HAproxy的web動靜分離及輸出狀态檢測頁面

一、簡介

   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>&lt;?php</code>

<code>        </code><code>phpinfo();</code>

<code>?&gt;</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,如需轉載請自行聯系原作者