負載均衡之Haproxy配置詳解(及httpd配置)
下圖描述了使用keepalived+Haproxy主從配置來達到能夠針對前段流量進行負載均衡到多臺後端web1、web2、web3、img1、img2.但是由於haproxy會存在單點故障問題,因此使用keepalived來實現對Haproxy單點問題的高可用處理。
常用開源軟體負載均衡器有:Nginx、LVS、Haproxy。
三大主流軟體負載均衡器對比(LVS VS Nginx VS Haproxy)
|
衡量負載均衡器好壞的幾個重要因素:
1、會話率 :單位時間內的處理的請求數
2、會話併發能力:併發處理能力
3、資料率:處理資料能力
經過官方測試統計,haproxy 單位時間處理的最大請求數為20000個,可以同時維護40000-50000個併發連線,最大資料處理能力為10Gbps。綜合上述,haproxy是效能優越的負載均衡、反向代理伺服器。
總結HAProxy主要優點:
一、免費開源,穩定性也是非常好,這個可通過我做的一些小專案可以看出來,單Haproxy也跑得不錯,穩定性可以與LVS相媲美;
二、根據官方文件,HAProxy可以跑滿10Gbps-New benchmark of HAProxy at 10 Gbps using Myricom's 10GbE NICs (Myri-10G PCI-Express),這個作為軟體級負載均衡,也是比較驚人的;
三、HAProxy可以作為MySQL、郵件或其它的非web的負載均衡,我們常用於它作為MySQL(讀)負載均衡;
四、自帶強大的監控伺服器狀態的頁面,實際環境中我們結合Nagios進行郵件或簡訊報警,這個也是我非常喜歡它的原因之一;
五、HAProxy支援虛擬主機。
下述將選擇Haproxy作為負載均衡器進行講解:
本次使用環境:
環境centos7.1
Haproxy 1.5.4
Haproxy+keeplived 172.31.2.31
Haproxy+keeplived 172.31.2.32
下述針對Haproxy的配置檔案進行詳解:
vim /etc/haproxy/haproxy.cfg
文字部分:
global # 全域性引數的設定
log 127.0.0.1 local2 # log語法:log <address_1>[max_level_1] # 全域性的日誌配置,使用log關鍵字,
指定使用127.0.0.1
上的syslog服務中的local0日誌裝置,記錄日誌等級為info的日誌
chroot /var/lib/haproxy #改變當前工作目錄
pidfile /var/run/haproxy.pid #當前程式id檔案
maxconn 4000 #最大連線數
user haproxy #所屬使用者
group haproxy #所屬組
daemon #以守護程式方式執行haproxy
stats socket /var/lib/haproxy/stats
defaults
mode http #預設的模式mode { tcp|http|health },tcp是4層,http是7層,health只會返回OK
log global #應用全域性的日誌配置
option httplog # 啟用日誌記錄HTTP請求,預設haproxy日誌記錄是不記錄HTTP請求日誌
option dontlognull # 啟用該項,日誌中將不會記錄空連線。所謂空連線就是在上游的負載均衡器
或者監控系統為了探測該 服務是否存活可用時,需要定期的連線或者獲取某
一固定的元件或頁面,或者探測掃描埠是否在監聽或開放等動作被稱為空連線;
官方文件中標註,如果該服務上游沒有其他的負載均衡器的話,建議不要使用
該引數,因為網際網路上的惡意掃描或其他動作就不會被記錄下來
option http-server-close #每次請求完畢後主動關閉http通道
option forwardfor except 127.0.0.0/8 #如果伺服器上的應用程式想記錄發起請求的客戶端的IP地址,需要在HAProxy
上 配置此選項, 這樣 HAProxy會把客戶端的IP資訊傳送給伺服器,在HTTP
請求中新增"X-Forwarded-For"字段。 啟用
X-Forwarded-For,在requests
頭部插入客戶端IP傳送給後端的server,使後端server獲取到客戶端的真實IP。
option redispatch # 當使用了cookie時,haproxy將會將其請求的後端伺服器的serverID插入到
cookie中,以保證會話的SESSION永續性;而此時,如果後端的伺服器宕掉
了, 但是客戶端的cookie是不會重新整理的,如果設定此引數,將會將客戶的請
求強制定向到另外一個後端server上,以保證服務的正常。
retries 3 # 定義連線後端伺服器的失敗重連次數,連線失敗次數超過此值後將會將對應後端
伺服器標記為不可用
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 #每個程式可用的最大連線數
frontend main *:80 #監聽地址為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前端部分。此處將對於的請求轉發給後端
backend static #使用了靜態動態分離(如果url_path匹配 .jpg .gif .png .css .js靜態檔案則
訪問此後端)
balance roundrobin #負載均衡演算法(#banlance roundrobin 輪詢,balance source 儲存session值,
支援static-rr,leastconn,first,uri等引數)
server static 127.0.0.1:80 check #靜態檔案部署在本機(也可以部署在其他機器或者squid快取伺服器)
backend my_webserver #定義一個名為my_webserver後端部分。PS:此處my_webserver只是一個
自定義名字而已,但是需要與frontend裡面配置項default_backend
值相一致
balance roundrobin #負載均衡演算法
server web01 172.31.2.33:80 check inter 2000 fall 3 weight 30 #定義的多個後端
server web02 172.31.2.34:80 check inter 2000
fall 3 weight 30 #定義的多個後端
server web03 172.31.2.35:80 check inter 2000
fall 3 weight 30 #定義的多個後端
|
更多關於Haproxyacl配置請參考博文:http://blog.csdn.net/tantexian/article/details/50015975
配置完成則重啟服務:
systemctl restart haproxy
假若想訪問監控介面:配置stats uri /haproxy項,重啟服務:
systemctl reload haproxy
注意:假若頁面範圍不了,是否selinux關閉了,iptables開啟此埠了(iptables -F)
同理在172.31.2.32上面安裝上述步驟安裝配置好haproxy:
上述對Haproxy的優缺點及配置進行了詳細講解。
接下來對Haproxy+web負載均衡使用進行實戰講解:
首先配置三臺web伺服器:172.31.2.33、172.31.2.34、172.31.2.35
三臺都是同樣操作:
1、實驗環境
centos 7.1 X64 mini版
2、配置web伺服器(node33/34/35):
測試方便,關閉selinux、關閉iptables
一下都採用預設,不做配置即可。
yum install httpd -y
# vim /etc/httpd/conf/httpd.conf
httpd監聽埠:
DocumentRoot:網頁存放的路徑,文件的根目錄
重啟httpd
# systemctl restart httpd
頁面訪問httpd:
修改顯示內容:
# vim /var/www/html/index.html
I'm node33!!! My IP is 172.31.2.33...
再次訪問:
這樣三個web服務33/34/35搭建成功!!!!
接下來配置負載均衡(本次實驗只用一個Haproxy:172.31.2.31):
vim /etc/haproxy/haproxy.cfg
瀏覽器請求172.31.2.31:
從上述結果可知,前端對172.31.2.31的請求,被Haproxy的負載均衡器,均衡請求到三個後端web172.31.2.33、172.31.2.34、172.31.2.35上面去了。
這樣當三個當中的一個出現故障,流量則能正常分發到剩餘兩個正常的web上,從來提高了系統可靠性。
跟多關於keepalived+Haproxy請參考文章:http://blog.csdn.net/tantexian/article/details/50056229
相關文章
- Nginx/Httpd負載均衡tomcat配置Nginxhttpd負載Tomcat
- RHEL 7配置HAProxy實現Web負載均衡Web負載
- 負載均衡之--Nginx、LVS、HAProxy負載Nginx
- 使用LVS實現負載均衡原理及安裝配置詳解負載
- nginx安裝及負載均衡配置Nginx負載
- 在docker中haproxy的安裝以及mysql的負載均衡配置DockerMySql負載
- mysql負載均衡搭建(haproxy)MySql負載
- nginx配置+uwsgi+負載均衡配置Nginx負載
- Nginx/LVS/HAProxy負載均衡軟體的優缺點詳解Nginx負載
- HaProxy 實現 MySQL 負載均衡MySql負載
- haproxy配置檔案詳解
- 負載均衡詳解負載
- 負載均衡服務之HAProxy基礎入門負載
- IdentityServer4 負載均衡配置IDEServer負載
- 使用Nginx配置TCP負載均衡NginxTCP負載
- LVS負載均衡配置與keepalive服務配置負載
- Nginx負載均衡詳解Nginx負載
- Haproxy搭建 Web 群集實現負載均衡Web負載
- haproxy(單機)+mysql叢集負載均衡MySql負載
- 負載均衡開啟Gzip配置及檢測方法說明負載
- CentOS7+ keepalived+ haproxy搭建Mycat高可用及負載均衡CentOS負載
- HTTPD之二————HTTPD服務詳解————httpd的配置檔案常見設定httpd
- Ribbon負載均衡策略與自定義配置負載
- Haproxy+Keepalived高可用負載均衡叢集負載
- HAProxy高效能軟負載均衡器負載
- Kubernetes上的負載均衡詳解負載
- nginx配置web服務|反向代理|負載均衡NginxWeb負載
- Nginx 兩臺伺服器配置負載均衡!!!Nginx伺服器負載
- docker下nginx反向代理和負載均衡配置DockerNginx負載
- 阿里雲負載均衡SSL證書配置(更新)阿里負載
- 做了反向代理和負載均衡的nginx配置檔案簡單示例(nginx.conf) HTTP負載均衡/TCP負載均衡負載NginxHTTPTCP
- keepalived+haproxy實現mysql負載均衡高可用MySql負載
- F5負載均衡系列教程八【負載均衡演算法詳解】負載演算法
- windows第七層負載均衡 基於IIS的ARR負載均衡詳解Windows負載
- linux搭建LVS+keepalive+nginx實現叢集高效能負載均衡配置詳解LinuxNginx負載
- 4. Spring Cloud Ribbon 實現“負載均衡”的詳細配置說明SpringCloud負載
- 記一次nginx負載均衡配置情況Nginx負載
- windows伺服器第四層負載均衡_基於NLB負載均衡詳解Windows伺服器負載
- 負載均衡之keepalived負載