軟件負載均衡一般通過兩種方式來實現:基於操作系統的軟負載實現和基於第三方應用的軟負載實現。LVS就是基於Linux操作系統實現的一種軟負載,HAProxy就是開源的並且基於第三應用實現的軟負載。
HAProxy相比LVS的使用要簡單很多,功能方面也很豐富。當 前,HAProxy支持兩種主要的代理模式:”tcp”也即4層(大多用於郵件服務器、內部協議通信服務器等),和7層(HTTP)。在4層模式 下,HAProxy僅在客戶端和服務器之間轉發雙向流量。7層模式下,HAProxy會分析協議,並且能通過允許、拒絕、交換、增加、修改或者刪除請求 (request)或者回應(response)裡指定內容來控制協議,這種操作要基於特定規則。
我現在用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 IP:192.168.4.192 Centos5.5-64bit
Web1 IP:192.168.4.45 Centos5.4-64bit
Web2 IP:192.168.21.45 FreeBSD8.0-64bit
具體安裝及配置文檔如下:
一、HAProxy的下載及安裝過程:
wget http://haproxy.1wt.eu/download/1.3/src/haproxy-1.3.20.tar.gz
make TARGET=linux26 prefix=/usr/local/haproxy install
cd /usr/local/haproxy
mkdir conf
cd conf
vim haproxy.conf
內容如下:
global
log 127.0.0.1 local0
maxconn 4096
chroot /usr/local/haproxy
uid 501
gid 501
daemon
nbproc 1
pid
file /usr/local/haproxy/logs/haproxy.pid
debug
defaults
log 127.0.0.1 local3
mode http
option httplog
option httpclose
option dontlognull
option forwardfor
option redispatch
retries 2
maxconn 2000
balance roundrobin
stats uri /haproxy-stats
contimeout 5000
clitimeout 50000
srvtimeout 50000
listen web_proxy 192.168.4.192:80
#option httpchk HEAD /index.php HTTP/1.0
server web1_192.168.21.45 192.168.21.45:80 cookie app1inst1 check inter 2000 rise 2 fall 5
server web2_192.168.4.45 192.168.4.45:80 cookie app1inst2 check inter 2000 rise 2 fall 5
配置文件剛從服務器上copy下來的,保證可用。這裡有個事情說明一下,有時候我們進入頁面http://192.168.4.192/就會報如下錯誤:
503 Service UnavailableNo server is available to handle this request.
option httpchk HEAD /check.txt HTTP/1.0
此問題出在這句話上面,它的意思是Haproxy會判斷你的後端web的根上存在check.txt沒有,以此作為haproxy-status的監控狀態依據,將它#掉即可;如果是生產環境,你可將check.txt改為index.jsp或index.php即可;
另外,建議配置一個HAProxy的啟動、關閉、重啟腳本,放在/etc/init.d下,我們在平時的工作中應該養成一個習慣,服務器的啟動或重啟應該是最簡單的,萬一到了生產環境下出錯時,我們可以以最快的方式啟動,如果不用腳本的話,我們就要嘗試以如下方式啟動:
/usr/local/haproxy/sbin/haproxy -f /usr/local/haproxy/haproxy.cfg
以下腳本生成後,我們直接可以用/etc/init.d/haproxy start來啟動HAProxy服務了。
#!/bin/bash
BASE_DIR=”/usr/local/haproxy”
ARGV=”$@”
start()
{
echo “START HAPoxy SERVERS”
$BASE_DIR/sbin/haproxy -f $BASE_DIR/conf/haproxy.cfg
}
s
top()
{
echo “STOP HAPoxy Listen”
kill -TTOU $(
cat $BASE_DIR/logs/haproxy.pid)
echo “STOP HAPoxy process”
kill -USR1 $(cat $BASE_DIR/logs/haproxy.pid)
}
case $ARGV in
start)
start
ERROR=$?
;;
stop)
stop
ERROR=$?
;;
restart)
stop
start
ERROR=$?
;;
*)
echo “hactl.sh [start|restart|stop]”
esac
exit $ERROR
我們在Firefox或IE上輸入http://192.168.4.192 就可以輪詢的看到後端的web的頁面了,另外我們可以隨時監控頁面http://192.168.4.192/haproxy-status/,效果圖如下: