HAproxy部署配置
說明:
haproxy服務(wù)器IP:172.16.253.200/16 (外網(wǎng))、192.168.29.140/24(內(nèi)網(wǎng)) 博客服務(wù)器組IP:192.168.29.130/24、192.168.29.131/24 網(wǎng)站服務(wù)器組IP:192.168.29.120/24、192.168.29.121/24 默認(rèn)服務(wù)器組IP:192.168.29.110/24、192.168.29.111/24
一 HAProxy主機配置
[root@local ~]# yum install haproxy -y [root@local ~]# vim /etc/haproxy/haproxy.cfg
1 global部分
用來設(shè)定全局配置參數(shù),屬于進程級的配置,通常和操作系統(tǒng)配置有關(guān)。
global
log 127.0.0.1 local2 info##全局日志配置,local2為日志設(shè)備,info為日志級別
chroot /var/lib/haproxy
pidfile /var/run/haproxy.pid##指定HAProxy進程的Pid文件,啟動進程的用戶必須有訪問次文件的權(quán)限
maxconn 4000##設(shè)定每個進程可接受的最大并發(fā)連接數(shù)
user haproxy##設(shè)置運行haproxy進程的用戶,可使用UID代替
group haproxy##設(shè)置運行haproxy進程的組,可使用GID代替
daemon##設(shè)置haproxy進程進入后臺運行
stats socket /var/lib/haproxy/stats
2 default部分
默認(rèn)參數(shù)的配置部分。在次部分配置的參數(shù)值,默認(rèn)會自動引用到下面frontend、backend、listen部分中,因此,如果某些參數(shù)屬于公共的配置,只需在default部分添加一次即可。而如果在frontend、backend、和listen部分也配置了與default部分一樣的參數(shù),那么default部分的參數(shù)對應(yīng)的值自動被覆蓋。
defaults
mode http##設(shè)置haproxy實例默認(rèn)運行模式,有tcp、http、health三個值
log global##
option httplog
option dontlognull
option http-server-close
option forwardfor except 127.0.0.0/8
option redispatch
retries 3##設(shè)置后端服務(wù)器的失敗重試次數(shù)
timeout http-request 10s##
timeout queue 1m
timeout connect 5s
timeout client 10s##設(shè)置連接客戶端發(fā)送數(shù)據(jù)時的最長等待時間,默認(rèn)單位為毫秒
timeout server 10s##設(shè)置服務(wù)器端回應(yīng)客戶端數(shù)據(jù)發(fā)送的最長等待時間,默認(rèn)單位為毫秒
timeout http-keep-alive 10s##持久連接的持久時長
timeout check 2s##設(shè)置對后端服務(wù)器的監(jiān)測超時時間,默認(rèn)單位為毫秒
maxconn 3000
3 listen部分
此部分是frontend和backend部分的結(jié)合體
listenadmin_stats bind0.0.0.0:19088##設(shè)置監(jiān)控統(tǒng)計頁面的監(jiān)聽的IP和端口 modehttp log127.0.0.1 local2 err statsrefresh30s##設(shè)置哈haproxy監(jiān)控統(tǒng)計頁面的自動刷新時間 statsuri/haproxy-status##設(shè)置haproxy監(jiān)控統(tǒng)計頁面的URL路徑,可隨意指定,例如“stats uri /haproxy-status”,就可以通過http://IP:PORT//haproxy-status查看 statsrealmwelcomelogin Haproxy ##設(shè)置登錄haproxy統(tǒng)計頁面是密碼框上的提示信息 statsauthadmin:admin##設(shè)置登錄統(tǒng)計頁面的用戶名和密碼,可同時設(shè)置多個,每行一個 statshide-version##用來隱藏統(tǒng)計頁面上haproxy的版本信息 statsadminifTRUE##通過設(shè)置此選項,可以在監(jiān)控頁面上手工啟動或者禁用后端服務(wù)器
4 frontend部分
此部分用于設(shè)置接收用戶請求的前端虛擬節(jié)點。frontend可以根據(jù)ACL規(guī)則直接指定要使用的后端backend。
(1)frontend部分
frontend www bind*:80##此選項只能在frontend和listen部分使用,用于定義一個或多個監(jiān)聽的套接字。格式為:bind [:] interface modehttp##實例的運行模式 optionhttplog##啟用日志記錄http請求。默認(rèn)haproxy日志不記錄http請求 optionforwardfor##在由haproxy發(fā)往后端主機的請求報文中添加“X-Forwarded-For”首部,其值前端客戶端的地址;用于向后端主發(fā)送真實的客戶端IP optionhttpclose##次選項表示在客戶端和服務(wù)器端完成一次連接請求后,haproxy自動關(guān)閉此TCP連接 logglobal##表示使用全局的日志級別,引用global部分定義的log配置
(2)通過haproxy的ACL規(guī)則實現(xiàn)智能負(fù)載均衡
haproxy通過ACL完成兩個主要的功能:
1)通過設(shè)置ACL的規(guī)則檢查客戶端請求是否合法。如果符合ACL規(guī)則要求,那么將放行,如果不符合規(guī)則,則直接中斷請求。 2)符合ACL規(guī)則要求的請求將被提交到后端的backend服務(wù)器集群,進而實現(xiàn)基于ACL規(guī)則的負(fù)載均衡 3)haproxy的ACL規(guī)則通常用在frontend部分中
格式為:acl 自定義的acl名稱 acl方法 -i [ 匹配的路徑或文件]
acl:為關(guān)鍵字,表示定義ACL規(guī)則的開始,后面跟上自定義的ACL名稱。 acl方法:這個字段定義ACL的方法,haproxy定義了很多ACL方法,常用的有hdr_reg(host)、hdr_dom(host)、hdr_beg(host)、url_sub、url_dir、path_beg、path_end等 -i:表示不區(qū)分大小寫,后面跟上要匹配的路徑、文件或正則表達(dá)式。 說明:與ACL規(guī)則一起使用的haproxy參數(shù)還有use_backend,use_backend 后面跟實例名,表示在滿足ACL規(guī)則后去哪里請求哪個backend實例 acl host_wwwhdr_reg(host) -i ^(www.tb.com|tb.com) ##正則表達(dá)式匹配,表示如果開都有www.tb.com或tb.com acl host_bloghdr_beg(host) -i blog.##表示如果前綴包含blog.字符,則匹配 use_backend server_www if host_www##表示如果滿足host_www 則去請求后端的server_www主機 use_backend server_blog if host_blog default_backend server_default##表示如果前面都不匹配,則去請求server_default主機
5 backend部分
此部分用于設(shè)置后端服務(wù)器集群的配置,也是用來添加一組真實服務(wù)器,以處理客戶端的請求。
backend server_default定義后端主機,格式為:backend SERVER_NAME modehttp##實例的運行模式 optionredispatch##次參數(shù)用于cookie保持的環(huán)境中 optionabortonclose##自動結(jié)束當(dāng)前隊列中處理時間較長的進程 balance roundrobin##定義負(fù)載均衡算法,roundrobin為加權(quán)輪詢算法 cookieSERVERID##表示允許向cookie中插入SERVERID option httpchk GET /check_status.html##啟用http的服務(wù)監(jiān)測功能,采用GET方式,通過監(jiān)測check_status,html頁面的狀態(tài)來確定服務(wù)器的狀態(tài) server default1 192.168.29.110:80 cookie default1 weight 2 check inter 2000 rise 2 fall 3 server default2 192.168.29.111:80 cookie default2 weight 2 check inter 2000 rise 2 fall 3
定義后端主機,格式為:server[:port] [param*]
param為一系列參數(shù), cookie為當(dāng)前server指定其cookie值,用于實現(xiàn)基于cookie的會話黏性 weight 設(shè)置后端服務(wù)器的權(quán)重, check表示啟用后端服務(wù)器執(zhí)行健康狀態(tài)監(jiān)測, rise設(shè)置從故障狀態(tài)轉(zhuǎn)換到正常狀態(tài)需要成功檢查的次數(shù), fall設(shè)置后端服務(wù)器從從正常狀態(tài)轉(zhuǎn)換為不可以狀態(tài)需要檢查的次數(shù) disabled:標(biāo)記為不可用; redir:將發(fā)往此server的所有GET和HEAD類的請求重定向至指定的URL
backend server_www
modehttp
optionredispatch
optionabortonclose
balancesource##定義負(fù)載均衡算法,source為基于源IP 的算法,可以使同一客戶端IP的請求始終被轉(zhuǎn)發(fā)至某臺特定的后端服務(wù)器
cookieSERVERID
option httpchk GET /check_status.jsp
server www1 192.168.29.120:80 cookie www1 weight 6 check inter 2000 rise 2 fall 3
server www2 192.168.29.121:80 cookie www2 weight 6 check inter 2000 rise 2 fall 3
backend server_blog
modehttp
optionredispatch
optionabortonclose
balanceroundrobin
cookieSERVERID
option httpchk GET /check_blog.php
server blog1 192.168.29.130:80 cookie blog1 weight 5 check inter 2000 rise 2 fall 3
server blog2 192.168.29.131:80 cookie blog2 weight 5 check inter 2000 rise 2 fall 3
二 后端服務(wù)器配置
1 默認(rèn)服務(wù)器配置
(1)虛擬主機配置
[root@local ~]# vim /etc/httpd/conf.d/vhost.confDocumentRoot "/data/web1" Options Indexes FollowSymLinks AllowOverride None Require all granted
(2)狀態(tài)監(jiān)測頁配置
[root@local ~]# echo "This is check_status.page ip:192.168.29.110" > /data/web1/check_status.html
(3)默認(rèn)頁面配置
[root@local ~]# echo "This is default page ip:192.168.29.110" > /data/web1/index.html
按照以上方式配置192.168.29.111主機
2 網(wǎng)站服務(wù)器配置
(1)虛擬主機配置
[root@local ~]# vim /etc/httpd/conf.d/vhost.confDocumentRoot "/data/web1" ServerName www.tb.com Options Indexes FollowSymLinks AllowOverride None Require all granted
(2)狀態(tài)監(jiān)測頁配置
[root@local ~]# echo "This is check_status page ip:192.168.29.120" > /data/web1/check_status.jsp
(3)默認(rèn)頁面配置
[root@local ~]# echo "This is www page ip:192.168.29.120" > /data/web1/index.html
按照以上方式配置192.168.29.121主機
3 博客服務(wù)器組
(1)配置虛擬主機
[root@local ~]# vim /etc/httpd/conf.d/vhost.confDocumentRoot "/data/web1" ServerName www.blog.tb.com Options Indexes FollowSymLinks AllowOverride None Require all granted
(2)狀態(tài)監(jiān)測頁配置
[root@local ~]# echo "This is check_status page ip:192.168.29.130" > /data/web1/check_blog.php
(3)默認(rèn)頁面配置
[root@local ~]# echo "This is blog page ip:192.168.29.130" > /data/web1/index.html
按照以上方式配置192.168.29.131主機
三 測試
1 啟動haproxy
[root@local ~]# systemctl start haproxy
2 測試
(1)訪問網(wǎng)站服務(wù)器
[root@local ~]# for i in {1..10} ; do curl www.tb.com ; done
This is www page ip:192.168.29.120
This is www page ip:192.168.29.120
This is www page ip:192.168.29.120
This is www page ip:192.168.29.120
This is www page ip:192.168.29.120
This is www page ip:192.168.29.120
This is www page ip:192.168.29.120
This is www page ip:192.168.29.120
This is www page ip:192.168.29.120
This is www page ip:192.168.29.120
由于有會話粘性,所有都是用一臺服務(wù)器響應(yīng)請求
(2)訪問blog服務(wù)器
[root@local ~]# for i in {1..10} ; do curl blog.tb.com ; done
This is blog page ip:192.168.29.131
This is blog page ip:192.168.29.130
This is blog page ip:192.168.29.131
This is blog page ip:192.168.29.130
This is blog page ip:192.168.29.131
This is blog page ip:192.168.29.130
This is blog page ip:192.168.29.131
This is blog page ip:192.168.29.130
This is blog page ip:192.168.29.131
This is blog page ip:192.168.29.130
可以看到,輪詢算法生效了
(3)測試默認(rèn)服務(wù)器
[root@local ~]# for i in {1..10} ; do curl 172.16.253.200 ; done
This is default page ip:192.168.29.110
This is default page ip:192.168.29.111
This is default page ip:192.168.29.110
This is default page ip:192.168.29.111
This is default page ip:192.168.29.110
This is default page ip:192.168.29.111
This is default page ip:192.168.29.110
This is default page ip:192.168.29.111
This is default page ip:192.168.29.110
This is default page ip:192.168.29.111
成功了
3 haproxy狀態(tài)監(jiān)測頁面
(1)輸入http://172.16.253.200:19088/haproxy-status登錄狀態(tài)監(jiān)測頁
(2)輸入用戶名密碼
(3)登錄成功

