haproxy實現(xiàn)反向代理和負(fù)載均衡

反向代理服務(wù)器功能:web緩存(加速)、反向代理、內(nèi)容路由(根據(jù)流量及內(nèi)容類型等將請求轉(zhuǎn)發(fā)至特定服務(wù)器)、轉(zhuǎn)碼器

創(chuàng)新互聯(lián)長期為千余家客戶提供的網(wǎng)站建設(shè)服務(wù),團隊從業(yè)經(jīng)驗10年,關(guān)注不同地域、不同群體,并針對不同對象提供差異化的產(chǎn)品和服務(wù);打造開放共贏平臺,與合作伙伴共同營造健康的互聯(lián)網(wǎng)生態(tài)環(huán)境。為瀏陽企業(yè)提供專業(yè)的網(wǎng)站設(shè)計制作、網(wǎng)站制作,瀏陽網(wǎng)站改版等技術(shù)服務(wù)。擁有十載豐富建站經(jīng)驗和眾多成功案例,為您定制開發(fā)。

緩存:減少冗余內(nèi)容傳輸;節(jié)省帶寬、緩解網(wǎng)絡(luò)瓶頸;降低了對原始服務(wù)器的請求壓力;降低了傳輸延遲,公共緩存每個人都可以使用,帶有敏感數(shù)據(jù)的私有緩存則只對限定某類或某個人使用

nginx可實現(xiàn)緩存功能,haproxy不能實現(xiàn)緩存功能,這里只說明其反向代理功能和負(fù)載均衡功能

yuminstallhaproxy 主配置文件haproxy.cfg 開啟日志功能: 編輯/etc/rsyslog.conf文件 $ModLoadimudp $UDPServerRun514#開啟udp514端口 local2.*/var/log/haproxy.log 編輯/etc/haproxy/haproxy.cfg文件: log127.0.0.1local2 配置負(fù)載均衡后端主機: global log127.0.0.1local2 chroot/var/lib/haproxy pidfile/var/run/haproxy.pid maxconn4000定義面向客戶端的總的連接數(shù)(面向客戶端那一面) userhaproxy grouphaproxy daemon #turnonstatsunixsocket statssocket/var/lib/haproxy/stats #--------------------------------------------------------------------- #mainfrontendwhichproxystothebackends #--------------------------------------------------------------------- frontendmain*:80#第一種方式 #bind*:80#第二種方式 #bind*:8080#只能用于frontend,listen; #maxconn也可以定義在這里或listen后,定義了單個實例的并發(fā)連接數(shù),如果在global段定義就是所有實例總的 default_backendwebsrvs #--------------------------------------------------------------------- #roundrobinbalancingbetweenthevariousbackends #--------------------------------------------------------------------- backendwebsrvs balanceroundrobin serverweb1192.168.20.7:80check#定義的名字web1會被加到請求首部發(fā)到后端,當(dāng)后端有虛擬主機時很有用 serverweb2192.168.20.8:80check

balance: 指明調(diào)度算法;幾種調(diào)度算法:

動態(tài):權(quán)重可動態(tài)調(diào)整
靜態(tài):調(diào)整權(quán)重不會實時生效
roundrobin: 輪詢,動態(tài)算法,每個后端主機最多支持4128個連接;
static-rr: 輪詢,靜態(tài)算法,每個后端主機支持的數(shù)量無上限;
leastconn: 根據(jù)后端主機的負(fù)載數(shù)量進行調(diào)度;僅適用長連接的會話;動態(tài);
hash-type:
map-based:取模法;靜態(tài);
consistent:一致性哈希法;動態(tài);

下面的四種調(diào)度算法都基于上面的兩種hash-type

source:
uri:對uri的左半部分(?標(biāo)記之前的部分)或者整個uri做hash,除以后端服務(wù)器總權(quán)重后綁定到后端服務(wù)器
url_param: 根據(jù)url中的指定的參數(shù)的值進行調(diào)度;把值做hash計算,并除以總權(quán)重;
hdr(<name>) :根據(jù)請求報文中指定的header(如use_agent, referer, hostname)進行調(diào)度;把指定的header的值做hash計算得值除以總權(quán)重;
示例:

backendwebsrvs balancehdr(User-Agent) hash-typeconsistent serverweb1192.168.20.7:80check serverweb2192.168.20.8:80check

測試:

mode: 健康狀態(tài)檢測時基于何種協(xié)議
HAProxy的工作模式;默認(rèn)為tcp;有三種:tcp, http, health

只有客戶端和前端,后端都是用http通信才可以使用http模式

在front段也可以指定log:

frontendmain*:80 logglobal log127.0.0.2local3

使用use_backend 和acl定義后段

use_backend dynamic if url_dyn
use_backend static if url_css url_img extension_img

server段后可加的參數(shù):

