日韩av黄I国产麻豆传媒I国产91av视频在线观看I日韩一区二区三区在线看I美女国产在线I麻豆视频国产在线观看I成人黄色短片

歡迎訪問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) >

HAProxy详解(二):HAProxy基础配置与应用实例

發(fā)布時(shí)間:2025/7/25 37 豆豆
生活随笔 收集整理的這篇文章主要介紹了 HAProxy详解(二):HAProxy基础配置与应用实例 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

一.HAProxy基礎(chǔ)配置與應(yīng)用實(shí)例:

????1.快速安裝HAProxy集群軟件:

????????????HAProxy的官網(wǎng):?https://www.haproxy.org/#down下載HAProxy的源碼包。

???????????? 安裝:? ??????????????

????????????????????[root@data-1-1 ~]# tar zxvf haproxy-1.4.24.tar.gz

????????????????????[root@data-1-1 ~]# cd haproxy-1.4.24

????????????????????查看haproxy的安裝文件

????????????????????????????[root@data-1-1 haproxy-1.4.24]# more README

????????????????????[root@data-1-1 haproxy-1.4.24]# make TARGET=linux2628 PREFIX=/usr/local/haproxy? ?

????????????????#參數(shù)說(shuō)明

????????????????????????TARGET=linux26 #內(nèi)核版本,使用uname -r查看內(nèi)核,如:2.6.18-371.el5,此時(shí)該參數(shù)就為linux26;kernel 大于2.6.28的用:TARGET=linux2628

????????????????????????ARCH=x86_64 #系統(tǒng)位數(shù)

????????????????????????PREFIX=/usr/local/haprpxy #/usr/local/haprpxy為haprpxy安裝路徑

????????????????????[root@data-1-1 haproxy-1.4.24]# make install PREFIX=/usr/local/haproxy

????????????????????????#將HAProxy安裝到/usr/local/haproxy?下? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ??

????????????????????[root@data-1-1 haproxy-1.4.24]# mkdir /usr/local/haproxy/conf

????????????????????????#HAProxy默認(rèn)不創(chuàng)建配置文件目錄,這里是創(chuàng)建HAProxy配置文件目錄

????????????????????[root@data-1-1 haproxy-1.4.24]# cp examples/haproxy.cfg /usr/local/haproxy/conf/

????????????????????????#HAProxy安裝完成后,默認(rèn)安裝目錄中沒(méi)有配置文件,這里是將源碼包里面的示例配置文件復(fù)制到配置文件目錄。

????2.HAProxy基礎(chǔ)配置文件詳解:

? ? ? ? ? ??1.配置文件概述:

????????????????根據(jù)功能和用途,HAProxy配置文件主要由5個(gè)部分組成,但有些部分并不是必需的,可以根據(jù)需要選擇相應(yīng)的部分進(jìn)行配置。

????????????????????(1)global部分

????????????????????????????用來(lái)設(shè)定全局配置參數(shù),屬于進(jìn)程級(jí)的配置,通常和操作系統(tǒng)配置有關(guān)。

????????????????????(2)defaults部分

????????????????????????????默認(rèn)參數(shù)的配置部分。在此部分設(shè)置的參數(shù)值,默認(rèn)會(huì)自動(dòng)引用到下面的frontend、backend和listen部分中,因此,如果某些參數(shù)屬于共用配置,只需在defaults部分添加一次即可。而如果在frontend、backend和listen部分中也配置了與defaults部分一樣的參數(shù),那么defaults部分參數(shù)對(duì)應(yīng)的值自動(dòng)被覆蓋。

????????????????????(3)frontend部分

????????????????????????????此部分用于設(shè)置接收用戶(hù)請(qǐng)求的前端虛擬節(jié)點(diǎn)。frontend是在HAProxy1.3版本之后才引入的一個(gè)組件,同時(shí)引入的還有backend組件。通過(guò)引入這些組件,在很大程度上簡(jiǎn)化了HAProxy配置文件的復(fù)雜性。frontend可以根據(jù)ACL規(guī)則直接指定要使用的后端backend。

????????????????????(4)backend部分

?????????????????????????????此部分用于設(shè)置集群后端服務(wù)集群的配置,也就是用來(lái)添加一組真實(shí)服務(wù)器,以處理前端用戶(hù)的請(qǐng)求。添加的真實(shí)服務(wù)器類(lèi)似于LVS中的real server節(jié)點(diǎn)。

????????????????????(5)listen部分

????????????????????????????此部分是frontend部分和backend部分的結(jié)合體。在HAProxy1.3版本之前,HAProxy的所有配置選項(xiàng)都在這個(gè)部分中設(shè)置。為了保持兼容性,HAProxy新的版本仍然保留了listen組件的配置方式。目前在HAProxy中,兩種配置方式任選其一即可。

????????????????2.HAProxy配置文件詳解:

????????????????????????根據(jù)上面介紹的5個(gè)部分對(duì)HAProxy的配置文件進(jìn)行說(shuō)明:

????????????????????????????(1)global部分

????????????????????????????????????配置示例如下:

????????????????????????????????????????global

????????????????????????????????????????????????????log????127.0.0.1? ? local0 info

????????????????????????????????????????????????????maxconn????4096

????????????????????????????????????????????????? ? user? ? nobody

????????????????????????????????????????????????????group????nobody

????????????????????????????????????????????????????daemon

????????????????????????????????????????????????????nbproc????1

????????????????????????????????????????????????????pidfile????/usr/local/haproxy/logs/haproxy.pid

????????????????????????????????????每個(gè)選項(xiàng)的含義:

????????????????????????????????????????□ log : 全局的日志配置,local0是日志設(shè)備,info表示日志級(jí)別。其中日志級(jí)別有err、warning、info、debug4種可選。這個(gè)配置表示使用127.0.0.1上的rsyslog服務(wù)中的local0日志設(shè)備,記錄日志等級(jí)為info。

????????????????????????????????????????■?maxconn : 設(shè)定每個(gè)HAProxy進(jìn)程可接受的最大并發(fā)連接數(shù),此選項(xiàng)等同于Linux命令行選項(xiàng)“ulimit -n”。

??????????????????????????????????????? □??user/group : 設(shè)置HAProxy進(jìn)程的用戶(hù)和組,也可使用用戶(hù)和組的uid和gid值來(lái)替代。

????????????????????????????????????????■ daemon : 設(shè)置HAProxy進(jìn)程進(jìn)入后臺(tái)運(yùn)行。這是推薦的運(yùn)行模式。

????????????????????????????????????????□ nbproc : 設(shè)置HAProxy啟動(dòng)時(shí)可創(chuàng)建的進(jìn)程數(shù),此參數(shù)要求將HAProxy運(yùn)行模式設(shè)置為daemon,默認(rèn)只啟動(dòng)一個(gè)進(jìn)程。根據(jù)使用經(jīng)驗(yàn),該值的設(shè)置應(yīng)該小于服務(wù)器的CPU核數(shù)。創(chuàng)建多個(gè)進(jìn)程,能夠減少每個(gè)進(jìn)程的任務(wù)隊(duì)列,但是過(guò)多的進(jìn)程可能會(huì)導(dǎo)致進(jìn)程崩潰。

????????????????????????????????????????■ pidfile : 指定HAProxy進(jìn)程的pid文件。啟動(dòng)進(jìn)程的用戶(hù)必須有訪問(wèn)此文件的權(quán)限。

????????????????????????????(2)defaults部分

????????????????????????????????????配置示例如下:

????????????????????????????????????????defaults

????????????????????????????????????????????????????????mode? ? http

????????????????????????????????????????????????????????retries????3

? ? ? ? ? ????????????????????????????????????????????? timeout????connect????10s

????????????????????????????????????????????????????????timeout????client????20s

????????????????????????????????????????????????????????timeout????server????30s

????????????????????????????????????????????????????????timeout????check????5s

????????????????????????????????????每個(gè)選項(xiàng)的含義:

????????????????????????????????????????□ mode : 設(shè)置HAProxy實(shí)例默認(rèn)的運(yùn)行模式,有tcp、http、health三個(gè)可選值。

????????????????????????????????????????????????☆ tcp模式 :在此模式下,客戶(hù)端和服務(wù)器端之間將建立一個(gè)全雙工的連接,不會(huì)對(duì)七層報(bào)文做任何類(lèi)型的檢查,默認(rèn)為tcp模式,經(jīng)常用于SSL、SSH、SMTP等應(yīng)用。

????????????????????????????????????????????????★ http模式:在此模式下,客戶(hù)端請(qǐng)求在轉(zhuǎn)發(fā)至后端服務(wù)器之前將會(huì)被深度分析,所有不與RFC格式兼容的請(qǐng)求都會(huì)被拒絕。

????????????????????????????????????????????????☆ health模式:目前此模式基本已經(jīng)廢棄,不再多說(shuō)。

????????????????????????????????????????■?retries:設(shè)置連接后服務(wù)器的失敗重試次數(shù),如果連接失敗的次數(shù)超過(guò)這里設(shè)置的值,HAProxy會(huì)將對(duì)應(yīng)的后端服務(wù)器標(biāo)記為不可用。此參數(shù)也可在后面部分進(jìn)行設(shè)置。

????????????????????????????????????????□?timeout? connect:設(shè)置成功連接到一臺(tái)服務(wù)器的最長(zhǎng)等待時(shí)間,默認(rèn)單位是毫秒,也可以使用其他的時(shí)間單位后綴。

????????????????????????????????????????■?timeout? client:設(shè)置連接客戶(hù)端發(fā)送數(shù)據(jù)時(shí)最長(zhǎng)等待時(shí)間,默認(rèn)單位是毫秒,也可以使用其他的時(shí)間單位后綴。

????????????????????????????????????????□?timeout? server:設(shè)置服務(wù)器端回應(yīng)客戶(hù)端數(shù)據(jù)發(fā)送的最長(zhǎng)等待時(shí)間,默認(rèn)單位是毫秒,也可以使用其他的時(shí)間單位后綴。

????????????????????????????????????????■?timeout? check:設(shè)置對(duì)后端服務(wù)器的檢測(cè)超時(shí)時(shí)間,默認(rèn)單位是毫秒,也可以使用其他的時(shí)間單位后綴。

????????????????????????????(3)?frontend 部分

????????????????????????????????????配置示例如下:

????????????????????????????????????????frontend? www

????????????????????????????????????????????????????????bind????*:80

????????????????????????????????????????????????????????mode????http

????????????????????????????????????????????????????????option????httplog

????????????????????????????????????????????????????????option????forwardfor

????????????????????????????????????????????????????????option????httpclose

????????????????????????????????????????????????????????log????global

????????????????????????????????????????????????????????default_backend????htmpool

????????????????????????????????????這部分通過(guò)frontend關(guān)鍵字定義了一個(gè)名為“www”的前端虛擬節(jié)點(diǎn),上述代碼中每個(gè)選項(xiàng)的含義如下:

????????????????????????????????????????□ bind:此選項(xiàng)只能在frontend和listen部分進(jìn)行定義,用于定義一個(gè)或幾個(gè)監(jiān)聽(tīng)的套接字。bind的使用格式為:

????????????????????????????????????????????bind????[<address>:<port_range>]????interface????<interface>

????????????????????????????????????????????其中,address為可選選項(xiàng),其可以為主機(jī)名或IP地址,如果將其設(shè)置為“*”或“0.0.0.0”,將監(jiān)聽(tīng)當(dāng)前系統(tǒng)的所有IPv4地址。port_range可以是一個(gè)特定的TCP端口,也可是一個(gè)端口范圍,小于1024的端口需要有特定權(quán)限的用戶(hù)才能使用。interface為可選選項(xiàng),用來(lái)指定網(wǎng)絡(luò)接口的名稱(chēng),只能在Linux系統(tǒng)上使用。

????????????????????????????????????????■ option? httplog:在默認(rèn)情況下,HAProxy日志是不記錄HTTP請(qǐng)求的,這樣很不方便HAProxy問(wèn)題的排查與監(jiān)控。通過(guò)此選項(xiàng)可以啟用日志記錄HTTP請(qǐng)求。

????????????????????????????????????? ? □?option? forwardfor:如果后端服務(wù)器需要獲得客戶(hù)端的真實(shí)IP,就需要配置此參數(shù)。由于HAProxy工作于方向代理模式,因此發(fā)往后端真實(shí)服務(wù)器的請(qǐng)求中的客戶(hù)端IP均為HAProxy主機(jī)的IP,而非真正訪問(wèn)客戶(hù)端的地址,這就導(dǎo)致真實(shí)服務(wù)器端無(wú)法記錄客戶(hù)端真正請(qǐng)求來(lái)源的IP,而X-Forwarded-For則可用于解決此問(wèn)題。通過(guò)使用forwardfor選項(xiàng),HAProxy就可以向每個(gè)發(fā)往后端真實(shí)服務(wù)器的請(qǐng)求添加X(jué)-Forwarded-For記錄,這樣后端真實(shí)服務(wù)器日志可以通過(guò)“X-Forwarded-For”信息來(lái)記錄客戶(hù)端來(lái)源IP。

????????????????????????????????????????■ option? httpclose:此選項(xiàng)表示在客戶(hù)端和服務(wù)器端完成一次連接請(qǐng)求后,HAProxy將主動(dòng)關(guān)閉此TCP連接。這是對(duì)性能非常有幫助的一個(gè)參數(shù)。

????????????????????????????????????????□ log? global:表示使用全局的日志配置,這里的global表示引用在HAProxy配置文件global部分中定義的log選項(xiàng)配置格式。

????????????????????????????????????????■?default_backend :指定默認(rèn)的后端服務(wù)器池,也就是指定一組后端真實(shí)服務(wù)器,而這些真實(shí)服務(wù)器組將在backend段進(jìn)行定義。這里的htmpool就是一個(gè)后端服務(wù)器組。

????????????????????????????(4)backend部分

????????????????????????????????????配置示例如下:

????????????????????????????????????????backend? htmpool

????????????????????????????????????????????????mode????http

????????????????????????????????????????????????option????redispatch

????????????????????????????????????????????????option????abortonclose

????????????????????????????????????????????????balance????roundrobin

????????????????????????????????????????????????cookie????SERVERID

????????????????????????????????????????????????option????httpchk????GET????/index.php

????????????????????????????????????????????????server????web1????10.200.34.181:80????cookie????server1????weight????6????check????inter????2000????rise????2????fall????3

????????????????????????????????????????????????server????web1????10.200.34.182:80????cookie????server2? ? weight????6????check????inter????2000????rise????2????fall????3

? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? 這部分通過(guò)backend關(guān)鍵字定義了一個(gè)名為htmpool的后端真實(shí)服務(wù)器組。選項(xiàng)含義如下:

????????????????????????????????????????????□ option????redispatch:此參數(shù)用于cookie保持的環(huán)境中。在默認(rèn)情況下,HAProxy會(huì)將其請(qǐng)求的后端服務(wù)器的serverID插入cookie中,以保證會(huì)話(huà)的session持久性。而如果后端的服務(wù)器出現(xiàn)故障,客戶(hù)端的cookie是不會(huì)刷新的,這就會(huì)出現(xiàn)問(wèn)題。此時(shí),如果設(shè)置此參數(shù),就會(huì)將客戶(hù)端的請(qǐng)求強(qiáng)制定向到另外一臺(tái)健康的后端服務(wù)器上,以保證服務(wù)正常。

????????????????????????????????????????????■ option????abortonclose:如果設(shè)置了此參數(shù),可以在服務(wù)器負(fù)載很高的情況下,自動(dòng)結(jié)束當(dāng)前隊(duì)列中處理時(shí)間比較長(zhǎng)的連接。

????????????????????????????????????????????□ balance????roundrobin:此關(guān)鍵字用來(lái)定義負(fù)載均衡算法。目前HAProxy支持多種負(fù)載均衡算法,常用的有如下幾種:

????????????????????????????????????????????????????☆ roundrobin:是基于權(quán)重進(jìn)行輪叫調(diào)度的算法,在服務(wù)器的性能分布比較均勻時(shí),這是一種最公平、最合理的算法。此算法使用頻繁。

????????????????????????????????????????????????????★ static-rr:也是基于權(quán)重進(jìn)行輪叫的調(diào)度算法,不過(guò)此算法為靜態(tài)方法,在運(yùn)行時(shí)調(diào)整其服務(wù)器權(quán)重不會(huì)失效。

????????????????????????????????????????????????????☆ source:是基于請(qǐng)求源IP的算法。此算法先對(duì)請(qǐng)求的源IP進(jìn)行hash運(yùn)算,然后將結(jié)果與后端服務(wù)器的權(quán)重總數(shù)相除后轉(zhuǎn)發(fā)至某臺(tái)匹配的后端服務(wù)器。這種方式可以使同一個(gè)客戶(hù)端IP的請(qǐng)求始終被轉(zhuǎn)發(fā)到某特定的后端服務(wù)器。

????????????????????????????????????????????????????★ leastconn:此算法會(huì)將新的連接請(qǐng)求轉(zhuǎn)發(fā)到具有最少連接數(shù)目的后端服務(wù)器。在會(huì)話(huà)時(shí)間較長(zhǎng)的場(chǎng)景中推薦使用此算法,例如數(shù)據(jù)庫(kù)負(fù)載均衡等。此算法不適合會(huì)話(huà)較短的環(huán)境中,例如基于HTTP的應(yīng)用。

????????????????????????????????????????????????????☆ uri_param:此算法會(huì)對(duì)根據(jù)URL路徑中的參數(shù)進(jìn)行轉(zhuǎn)發(fā),這樣可保證在后端真實(shí)服務(wù)器數(shù)量不變時(shí),同一個(gè)用戶(hù)的請(qǐng)求始終分發(fā)到同一臺(tái)機(jī)器上。

????????????????????????????????????????????????????★ uri:此算法會(huì)對(duì)部分或整個(gè)URL進(jìn)行hash運(yùn)算,再經(jīng)過(guò)與服務(wù)器的總權(quán)重相除,最后轉(zhuǎn)發(fā)到某臺(tái)匹配的后端服務(wù)器上。

????????????????????????????????????????????????????☆ hdr(<name>):此算法根據(jù)http頭進(jìn)行轉(zhuǎn)發(fā),如果指定的http頭名稱(chēng)不存在,則使用roundrobin算法進(jìn)行策略轉(zhuǎn)發(fā)。

????????????????????????????????????????????■ cookie:表示允許向cookie插入SERVERID,每臺(tái)服務(wù)器的SETVERID可在下面的server關(guān)鍵字中使用cookie關(guān)鍵字定義。

????????????????????????????????????????????□?option????httpchk:此選項(xiàng)表示啟用HTTP的服務(wù)狀態(tài)檢測(cè)功能。HAProxy作為一個(gè)專(zhuān)業(yè)的負(fù)載均衡器,它支持對(duì)backend部分指定的后端服務(wù)節(jié)點(diǎn)的健康檢查,以保證在后端backend中某個(gè)節(jié)點(diǎn)不能服務(wù)時(shí),把從frotend端進(jìn)來(lái)的客戶(hù)端請(qǐng)求分配至backend中其他健康節(jié)點(diǎn)上,從而保證整體服務(wù)的可用性。option httpchk的用法如下:

????????????????????????????????????????????????????option????httpchk????<method>????<uri>????<version>

????????????????????????????????????????????????????參數(shù)含義:

????????????????????????????????????????????????????????method:表示HTTP請(qǐng)求的方式,常用的有OPTIONS、GET、HEAD幾種方式。一般的健康檢查可以采用HEAD方式進(jìn)行,而不是采用GET方式,這是因?yàn)镠EAD方式?jīng)]有數(shù)據(jù)返回,僅檢查Response的HEAD是不是狀態(tài)碼200。因此,相對(duì)于GET,HEAD方式更快、更簡(jiǎn)單。

????????????????????????????????????????????????????????uri:表示要檢測(cè)的URL地址,通過(guò)執(zhí)行此URL,可以獲取后端服務(wù)器的運(yùn)行狀態(tài)。在正常情況下將返回狀態(tài)碼200,返回其他狀態(tài)碼均為異常狀態(tài)。

????????????????????????????????????????????????????????version:指定心跳檢測(cè)時(shí)的HTTP的版本號(hào)。

???????????????????????????????????????????? ■ server:這個(gè)關(guān)鍵字用來(lái)定義多臺(tái)后端真實(shí)服務(wù)器,不能用于defaults和frontend部分。使用格式為:

????????????????????????????????????????????????????server <name> <address> [:port] [param*]

????????????????????????????????????????????????????參數(shù)含義:

????????????????????????????????????????????????????????☆ <name>:為后端真實(shí)服務(wù)器指定一個(gè)內(nèi)部名稱(chēng),隨便定義一個(gè)即可。

????????????????????????????????????????????????????????★ <address>:后端真實(shí)服務(wù)器的IP地址或主機(jī)名。

????????????????????????????????????????????????????????☆ <port>:指定連接請(qǐng)求發(fā)往真實(shí)服務(wù)器時(shí)的目標(biāo)端口。在未設(shè)定時(shí),將使用客戶(hù)端請(qǐng)求時(shí)的同一端口。

????????????????????????????????????????????????????????★?[param*]:為后端服務(wù)器設(shè)定的一系列參數(shù),可用參數(shù)非常多,常用參數(shù)如下:

????????????????????????????????????????????????????????????????? check:表示啟用對(duì)此后端服務(wù)器執(zhí)行健康狀態(tài)檢查。

????????????????????????????????????????????????????????????????? inter:設(shè)置健康狀態(tài)檢查的時(shí)間間隔,單位為毫秒。

????????????????????????????????????????????????????????????????? rise:設(shè)置從故障狀態(tài)轉(zhuǎn)換至正常狀態(tài)需要成功檢查的次數(shù),例如,“rise2”表示2次檢查正常就認(rèn)為此服務(wù)器可用。

????????????????????????????????????????????????????????????????? fall:設(shè)置后端服務(wù)器從正常狀態(tài)轉(zhuǎn)換為不可用狀態(tài)需要檢查的次數(shù),例如,“fall3”表示3此檢查失敗就認(rèn)為此服務(wù)器不可用。

????????????????????????????????????????????????????????????????? cookie:為指定的后端服務(wù)器設(shè)定cookie值,此處指定的值將在請(qǐng)求入站時(shí)被檢查,第一次為此值挑選的后端服務(wù)器將在后續(xù)的請(qǐng)求中一直被選中,其目的在于實(shí)現(xiàn)持久連接的功能。上面的“cookie server1”表示web1的serverid為server1。同理,“cookie server2”表示web2的serverid為server2。

????????????????????????????????????????????????????????????????? weight:設(shè)置后端真實(shí)服務(wù)器的權(quán)重,默認(rèn)為1,最大值為256。設(shè)置為0表示不參與負(fù)載均衡。

????????????????????????????????????????????????????????????????? backup:設(shè)置后端真實(shí)服務(wù)器的備份服務(wù)器,僅僅在后端所有真實(shí)服務(wù)器均不可用的情況下才啟用。

????????????????????????????????(5)listen部分

????????????????????????????????????????????配置示例:? ?

????????????????????????????????????????????????listen admin_stats

????????????????????????????????????????????????? ? ? ? bind 0.0.0.0:9188

????????????????????????????????????????????????? ? ? ? mode http

????????????????????????????????????????????????? ? ? ? log 127.0.0.1 local0 err

????????????????????????????????????????????????? ? ? ? stats refresh 30s

????????????????????????????????????????????????? ? ? ? stats uri /haproxy-status

????????????????????????????????????????????????? ? ? ? stats realm welcome login\ Haproxy

????????????????????????????????????????????????? ? ? ? stats auth admin:admin

????????????????????????????????????????????????? ? ? ? stats hide-version

????????????????????????????????????????????????? ? ? ? stats admin if? TRUE

????????????????????????????????????????????這個(gè)部分通過(guò)listen關(guān)鍵字定義一個(gè)名為“admin_status”的實(shí)例,每個(gè)選項(xiàng)的含義如下:

????????????????????????????????????????????????□?stats refresh:設(shè)置HAProxy監(jiān)控統(tǒng)計(jì)頁(yè)面自動(dòng)刷新的時(shí)間。

????????????????????????????????????????????????■?stats uri:設(shè)置HAProxy監(jiān)控統(tǒng)計(jì)頁(yè)面的URL路徑,可隨意指定。例如,指定“status uri /haproxy-status”,就可以通過(guò)http://IP:9188/haproxy-status查看。

??????????????????????????????????????????□?stats realm:設(shè)置登錄HAProxy統(tǒng)計(jì)頁(yè)面時(shí)密碼框上的文本提示信息。

????????????????????????????????????????????? ?■ stats auth:設(shè)置登錄HAProxy統(tǒng)計(jì)頁(yè)面的用戶(hù)名和密碼。用戶(hù)名和密碼通過(guò)冒號(hào)分割。可為監(jiān)控頁(yè)面設(shè)置多個(gè)用戶(hù)名和密碼,每行一個(gè)。

?????????????????????????????????????????????? □?stats hide-version:用來(lái)隱藏統(tǒng)計(jì)頁(yè)面上HAProxy的版本信息。

???????????????????????????????????????????????■? stats admin if? TRUE:通過(guò)設(shè)置此選項(xiàng),可以在監(jiān)控頁(yè)面上手工啟用或禁用后端真實(shí)服務(wù)器,僅在haproxy1.4.9以后版本有效。

????3.HAProxy的日志配置策略:

????????? ? ? ?默認(rèn)情況下 ,HAProxy為了節(jié)省讀寫(xiě)I/O所消耗的性能,沒(méi)有自動(dòng)配置日志輸出功能,但是為了維護(hù)和調(diào)試方便,日志的輸出還是很有必要的,下面就簡(jiǎn)單介紹如何配置HAProxy的日志輸出功能。

????????????? ? 查看是否安裝rsyslog:

????????????????????[root@data-1-1 ~]# rpm -q rsyslog

