本節索引:
一、HAProxy介紹
二、HAProxy服務配置
三、實驗:實現HAProxy反向代理
四、實驗:實現根據url(uri算法)和客戶端來源(hdr算法)進行調度
五、實驗:實現基于cookie的會話綁定
六、實驗:啟用HAproxy統計接口
七、實驗:Errorfile實現自定義錯誤頁,狀態碼
一、HAPrxoy介紹
HAProxy是一個使用C語言編寫的自由及開放源代碼軟件,其提供高可用性、負載均衡,以及基于tcp和
http的應用程序代理。
mode http:七層反向代理,受端口數量限制
mode tcp:四層反向代理,不受套接字文件數量限制
官方網站:
官方文檔:
http://cbonte.github.io/haproxy-dconv/
HAProxy特別適用于那些負載特大的web站點,這些站點通常又需要會話保持或七層處理。HAProxy運行
在當前的硬件上,完全可以支持數以萬計的并發連接。并且它的運行模式使得它可以很簡單安全的整合進
您當前的架構中, 同時可以保護你的web服務器不被暴露到網絡上。
HAProxy實現了一種事件驅動, 單一進程模型,此模型支持非常大的并發連接數。多進程或多線程模型受
內存限制 、系統調度器限制以及無處不在的鎖限制,很少能處理數千并發連接。事件驅動模型因為在有更
好的資源和時間管理的用戶空間(User-Space) 實現所有這些任務,所以沒有這些問題。此模型的弊端是,
在多核系統上,這些程序通常擴展性較差。這就是為什么他們必須進行優化以 使每個CPU時間片(Cycle)做
更多的工作。
建議:生產環境運行在單進程模型下,便于分析,排查問題
二、HAProxy服務配置
程序環境:
主程序:/usr/sbin/haproxy
主配置文件:/etc/haproxy/haproxy.cfg
Unit file:/usr/lib/systemd/system/haproxy.service
配置段:
???? global:全局配置段
進程及安全配置相關的參數
性能調整相關參數
Debug參數
用戶列表
peers
proxies:代理配置段
defaults:為frontend, listen, backend提供默認配置;
fronted:前端,相當于nginx, server {}
backend:后端,相當于nginx, upstream {}
listen:同時擁前端和后端
簡單的配置示例:
frontend web
??????????????????????? bind *:80??????
??????????????????????? default_backend???? websrvs
backend websrvs
??????????????????????? balance roundrobin
??????????????????????? server srv1 172.16.100.6:80 check
??????????????????????? server srv2 172.16.100.7:80 check
global配置參數:
進程及安全管理:chroot, daemon,user, group, uid, gid
log:定義全局的syslog服務器;最多可以定義兩個;
log <address> [len <length>] <facility> [max level [min level]]
nbproc <number>:要啟動的haproxy的進程數量;
ulimit-n <number>:每個haproxy進程可打開的最大文件數;
性能調整:
maxconn <number>:設定每個haproxy進程所能接受的最大并發連接數;
Sets the maximum per-process number of concurrent connections to <number>.
總體的并發連接數:nbproc * maxconn
maxconnrate <number>:每個進程每秒種所能創建的最大連接數量;
Sets the maximum per-process number of connections per second to <number>.
maxsessrate <number>:每個進程每秒所能創建最大會話數
maxsslconn <number>:設定每個haproxy進程所能接受的ssl的最大并發連接數;
Sets the maximum per-process number of concurrent SSL connections to <number>.
?spread-checks <0..50, in percent>
三、實驗:實現HAProxy反向代理
前期準備:
虛擬機4臺
HAproxy:192.168.30.10
node1:192.168.30.17
node2:192.168.30.27
Client:192.168.30.16
具體步驟:
HAProxy服務器操作:
yum install haproxy
修改配置文件
vim /etc/haproxy/haproxy.cfg
frontend main *:80
???????? default_backend? websrvs
backend websrvs
???????? balance roundrobin
???????? server websrv1 192.168.30.17:80 check????????? #check 健康性檢查
???????? server websrv2 192.168.30.27:80 check
重啟haproxy
systemctl restart haproxy
node1,node2開啟http服務
[root@node1 ~]# systemctl start httpd
[root@node1 ~]# echo Backend Server 1 > /var/www/html/index.html
[root@node2 ~]# systemctl start httpd
[root@node2 ~]# echo Backend Server 2 > /var/www/html/index.html
客戶端訪問測試:
添加權重:
vim /etc/haproxy/haproxy.cfg
backend websrvs
??? balance???? roundrobin
??? server? websrvs1 192.168.30.17:80 check weight 2
??? server? websrvs2 192.168.30.27:80 check
重啟HAProxy服務網
systemctl restart haproxy.service
訪問測試:
四、實驗:實現根據url(uri算法)和客戶端來源(hdr算法)進行調度
實現uri算法
對同一url的訪問請求都調度至同一個后端服務器
注意:如果HAProxy調度后端為緩存服務器,就要使用uri算法,且使用動態算法,一致性哈希
實驗前期準備承接實現HAProxy反向代理中的環境
具體步驟:
修改配置文件
vim /etc/haproxy/haproxy.cfg
重啟haproxy服務
systemctl restart haproxy.service
在node1,node2上分別創建http頁面test1–test10
訪問測試:
實現hdr算法
來自同一客戶端的請求都調度至同一個后端服務器
修改配置文件
vim /etc/haproxy/haproxy.cfg
重啟haproxy服務
systemctl restart haproxy.service
訪問測試:
五、實驗:實現基于cookie的會話綁定
前期準備:
虛擬機4臺
HAproxy:192.168.30.10
node1:192.168.30.17
node2:192.168.30.27
Client:192.168.30.16
具體步驟:
修改配置文件
vim /etc/haproxy/haproxy.cfg
重啟haproxy服務
systemctl restart haproxy.service
訪問測試:
重啟服務前在server1與server2之間輪詢調度,重啟后將綁定在其中一臺server中
注意:curl命令之間訪問不能綁定cookie
六、實驗:啟用HAproxy統計接口
統計接口啟用相關的參數:
? stats enable
啟用統計頁;基于默認的參數啟用stats page;
????????????????????????? – stats uri?? : /haproxy?stats
????????????????????????? – stats realm : “HAProxy Statistics”
????????????????????????? – stats auth? : no authentication
????????????????????????? – stats scope : no restriction
????????????????????????????????????????????????????
??? stats auth <user>:<passwd>
認證時的賬號和密碼,可使用多次;
???? stats realm <realm>
認證時的realm;
??????? stats uri <prefix>
自定義stats page uri
????? stats refresh <delay>
設定自動刷新時間間隔;
???? stats admin { if | unless } <cond>
啟用stats page中的管理功能
具體步驟:
只需在frontend或者backend中添加一行
stats enable
重啟haproxy服務
systemctl restart haproxy.service
瀏覽器訪問:http://192.168.30.10/haproxy?stats
避免狀態頁被其他客戶端訪問:
(1)修改狀態頁監聽端口
(2)修改狀態頁url
(3)添加安全認證
啟用state page中的管理功能:
可利用此功能實現腳本執行發布,網上搜索基于haproxy的發布腳本
再次訪問:
七、實驗:Errorfile實現自定義錯誤頁,狀態碼
修改前端響應報文及后端請求報文頭部信息
前端響應報文刪除一個頭部信息
修改前的報文頭部信息:
訪問測試
前端響應報文添加一個頭部信息
訪問測試
本文來自投稿,不代表Linux運維部落立場,如若轉載,請注明出處:http://www.www58058.com/102826
寫的不錯