HAProxy 是一款提供高可用性、負(fù)載均衡以及基于TCP(第四層)和HTTP(第七層)應(yīng)用的代理軟件,支持虛擬主機(jī),它是免費(fèi)、快速并且可靠的一種解決方案。 HAProxy特別適用于那些負(fù)載特大的web站點(diǎn),這些站點(diǎn)通常又需要會(huì)話保持或七層處理。HAProxy運(yùn)行在時(shí)下的硬件上,完全可以支持?jǐn)?shù)以萬計(jì)的并發(fā)連接。并且它的運(yùn)行模式使得它可以很簡(jiǎn)單安全地整合進(jìn)您當(dāng)前的架構(gòu)中, 同時(shí)可以保護(hù)你的web服務(wù)器不被暴露到網(wǎng)絡(luò)上。HAProxy 官方網(wǎng)站:https://xintu.haproxy.org/
負(fù)載平衡的類型介紹(1)無負(fù)載平衡:用戶直接連接到Web服務(wù)器,在yourdomain.com網(wǎng)站上,并且沒有負(fù)載平衡。如果您的單個(gè)Web服務(wù)器出現(xiàn)故障,用戶將無法再訪問網(wǎng)站。此外,如果大量用戶同時(shí)訪問網(wǎng)站,Web服務(wù)器可能會(huì)遇到性能瓶頸,導(dǎo)致網(wǎng)站訪問緩慢甚至無法連接情況。
(2)四層負(fù)載平衡:這種方式進(jìn)行負(fù)載均衡將根據(jù)IP和端口轉(zhuǎn)發(fā)用戶流量,比如用戶請(qǐng)求訪問http://yourdomain.com/anything,則流量將轉(zhuǎn)發(fā)到處理yourdomain.com的所有請(qǐng)求的后端80端口。用戶訪問負(fù)載均衡器,那么負(fù)載均衡器將用戶的請(qǐng)求轉(zhuǎn)發(fā)給后端服務(wù)器的Web后端組。無論選擇哪個(gè)后端服務(wù)器,都將直接響應(yīng)用戶的請(qǐng)求。通常,Web后端中的所有服務(wù)器應(yīng)該提供相同的內(nèi)容 ,否則用戶可能會(huì)收到不一致的內(nèi)容。
(3)七層負(fù)載平衡:使用第7層允許負(fù)載均衡器根據(jù)用戶請(qǐng)求的內(nèi)容將請(qǐng)求轉(zhuǎn)發(fā)到不同的后端服務(wù)器。這種負(fù)載平衡模式允許您在同一域和端口下運(yùn)行多個(gè)Web應(yīng)用程序服務(wù)器。比如如果用戶請(qǐng)求yourdomain.com/blog,則會(huì)將其轉(zhuǎn)發(fā)到blog-backend組后端,后端是一組運(yùn)行博客應(yīng)用程序的服務(wù)器。其他請(qǐng)求則被轉(zhuǎn)發(fā)到web-backend組后端,后端可能正在運(yùn)行另一個(gè)應(yīng)用程序。
Haproxy具體配置操作實(shí)驗(yàn)環(huán)境三臺(tái)Linux主機(jī)
Haproxy:192.168.52.20
Web server1:192.168.52.121
Web server2:192.168.52.122
在Web server 1和2上面,配置web服務(wù)。
yum install httpd -y #安裝http服務(wù)
echo “This is 192.168.52.12x!!!” > /var/xintu/html/index.html #配置兩臺(tái)web文件用于測(cè)試顯示效果
systemctl start httpd #啟動(dòng)http服務(wù)
通過瀏覽器輸入IP訪問效果如下。
1.安裝HAProxy。
yum -y install haproxy
2.編輯HAProxy配置文件,主要配置如下:
vim /etc/haproxy/haproxy.cfg
global #全局參數(shù)的設(shè)置 log 127.0.0.1 local2 #全局的日志配置,使用log關(guān)鍵字,指定使用127.0.0.1上的syslog服務(wù)中的local0日志設(shè)備,記錄日志等級(jí)為info的日志 chroot /var/lib/haproxy #改變當(dāng)前工作目錄 pidfile /var/run/haproxy.pid #當(dāng)前進(jìn)程id文件 maxconn 4000 #最大連接數(shù) user haproxy #所屬用戶 group haproxy #所屬組 daemon #以守護(hù)進(jìn)程方式運(yùn)行haproxy stats socket /var/lib/haproxy/statsdefaults #配置默認(rèn)參數(shù) mode http #默認(rèn)的模式mode { tcp|http|health },tcp是4層,http是7層,health只會(huì)返回OK log global #應(yīng)用全局的日志配置 option httplog #啟用日志記錄HTTP請(qǐng)求,默認(rèn)haproxy日志記錄是不記錄HTTP請(qǐng)求日志 option dontlognull #啟用該項(xiàng),日志中將不會(huì)記錄空連接。所謂空連接就是在上游的負(fù)載均衡器或者監(jiān)控系統(tǒng)為了探測(cè)該 服務(wù)是否存活可用時(shí), 需要定期的連接或者獲取某一固定的組件或頁面,或者探測(cè)掃描端口是否在監(jiān) 聽或開放等動(dòng)作被稱為空連接;官方文檔中標(biāo)注,如果該服務(wù)上游 沒有其他的負(fù)載均衡器的話,建議不要使用該參數(shù),因?yàn)榛ヂ?lián)網(wǎng)上的惡意掃描或其他動(dòng)作就不會(huì)被記錄下來 option http-server-close #每次請(qǐng)求完畢后主動(dòng)關(guān)閉http通道 option forwardfor except 127.0.0.0/8 #如果服務(wù)器上的應(yīng)用程序想記錄發(fā)起請(qǐng)求的客戶端的IP地址, 需要在HAProxy 上配置此選項(xiàng), 這樣 HAProxy會(huì)把客戶端的IP信息發(fā)送給服務(wù)器,在HTTP請(qǐng)求中添加"X-Forwarded-For"字 段。 啟用 X-Forwarded-For,在requests 頭部插入客戶端IP發(fā)送給后端的server,使后端server獲 取到客戶端的真實(shí)IP。 option redispatch # 當(dāng)使用了cookie時(shí),haproxy將會(huì)將其請(qǐng)求的后端服務(wù)器的serverID插入到cookie中,以保證 會(huì)話的SESSION持久性;而此時(shí),如果后端的服務(wù)器宕掉 了, 但是客戶端的cookie是不會(huì)刷新 的,如果設(shè)置此參數(shù),將會(huì)將客戶的請(qǐng)求強(qiáng)制定向到另外一個(gè)后端server上,以保證服務(wù)的正常。 retries 3 # 定義連接后端服務(wù)器的失敗重連次數(shù),連接失敗次數(shù)超過此值后將會(huì)將對(duì)應(yīng)后端服務(wù)器標(biāo)記為不可用 timeout http-request 10s #http請(qǐng)求超時(shí)時(shí)間 timeout queue 1m #一個(gè)請(qǐng)求在隊(duì)列里的超時(shí)時(shí)間 timeout connect 10s #連接超時(shí) timeout client 1m #客戶端超時(shí) timeout server 1m #服務(wù)器端超時(shí) timeout http-keep-alive 10s #設(shè)置http-keep-alive的超時(shí)時(shí)間 timeout check 10s #檢測(cè)超時(shí) maxconn 3000 #每個(gè)進(jìn)程可用的最大連接數(shù)frontend main *:80 #監(jiān)聽地址為80 acl url_static path_beg -i /static /images /javascript /stylesheets acl url_static path_end -i .jpg .gif .png .css .js use_backend static if url_static default_backend my_webserver #定義一個(gè)名為my_app前端部分。此處將對(duì)于的請(qǐng)求轉(zhuǎn)發(fā)給后端backend static #使用了靜態(tài)動(dòng)態(tài)分離(如果url_path匹配 .jpg .gif .png .css .js靜態(tài)文件則訪問此后端) balance roundrobin #負(fù)載均衡算法( #banlance roundrobin 輪詢,balance source 保存session值,支持static-rr,leastconn,first,uri等參數(shù)) server static 127.0.0.1:80 check #靜態(tài)文件部署在本機(jī)(也可以部署在其他機(jī)器或者squid緩存服務(wù)器)backend my_webserver #定義一個(gè)名為 my_webserver后端部分。PS:此處 my_webserver只是一個(gè)自定義名字而已, 但是需要與frontend里面 配置項(xiàng)default_backend 值相一致 balance roundrobin #負(fù)載均衡算法 server web1 192.168.52.121:80 check inter 2000 fall 3 server web2 192.168.52.122:80 check inter 2000 fall 3 #定義的多個(gè)后端,檢測(cè)健康端口80,檢測(cè)心跳頻率是2000ms,失敗3次則認(rèn)為服務(wù)器不可用3.啟動(dòng)Haproxy。
systemctl start haproxy
Haproxy啟動(dòng)成功后,最后在其他客戶端機(jī)子上面,訪問http://192.168.52.20/,則可以看到結(jié)果了,外部客戶端的請(qǐng)求被均衡的分配到兩臺(tái)Web Server上,出現(xiàn)不同的界面。同時(shí),當(dāng)后端一臺(tái)Web服務(wù)器出現(xiàn)故障時(shí)也可以順利訪問網(wǎng)頁,保證了高可用性!
掃描二維碼推送至手機(jī)訪問。
版權(quán)聲明:本文由信途科技轉(zhuǎn)載于網(wǎng)絡(luò),如有侵權(quán)聯(lián)系站長(zhǎng)刪除。
轉(zhuǎn)載請(qǐng)注明出處http://www.quickersubmitter.com/xintu/9332.html