三大主流軟件負載均衡器對比(LVS VS Nginx VS 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.1Haproxy 1.5.4Haproxy+keeplived 172.31.2.31Haproxy+keeplived 172.31.2.32下述針對Haproxy的配置文件進行詳解:vim /etc/haproxy/haproxy.cfgglobal # 全局參數的設置 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/statsdefaults 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 #定義的多個后端 |
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新聞熱點
疑難解答