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
測試