1. 程式人生 > >HAproxy實現web站點的動靜分離

HAproxy實現web站點的動靜分離

HAProxy提供高可用性、負載均衡以及基於TCP和HTTP應用的代理,支援虛擬主機,它是免費、快速並且可靠的一種解決方案。       HAProxy特別 適用於那些負載特大的web站點,這些站點通常又需要會話保持或七層處理。HAProxy執行在當前的硬體上,完全可以支援數以萬計的併發連線。並且它的 執行模式使得它可以很簡單安全的整合進您當前的架構中,同時可以保護你的web伺服器不被暴露到網路上。    HAProxy實現了一種事件驅動,單一程序模型,此模型支援非常大的併發連線數。多程序或多執行緒模型受記憶體限制、系統排程器限制以及無處不在的鎖限 制,很少能處理數千併發連線。事件驅動模型因為在有更好的資源和時間管理的使用者端(User-Space) 實現所有這些任務,所以沒有這些問題。此模型的弊端是,在多核系統上,這些程式通常擴充套件性較差。這就是為什麼他們必須進行優化以 使每個CPU時間片(Cycle)做更多的工作。

說明:

1.由於測試環境虛擬機器有限,此處將靜態頁面和圖片放在了一臺機器上

2.由於測試環境虛擬機器有限,此處動態頁面和靜態頁面各提供一臺機器,不考慮單點故障

3.使用者看到的伺服器為HAproxy對外提供的ip地址,看不到後面的各伺服器組

4.此處不涉及php頁面與資料庫的互動內容

準備環境

功用

ip地址

安裝軟體

作業系統

反向代理伺服器

192.168.20.136

Haproxy

靜態頁面伺服器

192.168.20.138

httpd

centos6.9

動態頁面伺服器

192.168.20.139

httpd、php

centos6.9

安裝HAproxy

yum install  haproxy -y

啟動配置檔案選項 

vi /etc/rsyslog.conf

啟用一下兩行

$ModLoad imudp

$UDPServerRun 514

新增以下一行

local2.*                      /var/log/haproxy.log

配置haproxy

(一般yum安裝軟體的存放路徑可用rpm -ql haproxy來檢視)

(下面內容找到相應位置直接全部替換,開頭其它原檔案預設即可)

vim /etc/haproxy/haproxy.cfg

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.20.138:80 check inter 3000 rise 2 fall 2 maxconn 5000

backend dynamic  # 定義呼叫後端的動態頁面的伺服器上

    server node2 192.168.20.139: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 lijunmin:linux    # 訪問時需要驗證登入

    stats admin if TRUE    # 如果登入成功就可以管理線上伺服器

啟動haproxy:

Service haproxy start

在192.168.20.138準備靜態頁面

Yum -y install httpd

vi /var/www/html/index.html hello,您訪問的是靜態頁面

啟動httpd:

Service httpd start

在192.168.20.139準備動態頁面

Yum -y install httpd php

vi /var/www/html/index.php

<?php
        phpinfo();
?>

啟動httpd:

Service httpd start

測試