鏈接:https://www.cnblogs.com/Sunzz/p/7300777.html
-
IP
+關(guān)注
關(guān)注
5文章
1862瀏覽量
155810 -
服務(wù)器
+關(guān)注
關(guān)注
14文章
10251瀏覽量
91478 -
主機
+關(guān)注
關(guān)注
0文章
1053瀏覽量
36741
原文標(biāo)題:HAproxy部署配置
文章出處:【微信號:magedu-Linux,微信公眾號:馬哥Linux運維】歡迎添加關(guān)注!文章轉(zhuǎn)載請注明出處。
發(fā)布評論請先 登錄
樹莓派安裝Haproxy實現(xiàn)***負(fù)載均衡
阿里云企業(yè)IPv6部署方案
安森美半導(dǎo)體開發(fā)方案助力客戶快速開發(fā)及部署物聯(lián)網(wǎng)設(shè)備
Keepalived+Haproxy如何實現(xiàn)高可用負(fù)載綜合實驗
企業(yè)云桌面要如何部署
一種快速、自動部署OpenStack云平臺的解決方案
賽靈思可重配置加速堆棧方案,旨在快速開發(fā)和部署加速平臺
將英特爾Quickassist技術(shù)與HAProxy的配合使用
全面剖析HAProxy 負(fù)載均衡器
HAproxy部署配置方案
評論