HAProxy详解(二):HAProxy基础配置与应用实例
一.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ù)說明
????????????????????????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)安裝目錄中沒有配置文件,這里是將源碼包里面的示例配置文件復(fù)制到配置文件目錄。
????2.HAProxy基礎(chǔ)配置文件詳解:
? ? ? ? ? ??1.配置文件概述:
????????????????根據(jù)功能和用途,HAProxy配置文件主要由5個(gè)部分組成,但有些部分并不是必需的,可以根據(jù)需要選擇相應(yīng)的部分進(jìn)行配置。
????????????????????(1)global部分
????????????????????????????用來設(shè)定全局配置參數(shù),屬于進(jìn)程級的配置,通常和操作系統(tǒng)配置有關(guān)。
????????????????????(2)defaults部分
????????????????????????????默認(rèn)參數(shù)的配置部分。在此部分設(shè)置的參數(shù)值,默認(rèn)會自動引用到下面的frontend、backend和listen部分中,因此,如果某些參數(shù)屬于共用配置,只需在defaults部分添加一次即可。而如果在frontend、backend和listen部分中也配置了與defaults部分一樣的參數(shù),那么defaults部分參數(shù)對應(yīng)的值自動被覆蓋。
????????????????????(3)frontend部分
????????????????????????????此部分用于設(shè)置接收用戶請求的前端虛擬節(jié)點(diǎn)。frontend是在HAProxy1.3版本之后才引入的一個(gè)組件,同時(shí)引入的還有backend組件。通過引入這些組件,在很大程度上簡化了HAProxy配置文件的復(fù)雜性。frontend可以根據(jù)ACL規(guī)則直接指定要使用的后端backend。
????????????????????(4)backend部分
?????????????????????????????此部分用于設(shè)置集群后端服務(wù)集群的配置,也就是用來添加一組真實(shí)服務(wù)器,以處理前端用戶的請求。添加的真實(shí)服務(wù)器類似于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è)部分對HAProxy的配置文件進(jìn)行說明:
????????????????????????????(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表示日志級別。其中日志級別有err、warning、info、debug4種可選。這個(gè)配置表示使用127.0.0.1上的rsyslog服務(wù)中的local0日志設(shè)備,記錄日志等級為info。
????????????????????????????????????????■?maxconn : 設(shè)定每個(gè)HAProxy進(jìn)程可接受的最大并發(fā)連接數(shù),此選項(xiàng)等同于Linux命令行選項(xiàng)“ulimit -n”。
??????????????????????????????????????? □??user/group : 設(shè)置HAProxy進(jìn)程的用戶和組,也可使用用戶和組的uid和gid值來替代。
????????????????????????????????????????■ daemon : 設(shè)置HAProxy進(jìn)程進(jìn)入后臺運(yùn)行。這是推薦的運(yùn)行模式。
????????????????????????????????????????□ nbproc : 設(shè)置HAProxy啟動時(shí)可創(chuàng)建的進(jìn)程數(shù),此參數(shù)要求將HAProxy運(yùn)行模式設(shè)置為daemon,默認(rèn)只啟動一個(gè)進(jìn)程。根據(jù)使用經(jīng)驗(yàn),該值的設(shè)置應(yīng)該小于服務(wù)器的CPU核數(shù)。創(chuàng)建多個(gè)進(jìn)程,能夠減少每個(gè)進(jìn)程的任務(wù)隊(duì)列,但是過多的進(jìn)程可能會導(dǎo)致進(jìn)程崩潰。
????????????????????????????????????????■ pidfile : 指定HAProxy進(jìn)程的pid文件。啟動進(jì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模式 :在此模式下,客戶端和服務(wù)器端之間將建立一個(gè)全雙工的連接,不會對七層報(bào)文做任何類型的檢查,默認(rèn)為tcp模式,經(jīng)常用于SSL、SSH、SMTP等應(yīng)用。
????????????????????????????????????????????????★ http模式:在此模式下,客戶端請求在轉(zhuǎn)發(fā)至后端服務(wù)器之前將會被深度分析,所有不與RFC格式兼容的請求都會被拒絕。
????????????????????????????????????????????????☆ health模式:目前此模式基本已經(jīng)廢棄,不再多說。
????????????????????????????????????????■?retries:設(shè)置連接后服務(wù)器的失敗重試次數(shù),如果連接失敗的次數(shù)超過這里設(shè)置的值,HAProxy會將對應(yīng)的后端服務(wù)器標(biāo)記為不可用。此參數(shù)也可在后面部分進(jìn)行設(shè)置。
????????????????????????????????????????□?timeout? connect:設(shè)置成功連接到一臺服務(wù)器的最長等待時(shí)間,默認(rèn)單位是毫秒,也可以使用其他的時(shí)間單位后綴。
????????????????????????????????????????■?timeout? client:設(shè)置連接客戶端發(fā)送數(shù)據(jù)時(shí)最長等待時(shí)間,默認(rèn)單位是毫秒,也可以使用其他的時(shí)間單位后綴。
????????????????????????????????????????□?timeout? server:設(shè)置服務(wù)器端回應(yīng)客戶端數(shù)據(jù)發(fā)送的最長等待時(shí)間,默認(rèn)單位是毫秒,也可以使用其他的時(shí)間單位后綴。
????????????????????????????????????????■?timeout? check:設(shè)置對后端服務(wù)器的檢測超時(shí)時(shí)間,默認(rèn)單位是毫秒,也可以使用其他的時(shí)間單位后綴。
????????????????????????????(3)?frontend 部分
????????????????????????????????????配置示例如下:
????????????????????????????????????????frontend? www
????????????????????????????????????????????????????????bind????*:80
????????????????????????????????????????????????????????mode????http
????????????????????????????????????????????????????????option????httplog
????????????????????????????????????????????????????????option????forwardfor
????????????????????????????????????????????????????????option????httpclose
????????????????????????????????????????????????????????log????global
????????????????????????????????????????????????????????default_backend????htmpool
????????????????????????????????????這部分通過frontend關(guān)鍵字定義了一個(gè)名為“www”的前端虛擬節(jié)點(diǎn),上述代碼中每個(gè)選項(xiàng)的含義如下:
????????????????????????????????????????□ bind:此選項(xiàng)只能在frontend和listen部分進(jìn)行定義,用于定義一個(gè)或幾個(gè)監(jiān)聽的套接字。bind的使用格式為:
????????????????????????????????????????????bind????[<address>:<port_range>]????interface????<interface>
????????????????????????????????????????????其中,address為可選選項(xiàng),其可以為主機(jī)名或IP地址,如果將其設(shè)置為“*”或“0.0.0.0”,將監(jiān)聽當(dāng)前系統(tǒng)的所有IPv4地址。port_range可以是一個(gè)特定的TCP端口,也可是一個(gè)端口范圍,小于1024的端口需要有特定權(quán)限的用戶才能使用。interface為可選選項(xiàng),用來指定網(wǎng)絡(luò)接口的名稱,只能在Linux系統(tǒng)上使用。
????????????????????????????????????????■ option? httplog:在默認(rèn)情況下,HAProxy日志是不記錄HTTP請求的,這樣很不方便HAProxy問題的排查與監(jiān)控。通過此選項(xiàng)可以啟用日志記錄HTTP請求。
????????????????????????????????????? ? □?option? forwardfor:如果后端服務(wù)器需要獲得客戶端的真實(shí)IP,就需要配置此參數(shù)。由于HAProxy工作于方向代理模式,因此發(fā)往后端真實(shí)服務(wù)器的請求中的客戶端IP均為HAProxy主機(jī)的IP,而非真正訪問客戶端的地址,這就導(dǎo)致真實(shí)服務(wù)器端無法記錄客戶端真正請求來源的IP,而X-Forwarded-For則可用于解決此問題。通過使用forwardfor選項(xiàng),HAProxy就可以向每個(gè)發(fā)往后端真實(shí)服務(wù)器的請求添加X-Forwarded-For記錄,這樣后端真實(shí)服務(wù)器日志可以通過“X-Forwarded-For”信息來記錄客戶端來源IP。
????????????????????????????????????????■ option? httpclose:此選項(xiàng)表示在客戶端和服務(wù)器端完成一次連接請求后,HAProxy將主動關(guān)閉此TCP連接。這是對性能非常有幫助的一個(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
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? 這部分通過backend關(guān)鍵字定義了一個(gè)名為htmpool的后端真實(shí)服務(wù)器組。選項(xiàng)含義如下:
????????????????????????????????????????????□ option????redispatch:此參數(shù)用于cookie保持的環(huán)境中。在默認(rèn)情況下,HAProxy會將其請求的后端服務(wù)器的serverID插入cookie中,以保證會話的session持久性。而如果后端的服務(wù)器出現(xiàn)故障,客戶端的cookie是不會刷新的,這就會出現(xiàn)問題。此時(shí),如果設(shè)置此參數(shù),就會將客戶端的請求強(qiáng)制定向到另外一臺健康的后端服務(wù)器上,以保證服務(wù)正常。
????????????????????????????????????????????■ option????abortonclose:如果設(shè)置了此參數(shù),可以在服務(wù)器負(fù)載很高的情況下,自動結(jié)束當(dāng)前隊(duì)列中處理時(shí)間比較長的連接。
????????????????????????????????????????????□ balance????roundrobin:此關(guān)鍵字用來定義負(fù)載均衡算法。目前HAProxy支持多種負(fù)載均衡算法,常用的有如下幾種:
????????????????????????????????????????????????????☆ roundrobin:是基于權(quán)重進(jìn)行輪叫調(diào)度的算法,在服務(wù)器的性能分布比較均勻時(shí),這是一種最公平、最合理的算法。此算法使用頻繁。
????????????????????????????????????????????????????★ static-rr:也是基于權(quán)重進(jìn)行輪叫的調(diào)度算法,不過此算法為靜態(tài)方法,在運(yùn)行時(shí)調(diào)整其服務(wù)器權(quán)重不會失效。
????????????????????????????????????????????????????☆ source:是基于請求源IP的算法。此算法先對請求的源IP進(jìn)行hash運(yùn)算,然后將結(jié)果與后端服務(wù)器的權(quán)重總數(shù)相除后轉(zhuǎn)發(fā)至某臺匹配的后端服務(wù)器。這種方式可以使同一個(gè)客戶端IP的請求始終被轉(zhuǎn)發(fā)到某特定的后端服務(wù)器。
????????????????????????????????????????????????????★ leastconn:此算法會將新的連接請求轉(zhuǎn)發(fā)到具有最少連接數(shù)目的后端服務(wù)器。在會話時(shí)間較長的場景中推薦使用此算法,例如數(shù)據(jù)庫負(fù)載均衡等。此算法不適合會話較短的環(huán)境中,例如基于HTTP的應(yīng)用。
????????????????????????????????????????????????????☆ uri_param:此算法會對根據(jù)URL路徑中的參數(shù)進(jìn)行轉(zhuǎn)發(fā),這樣可保證在后端真實(shí)服務(wù)器數(shù)量不變時(shí),同一個(gè)用戶的請求始終分發(fā)到同一臺機(jī)器上。
????????????????????????????????????????????????????★ uri:此算法會對部分或整個(gè)URL進(jìn)行hash運(yùn)算,再經(jīng)過與服務(wù)器的總權(quán)重相除,最后轉(zhuǎn)發(fā)到某臺匹配的后端服務(wù)器上。
????????????????????????????????????????????????????☆ hdr(<name>):此算法根據(jù)http頭進(jìn)行轉(zhuǎn)發(fā),如果指定的http頭名稱不存在,則使用roundrobin算法進(jìn)行策略轉(zhuǎn)發(fā)。
????????????????????????????????????????????■ cookie:表示允許向cookie插入SERVERID,每臺服務(wù)器的SETVERID可在下面的server關(guān)鍵字中使用cookie關(guān)鍵字定義。
????????????????????????????????????????????□?option????httpchk:此選項(xiàng)表示啟用HTTP的服務(wù)狀態(tài)檢測功能。HAProxy作為一個(gè)專業(yè)的負(fù)載均衡器,它支持對backend部分指定的后端服務(wù)節(jié)點(diǎn)的健康檢查,以保證在后端backend中某個(gè)節(jié)點(diǎn)不能服務(wù)時(shí),把從frotend端進(jìn)來的客戶端請求分配至backend中其他健康節(jié)點(diǎn)上,從而保證整體服務(wù)的可用性。option httpchk的用法如下:
????????????????????????????????????????????????????option????httpchk????<method>????<uri>????<version>
????????????????????????????????????????????????????參數(shù)含義:
????????????????????????????????????????????????????????method:表示HTTP請求的方式,常用的有OPTIONS、GET、HEAD幾種方式。一般的健康檢查可以采用HEAD方式進(jìn)行,而不是采用GET方式,這是因?yàn)镠EAD方式?jīng)]有數(shù)據(jù)返回,僅檢查Response的HEAD是不是狀態(tài)碼200。因此,相對于GET,HEAD方式更快、更簡單。
????????????????????????????????????????????????????????uri:表示要檢測的URL地址,通過執(zhí)行此URL,可以獲取后端服務(wù)器的運(yùn)行狀態(tài)。在正常情況下將返回狀態(tài)碼200,返回其他狀態(tài)碼均為異常狀態(tài)。
????????????????????????????????????????????????????????version:指定心跳檢測時(shí)的HTTP的版本號。
???????????????????????????????????????????? ■ server:這個(gè)關(guān)鍵字用來定義多臺后端真實(shí)服務(wù)器,不能用于defaults和frontend部分。使用格式為:
????????????????????????????????????????????????????server <name> <address> [:port] [param*]
????????????????????????????????????????????????????參數(shù)含義:
????????????????????????????????????????????????????????☆ <name>:為后端真實(shí)服務(wù)器指定一個(gè)內(nèi)部名稱,隨便定義一個(gè)即可。
????????????????????????????????????????????????????????★ <address>:后端真實(shí)服務(wù)器的IP地址或主機(jī)名。
????????????????????????????????????????????????????????☆ <port>:指定連接請求發(fā)往真實(shí)服務(wù)器時(shí)的目標(biāo)端口。在未設(shè)定時(shí),將使用客戶端請求時(shí)的同一端口。
????????????????????????????????????????????????????????★?[param*]:為后端服務(wù)器設(shè)定的一系列參數(shù),可用參數(shù)非常多,常用參數(shù)如下:
????????????????????????????????????????????????????????????????? check:表示啟用對此后端服務(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值,此處指定的值將在請求入站時(shí)被檢查,第一次為此值挑選的后端服務(wù)器將在后續(xù)的請求中一直被選中,其目的在于實(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è)部分通過listen關(guān)鍵字定義一個(gè)名為“admin_status”的實(shí)例,每個(gè)選項(xiàng)的含義如下:
????????????????????????????????????????????????□?stats refresh:設(shè)置HAProxy監(jiān)控統(tǒng)計(jì)頁面自動刷新的時(shí)間。
????????????????????????????????????????????????■?stats uri:設(shè)置HAProxy監(jiān)控統(tǒng)計(jì)頁面的URL路徑,可隨意指定。例如,指定“status uri /haproxy-status”,就可以通過http://IP:9188/haproxy-status查看。
??????????????????????????????????????????□?stats realm:設(shè)置登錄HAProxy統(tǒng)計(jì)頁面時(shí)密碼框上的文本提示信息。
????????????????????????????????????????????? ?■ stats auth:設(shè)置登錄HAProxy統(tǒng)計(jì)頁面的用戶名和密碼。用戶名和密碼通過冒號分割??蔀楸O(jiān)控頁面設(shè)置多個(gè)用戶名和密碼,每行一個(gè)。
?????????????????????????????????????????????? □?stats hide-version:用來隱藏統(tǒng)計(jì)頁面上HAProxy的版本信息。
???????????????????????????????????????????????■? stats admin if? TRUE:通過設(shè)置此選項(xiàng),可以在監(jiān)控頁面上手工啟用或禁用后端真實(shí)服務(wù)器,僅在haproxy1.4.9以后版本有效。
????3.HAProxy的日志配置策略:
????????? ? ? ?默認(rèn)情況下 ,HAProxy為了節(jié)省讀寫I/O所消耗的性能,沒有自動配置日志輸出功能,但是為了維護(hù)和調(diào)試方便,日志的輸出還是很有必要的,下面就簡單介紹如何配置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
?????????????????這里定義了兩種日志類型,并指定了日志的輸出路徑,其中:
????????????????????第一行的“imudp”是模塊名,支持UDP協(xié)議。
????????????????????第二行表示允許514端口接收使用UDP和TCP協(xié)議轉(zhuǎn)發(fā)過來的日志,而rsyslog在默認(rèn)情況下,正是在514端口監(jiān)聽UDP。其實(shí)也可以將上面haproxy.conf文件的內(nèi)容直接寫到/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日志寫入指定的文件中,還需要在haproxy.cfg中配置對應(yīng)的日志選項(xiàng)。
????4.通過HAProxy的ACL規(guī)則實(shí)現(xiàn)智能負(fù)載均衡:
????????????由于HAProxy可以工作在七層模型下,因此,要實(shí)現(xiàn)HAProxy的強(qiáng)大功能,一定要使用強(qiáng)大靈活的ACL規(guī)則,通過ACL規(guī)則可以實(shí)現(xiàn)基于HAProxy的智能負(fù)載均衡系統(tǒng)。HAProxy通過ACL規(guī)則完成兩種主要的功能,分別是:
????????????????1)通過設(shè)置的ACL規(guī)則檢查客戶端請求是否合法。如果符合ACL規(guī)則要求,那么將放行;如果不符合規(guī)則,則直接中斷請求。
????????????????2)符合ACL規(guī)則要求的請求將被提交到后端的backend服務(wù)器集群,進(jìn)而實(shí)現(xiàn)基于ACL規(guī)則的負(fù)載均衡。
????????????HAProxy中的ACL規(guī)則經(jīng)常使用在frontend段中,使用方法如下:
????????????????acl????自定義的acl名稱????acl方法????-i????[ 匹配的路徑或文件 ]
????????????????其中:
????????????????????□ acl:是一個(gè)關(guān)鍵字,表示定義ACL規(guī)則的開始。后面需要跟上自定義的ACL名稱。
????????????????????■ acl方法:這個(gè)字段用來定義實(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ū)分大小寫,后面需要跟上匹配的路徑或文件或正則表達(dá)式。
????????????????與ACL規(guī)則一起使用的HAProxy參數(shù)還有use_backend,use_backend后面需要跟上一個(gè)backend實(shí)例名,表示在滿足ACL規(guī)則后去請求哪個(gè)backend實(shí)例,與use_backend對應(yīng)的還有default_backend參數(shù),它表示在沒有滿足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ī)則表示如果客戶端以www.z.cn或z.cn開頭的域名發(fā)送請求時(shí),則此規(guī)則返回true,同理第二條規(guī)則表示如果客戶端通過bbs.z.cn域名發(fā)送請求時(shí),則此規(guī)則返回true,而第三條規(guī)則表示如果客戶端在請求的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)用戶的請求滿足www_policy規(guī)則時(shí),那么HAProxy會將用戶的請求直接發(fā)往名為server_www的后端backend,其他以此類推。而當(dāng)用戶的請求不滿足任何一個(gè)ACL規(guī)則時(shí),HAProxy就會把請求發(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
????????????????與上面的例子類似,本例中也定義了url_static、host_www和host_static三個(gè)ACL規(guī)則,其中,第一條規(guī)則通過path_end參數(shù)定義了如果客戶端在請求的URL中以.gif、.png、.jpg、.css或.js結(jié)尾是返回true,第二條規(guī)則通過hdr_beg(host)參數(shù)定義了如果客戶端以www開頭的域名發(fā)送請求時(shí)則返回true,同理,第三條規(guī)則也是通過hdr_beg(host)參數(shù)定義了如果客戶端以img.、video.、download.或ftp.開頭的域名發(fā)送請求時(shí)則返回true。
????????????????第四、第五條規(guī)則定義了當(dāng)滿足ACL規(guī)則后要調(diào)度到哪個(gè)后端backend,例如,當(dāng)用戶的請求同時(shí)滿足host_static規(guī)則與url_static規(guī)則,或同時(shí)滿足host_www和url_static規(guī)則時(shí),那么會將用戶請求直接發(fā)往名為static的后端backend,如果用戶請求滿足host_www規(guī)則,那么請求將被調(diào)度到名為www的后端backend,如果不滿足所有規(guī)則,那么將用戶請求默認(rèn)調(diào)度到名為server_cache的這個(gè)后端backend
轉(zhuǎn)自
HAProxy詳解(二)-閆利朋的博客-51CTO博客
http://blog.51cto.com/6284444/2136805
?
《新程序員》:云原生和全面數(shù)字化實(shí)踐50位技術(shù)專家共同創(chuàng)作,文字、視頻、音頻交互閱讀總結(jié)
以上是生活随笔為你收集整理的HAProxy详解(二):HAProxy基础配置与应用实例的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: ORM操作
- 下一篇: 用C#获取硬盘序列号,CPU序列号,网卡