四層轉發tcp(lvs)七層代理http(haproxy)
穩定性的适合用lvs 網站負載适合用haproxy nginx
haproxy(單核):
HAProxy 提供高可用性、負載均衡以及基于 TCP 和 HTTP 應用的代理,支援虛拟主機,
它是免費、快速并且可靠的一種解決方案。HAProxy 特别适用于那些負載特大的 web 站點, 這些站點通常又需要會話保持或七層處理。HAProxy 運作在目前的硬體上,完全可以支援數以萬計的并發連接配接。并且它的運作模式使得它可以很簡單安全的整合進您目前的架構中, 同時可以保護你的 web 伺服器不被暴露到網絡上。
三台虛拟機:
虛拟機3排程器:
yum install haproxy -y (建議用rpm包裝)
![](https://img.laitimes.com/img/9ZDMuAjOiMmIsIjOiQnIsIyZuBnL0czM1cDMxUDOz81ctQzXw12dtMzXtdXLwgHMwUzXodXLn5GcuMDNw0kRyU3N1Q2QHFUQ6xEMxRlb1AlTqFTbvl2S39CXDR0LcVEOvwlMw00LcJDMzZWe39CXvwVbvNmLvR3YxUjL0M3Lc9CX6MHc0RHaiojIsJye.png)
cd /etc/haproxy/
vim haproxy.cfg
監控頁面添加認證:
listen admin *:8080
stats enable
stats uri /status # 監控頁面位址
stats authadmin:westos # 管理帳号和密碼
stats refresh 5s #重新整理頻率
listen westos *:80 #監聽的執行個體名稱,位址和端口
balance roundrobin #負載均衡算法
server web1172.25.42.13:80 check
server web2 172.25.42.14:80 check
兩台real server
/etc/init.d/httpd start
日志監控:
$ModLoad imudp #接受 haproxy 日志
$UDPServerRun 514
vim /etc/rsyslog.conf
*.info;mail.none;authpriv.none;cron.none;local2.none /var/log/messages
local2.* /var/log/haproxy.log #日志檔案位置
自帶健康檢查:(測試)
動态靜态通路分離:(可以自己加虛拟主機)
frontend westos *:80
acl url_static path_beg -i /p_w_picpaths
acl url_static path_end -i .jpg .gif .png
use_backend static if url_static
default_backend app (預設通路app)
backend static (靜态)
balance roundrobin
backend app
server web1 172.25.42.13:80 check
錯誤重定向:
acl url_static path_beg -i /p_w_picpaths (以什麼開頭 預設根目錄)
acl url_static path_end -i .jpg .gif .png (以什麼結尾)
acl badhost src 172.25.42.250 (設定誰不能通路我)
block if badhost
errorloc 403 http://172.25.42.12:8000(注意端口不要沖突)(403:伺服器拒絕你的通路 伺服器設定你是壞的 )(如果是403錯誤就重定向到 172.25.254.12:8000)
redirect location http://172.25.42.12:8000 ifbadhost (如果出現錯誤通路 就重定向 不管是什麼錯誤)
use_backend static if url_static
default_backend app
backend static
server local 172.25.42.12:8000backup
(如果後端realserver down掉 則排程報錯頁面 但是正常情況下不會通路 因為 是“backup”)
301永久重定向:(一般推薦用301 302臨時重定向 有惡意刷點選的嫌疑)
aclwestos.org hdr_beg(host) -i westos.org
acl 172.25.42.12 hdr_beg(host) -i172.25.42.12
# block if badhost
# errorloc 403http://172.25.42.12:8000
# redirect locationhttp://172.25.42.12:8000 if badhost
redirect code 301 locationhttp://www.westos.org if westos.org
(以westos.org通路自動重定向 www.westos.org)
redirect code 301 locationhttp://www.westos.org if 172.25.42.12
(以172.25.42.12通路自動重定向 www.westos.org)
讀寫分離:
real server(兩台): yum install php -y
php頁面:
chmod 777 upload (預設上傳目錄一定要給權限)
排程機器:
acl read method GET
acl read method HEAD //兩個read write 隻用一個就行
acl write method PUT
acl write method POST
use_backend app if write
default_backend static (預設靜态頁面 為了測試 剛開始 www.westos.org 時是172.25.42.14 而寫(上傳時 卻是在172.25.254.13 上進行的)做到了讀寫分離)
server web1 172.25.42.13:80 check(預設會上傳到這個real server)
server local 172.25.42.12:8000backup
注意: /etc/init.d/haporxy reload real server:/etc/init.d/httpd restart