????????????????????rsyslog-5.8.10-10.el6_6.x86_64

??? ????????????如果已經(jīng)安裝了rsyslog軟件包,接著需要修改rsyslog的配置文件,在/etc/rsyslog.d/目錄下創(chuàng)建haproxy.conf文件,內(nèi)容如下:?

????????????????????[root@data-1-1 ~]# vim /etc/rsyslog.d/haproxy.conf?

????????????????????$ModLoad imudp

????????????????????$UDPServerRun 514

????????????????????local3.* /usr/local/haproxy/logs/haproxy.log

????????????????????local0.* /usr/local/haproxy/logs/haproxy.log

?????????????????這里定義了兩種日志類(lèi)型,并指定了日志的輸出路徑,其中:

????????????????????第一行的“imudp”是模塊名,支持UDP協(xié)議。

????????????????????第二行表示允許514端口接收使用UDP和TCP協(xié)議轉(zhuǎn)發(fā)過(guò)來(lái)的日志,而rsyslog在默認(rèn)情況下,正是在514端口監(jiān)聽(tīng)UDP。其實(shí)也可以將上面haproxy.conf文件的內(nèi)容直接寫(xiě)到/etc/rsyslog.conf文件中。

????????????????????然后,還需要修改/etc/sysconfig/rsyslog文件,修改為如下內(nèi)容:

????????????????????????SYSLOGD_OPTIONS="-c 5 -r -m 0"

????????????????????其中,“-r”表示接收遠(yuǎn)程日志。

????????????????????最后重啟rsyslog服務(wù)即可完成配置:

????????????????????????[root@data-1-1 ~]# service rsyslog restart

????????????????要實(shí)現(xiàn)將HAProxy日志寫(xiě)入指定的文件中,還需要在haproxy.cfg中配置對(duì)應(yīng)的日志選項(xiàng)。

????4.通過(guò)HAProxy的ACL規(guī)則實(shí)現(xiàn)智能負(fù)載均衡:

????????????由于HAProxy可以工作在七層模型下,因此,要實(shí)現(xiàn)HAProxy的強(qiáng)大功能,一定要使用強(qiáng)大靈活的ACL規(guī)則,通過(guò)ACL規(guī)則可以實(shí)現(xiàn)基于HAProxy的智能負(fù)載均衡系統(tǒng)。HAProxy通過(guò)ACL規(guī)則完成兩種主要的功能,分別是:

????????????????1)通過(guò)設(shè)置的ACL規(guī)則檢查客戶(hù)端請(qǐng)求是否合法。如果符合ACL規(guī)則要求,那么將放行;如果不符合規(guī)則,則直接中斷請(qǐng)求。

????????????????2)符合ACL規(guī)則要求的請(qǐng)求將被提交到后端的backend服務(wù)器集群,進(jìn)而實(shí)現(xiàn)基于ACL規(guī)則的負(fù)載均衡。

????????????HAProxy中的ACL規(guī)則經(jīng)常使用在frontend段中,使用方法如下:

????????????????acl????自定義的acl名稱(chēng)????acl方法????-i????[ 匹配的路徑或文件 ]

????????????????其中:

????????????????????□ acl:是一個(gè)關(guān)鍵字,表示定義ACL規(guī)則的開(kāi)始。后面需要跟上自定義的ACL名稱(chēng)。

????????????????????■ acl方法:這個(gè)字段用來(lái)定義實(shí)現(xiàn)ACL的方法,HAProxy定義了很多ACL方法,經(jīng)常使用的方法有hdr_reg(host)、hdr_dom(host)、hdr_beg(host)、url_sub、url_dir、path_beg、path_end等。

???????????????????□ -i:表示不區(qū)分大小寫(xiě),后面需要跟上匹配的路徑或文件或正則表達(dá)式。

????????????????與ACL規(guī)則一起使用的HAProxy參數(shù)還有use_backend,use_backend后面需要跟上一個(gè)backend實(shí)例名,表示在滿(mǎn)足ACL規(guī)則后去請(qǐng)求哪個(gè)backend實(shí)例,與use_backend對(duì)應(yīng)的還有default_backend參數(shù),它表示在沒(méi)有滿(mǎn)足ACl條件的時(shí)候默認(rèn)使用哪個(gè)后端backend.

????????????????????????例:

????????????????????????????acl????www_policy????hdr_reg(host)????-i????^(www.z.cn|z.cn)