backup:設(shè)定為備用服務(wù)器,僅在負(fù)載均衡場景中的其它server均不可用于啟用此server; check:啟動對此server執(zhí)行健康狀態(tài)檢查,其可以借助于額外的其它參數(shù)完成更精細的設(shè)定,如: inter<delay>:設(shè)定健康狀態(tài)檢查的時間間隔,單位為毫秒,默認(rèn)為2000;也可以使用fastinter和downinter來根據(jù)服務(wù)器端狀態(tài)優(yōu)化此時間延遲; rise<count>:設(shè)定健康狀態(tài)檢查中,某離線的server從離線狀態(tài)轉(zhuǎn)換至正常狀態(tài)需要成功檢查的次數(shù); fall<count>:確認(rèn)server從正常狀態(tài)轉(zhuǎn)換為不可用狀態(tài)需要檢查的次數(shù); cookie<value>:為指定server設(shè)定cookie值,此處指定的值將在請求入站時被檢查,第一次為此值挑選的server將在后續(xù)的請求中被選中,其目的在于實現(xiàn)持久連接的功能; maxconn<maxconn>:指定此服務(wù)器接受的并發(fā)連接數(shù);如果發(fā)往此服務(wù)器的連接數(shù)目高于此處指定的值,其將被放置于請求隊列,以等待其它連接被釋放; maxqueue<maxqueue>:設(shè)定請求隊列的長度; observe<mode>:通過觀察服務(wù)器的通信狀況來判定其健康狀態(tài),默認(rèn)為禁用,其支持的類型有“layer4”和“layer7”,“layer7”僅能用于http代理場景; redir<prefix>:啟用重定向功能,將發(fā)往此服務(wù)器的GET和HEAD請求均以302狀態(tài)碼響應(yīng);需要注意的是,在prefix后面不能使用/,且不能使用相對地址,以免造成循環(huán);例如: serversrv1172.16.100.6:80redirhttp://imageserver.magedu.comcheck weight<weight>:權(quán)重,默認(rèn)為1,值為256,0表示不參與負(fù)載均衡;

optionhttpchk optionhttpchk<uri> optionhttpchk<method><uri> 例如: backendhttps_relay modetcp optionhttpchkOPTIONS*HTTP/1.1rnHost:www.lee123.com serverapache1192.168.1.1:443checkport80 使用案例: serverfirst172.16.100.7:1080cookiefirstcheckinter1000 serversecond172.16.100.8:1080cookiesecondcheckinter1000

基于瀏覽器cookie實現(xiàn)session sticky:定義健康檢查方式可以使用option:

要點: (1)每個server有自己惟一的cookie標(biāo)識; (2)在backend中定義為用戶請求調(diào)度完成后操縱其cookie backendwebsrvs balanceroundrobin cookieSERVERIDinsertnocacheindirect serverweb1192.168.20.7:80checkcookiewebsrv1 serverweb2192.168.20.8:80checkcookiewebsrv2

測試:注意到cookie頭部的websrv1關(guān)鍵字了么?

開啟統(tǒng)計頁面:

listenstatistics bind*:9090 statsenable statshide-version #statsscope. statsuri/haproxyadmin?stats statsrealm"HAPorxyStatistics" statsauthadmin:mageedu statsadminifTRUE

向日志中記錄額外信息:
capture request header
capture response header

當(dāng)mode為http時,記錄豐富的日志信息:
option httplog----默認(rèn)是開啟的

錯誤頁面重定向:
errorfile: 使用haproxy主機本地文件進行響應(yīng);
errorloc, errorloc302: 使用指定的url進行響應(yīng),響應(yīng)狀態(tài)碼為302;不適用于GET以外的其它請求方法;
errorloc303:返回303狀態(tài)碼;

添加請求或響應(yīng)報文首部:
reqadd
rspadd

frontendmain bind*:80 bind*:8080 rspaddVia:node1.lee.com default_backendwebsrvs

出現(xiàn)了Via:

動靜分離的示例: frontendmain bind*:80 bind*:8080 aclurl_staticpath_beg-i/static/images/javascript/stylesheets aclurl_staticpath_end-i.jpg.gif.png.css.js use_backendstaticifurl_static default_backendappsrvs #--------------------------------------------------------------------- #staticbackendforservingupimages,stylesheetsandsuch #--------------------------------------------------------------------- backendstatic balanceroundrobin serverstatic1192.168.20.7check serverstatic2192.168.20.8check backendappsrvs balanceroundrobin optionforwardforexcept127.0.0.1headerX-Client optionhttpchk cookieSERVERIDinsertindirectnocache serverweb1192.168.20.7:80checkcookieweb1 serverweb2192.168.20.8:80checkcookieweb2

分享題目:haproxy實現(xiàn)反向代理和負(fù)載均衡
網(wǎng)址分享:http://muchs.cn/article32/cghisc.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供動態(tài)網(wǎng)站、云服務(wù)器服務(wù)器托管、靜態(tài)網(wǎng)站、企業(yè)建站、ChatGPT

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)

成都定制網(wǎng)站建設(shè)