高性能負載均衡軟件 HAProxy
HAProxy 是一個開源的、高性能的、基于TCP(四層)和 HTTP(七層)應用的負載均衡軟件 HAProxy 運行在當前的硬件上,完全可以支持數以萬計的并發連接。它的顯著優點如下: 1、可靠性和穩定性好 2、支持多達9種負載均衡算法 3、支持虛擬主機和 ACL規則 4、能生成服務器狀態監控頁面
HAProxy 原理
環境: 1、HaProxy eth0: 192.168.18.10 eth1: 192.168.1.102、WebSrv1 eth1: 192.168.1.11
3、WebSrv2 eth1: 192.168.1.12
4、Client eth1: 192.168.18.100</pre>
一、安裝 Haproxy
A、yum安裝
yum install haproxy -y
B、編碼編譯1、為支持正則,必須安裝 pcrewget ftp://ftp.csx.cam.ac.uk/pub/software/programming/pcre/pcre-8.36.tar.bz2 tar -jxf pcre-8.36.tar.bz2 cd pcre-8.36 ./configure make && make install2、Haproxy 官網在國內已被墻,可在 github 下載 wget https://github.com/haproxy/haproxy/archive/v1.5.0.tar.gz -O haproxy-v1.5.0.tar.gz tar -zxf haproxy-v1.5.0.tar.gz cd haproxy-1.5.0/make TARGET=linux2628 ARCH=x86_64 USE_PCRE=1 PREFIX=/usr/local/haproxy # 編譯 make install PREFIX=/usr/local/haproxy # 安裝到指定路徑 mkdir {/etc/haproxy,/var/haproxy,/var/log/haproxy} # 創建相關目錄
cp examples/haproxy.cfg /etc/haproxy/ # 復制示例配置文件 cp -a examples/haproxy.init /etc/init.d/haproxy # 復制啟動腳本 cp doc/haproxy.1 /usr/share/man/man1/ cp doc/configuration.txt /usr/share/man/man1/haproxy.cfg.1 # 復制man文件
cp -ar examples/errorfiles/ /etc/haproxy # 復制錯誤提示文件 chmod a+x /etc/init.d/haproxy chkconfig --add haproxy chkconfig haproxy on
ln -s /usr/local/haproxy/sbin/haproxy /usr/sbin/haproxy ln -s /usr/local/lib/libpcre.so.1 /usr/lib64/libpcre.so.1 </pre>
二、負載均衡實例
1、主配置文件vim /etc/haproxy/haproxy.cfgglobal # 全局參數 log 127.0.0.1 local3 info # log 記錄級別 maxconn 20480 # 最大并發連接數 chroot /var/haproxy uid 99 gid 99 daemon # 后臺運行 nbproc 3 # 創建6個進程 (建議設置為CPU核數) pidfile /var/run/haproxy.pid ulimit-n 65535 stats socket /var/tmp/haproxy.statsdebug
quiet
defaults # 默認參數 log global cookie SRV # 向 cookie 插入 SERVERID,會話保持 mode http # http7層模式,可配置tcp4層模式 option httplog # 記錄http請求日志 option httpclose # 請求完畢后主動關閉http通道 option dontlognull # 不記錄空log option forwardfor # 記錄 Client IP option redispatch # 自動重定向到健康機器 option allbackups # 服務器宕機時,激活備機
option abortonclose # 高負載時,自動關閉連接長的請求
stats refresh 30 # 統計頁面刷新間隔 retries 3 # 連接 RS 超時次數 maxconn 20480 timeout check 2000ms # 檢查超時 timeout connect 5000ms # 連接超時 timeout client 50000ms # 客戶端連接超時 timeout server 50000ms # 服務端連接超時
listen amin_status # 狀態管理 bind 192.168.18.10:6553 # 服務IP:端口 mode http log 127.0.0.1 local3 info stats enable stats refresh 5s # 自動刷新間隔 stats realm Haproxy\ Statistics # 認證信息 stats uri /admin?stats # URL頁面提示符 stats auth admin01:admin01 # 認證用戶admin01,密碼admin01 stats auth admin02:admin02 stats admin if TRUE # 支持啟/禁用 RS服務器 stats hide-version # 隱藏版本號
frontend web_service # 前端虛擬節點 bind *:80 # 提供服務IP:端口 mode http log global
acl inside_src src 10.0.2.0/24 # 定義ACL,支持正則 acl bad_net src 192.168.2.0/24
acl test.org_acl hdr_req(host) -i ^(www.test.org|web.test.org)$
http-request deny if bad_net # 拒絕bad_net
use_backend external_servers if test.org_acl
use_backend inside_servers if inside_src # 如果源主機是 inside_src,定向到 inside_servers default_backend external_servers # 默認服務組
backend external_servers # 后端對外服務組,名字隨便取 mode http balance roundrobin # 輪詢調度 option httpchk GET /index.html # 健康檢查頁面
主機名 IP:端口 健康檢查頻率(ms) 連續2次成功則認為正常 連續3次失敗則認為宕機 權重1
server web01 192.168.1.11:80 cookie web01 check inter 2000 rise 2 fall 3 weight 1 server web02 192.168.1.12:80 cookie web02 check inter 2000 rise 2 fall 3 weight 1
backend inside_servers # 對內服務組 mode http balance roundrobin option httpchk GET /index.html # 啟用對 RS 的狀態檢測 server web01 192.168.1.11:80 cookie web01 check inter 2000 rise 2 fall 3 weight 1
errorloc 502 /etc/haproxy/errorfiles/502.http errorfile 503 /etc/haproxy/errorfiles/503.http</pre>
啟動 HaProxy haproxy -f /etc/haproxy/haproxy.cfg 或 /etc/init.d/haproxy start2、負載均衡算法Haproxy支持的負載均衡算法: 1、roundrobin # 輪詢調度, 2、static-rr # 基于權重,靜態算法 3、leastconn # 最少連接數,適用于長會話連接,如:LDAP, SQL, TSE, etc... 4、first # 首次連接,總是使用最小連接 5、source # 源地址,再除權重總數,常用 6、uri # 對 URL 進行 hash 運算,再除服務器總權重 7、url_param # 根據 URl 路徑中的參數 8、hdr # 根據 HTTP 請求頭,不存在則用 RR 算法 9、rdp-cookie # 基于客戶端Cookie,hash每次請求
3、日志支持vim /etc/rsyslog.conf # 追加到rsyslog配置# Provides UDP syslog reception $ModLoad imudp # 載入UDP 模塊 $UDPServerRun 514 # 監聽端口Haproxy log
local3.* /var/log/haproxy/haproxy.log # log 位置</pre>
重啟rsyslog service rsyslog restart Haproxy 優雅重啟 haproxy -f /etc/haproxy/haproxy.cfg -sf `cat /var/run/haproxy.pid`三、Web服務器配置 ( 以Web1為例 ) yum install httpd -y # 安裝Apache echo "Web-01" > /var/www/html/index.html service httpd start # 啟動httpd服務
四、測試
1、打開瀏覽器訪問: http://192.168.18.10:6553/admin?stats 輸入認證用戶登錄
HAProxy 的 Web監控頁面
更多參考:haproxy-1.5.0/doc/configuration.txthttps://github.com/haproxy/haproxy/來自:http://my.oschina.net/chenxu/blog/489918