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