????????????????????????????acl????bbs_policy????hdr_dom(host)????-i????bbs.z.cn

????????????????????????????acl????url_policy????url_sub????-i????buy_sid=

????????????????????????????

????????????????????????????use_backend?????server_www????if????www_policy

????????????????????????????use_backend????server_app????if????url_policy

????????????????????????????use_backend????server_bbs????if????bbs_policy

????????????????????????????default_backend????server_cache

????????????????這里僅僅列出了HAProxy配置文件中ACL規(guī)則的配置部分,其他選項(xiàng)并未列出。

????????????????這些例子定義了www_policy、bbs_policy、url_policy三個(gè)ACL規(guī)則,第一條規(guī)則表示如果客戶(hù)端以www.z.cn或z.cn開(kāi)頭的域名發(fā)送請(qǐng)求時(shí),則此規(guī)則返回true,同理第二條規(guī)則表示如果客戶(hù)端通過(guò)bbs.z.cn域名發(fā)送請(qǐng)求時(shí),則此規(guī)則返回true,而第三條規(guī)則表示如果客戶(hù)端在請(qǐng)求的URL中包含“buy_sid=”字符串時(shí),則此規(guī)則返回ture。

????????????????第四、第五、第六條規(guī)則定義了當(dāng)www_policy、bbs_policy、url_policy三個(gè)ACL規(guī)則返回true時(shí)要調(diào)度到哪個(gè)后端backend,例如,當(dāng)用戶(hù)的請(qǐng)求滿(mǎn)足www_policy規(guī)則時(shí),那么HAProxy會(huì)將用戶(hù)的請(qǐng)求直接發(fā)往名為server_www的后端backend,其他以此類(lèi)推。而當(dāng)用戶(hù)的請(qǐng)求不滿(mǎn)足任何一個(gè)ACL規(guī)則時(shí),HAProxy就會(huì)把請(qǐng)求發(fā)往由default_backend選項(xiàng)指定的server_cache這個(gè)后端backend。

????????????????例子:

????????????????????????acl????url_static????path_end????.gif .png .jpg .css .js

????????????????????????acl????host_www????hdr_beg(host) -i????www

????????????????????????acl????host_static????har-beg(host) -i????img. video. download. ftp.

????????????

????????????????????????use_backend????static????if????host_static????||? ? host_www????url_static

????????????????????????use_backend????www????if????host_www

????????????????????????default_backend????server_cache

????????????????與上面的例子類(lèi)似,本例中也定義了url_static、host_www和host_static三個(gè)ACL規(guī)則,其中,第一條規(guī)則通過(guò)path_end參數(shù)定義了如果客戶(hù)端在請(qǐng)求的URL中以.gif、.png、.jpg、.css或.js結(jié)尾是返回true,第二條規(guī)則通過(guò)hdr_beg(host)參數(shù)定義了如果客戶(hù)端以www開(kāi)頭的域名發(fā)送請(qǐng)求時(shí)則返回true,同理,第三條規(guī)則也是通過(guò)hdr_beg(host)參數(shù)定義了如果客戶(hù)端以img.、video.、download.或ftp.開(kāi)頭的域名發(fā)送請(qǐng)求時(shí)則返回true。

????????????????第四、第五條規(guī)則定義了當(dāng)滿(mǎn)足ACL規(guī)則后要調(diào)度到哪個(gè)后端backend,例如,當(dāng)用戶(hù)的請(qǐng)求同時(shí)滿(mǎn)足host_static規(guī)則與url_static規(guī)則,或同時(shí)滿(mǎn)足host_www和url_static規(guī)則時(shí),那么會(huì)將用戶(hù)請(qǐng)求直接發(fā)往名為static的后端backend,如果用戶(hù)請(qǐng)求滿(mǎn)足host_www規(guī)則,那么請(qǐng)求將被調(diào)度到名為www的后端backend,如果不滿(mǎn)足所有規(guī)則,那么將用戶(hù)請(qǐng)求默認(rèn)調(diào)度到名為server_cache的這個(gè)后端backend

轉(zhuǎn)自

HAProxy詳解(二)-閆利朋的博客-51CTO博客
http://blog.51cto.com/6284444/2136805

?

《新程序員》:云原生和全面數(shù)字化實(shí)踐50位技術(shù)專(zhuān)家共同創(chuàng)作,文字、視頻、音頻交互閱讀

總結(jié)

以上是生活随笔為你收集整理的HAProxy详解(二):HAProxy基础配置与应用实例的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。