HAProxy負(fù)載均衡器的安裝及配置
原創(chuàng)【51CTO.com 獨(dú)家特稿】軟件負(fù)載均衡一般通過兩種方式來(lái)實(shí)現(xiàn):基于操作系統(tǒng)的軟負(fù)載實(shí)現(xiàn)和基于第三方應(yīng)用的軟負(fù)載實(shí)現(xiàn)。LVS就是基于Linux操作系統(tǒng)實(shí)現(xiàn)的一種軟負(fù)載,HAProxy就是開源的并且基于第三應(yīng)用實(shí)現(xiàn)的軟負(fù)載。
HAProxy相比LVS的使用要簡(jiǎn)單很多,功能方面也很豐富。當(dāng) 前,HAProxy支持兩種主要的代理模式:"tcp"也即4層(大多用于郵件服務(wù)器、內(nèi)部協(xié)議通信服務(wù)器等),和7層(HTTP)。在4層模式 下,HAProxy僅在客戶端和服務(wù)器之間轉(zhuǎn)發(fā)雙向流量。7層模式下,HAProxy會(huì)分析協(xié)議,并且能通過允許、拒絕、交換、增加、修改或者刪除請(qǐng)求 (request)或者回應(yīng)(response)里指定內(nèi)容來(lái)控制協(xié)議,這種操作要基于特定規(guī)則。
我現(xiàn)在用HAProxy主要在于它有以下優(yōu)點(diǎn),這里我總結(jié)下:
一、免費(fèi)開源,穩(wěn)定性也是非常好,這個(gè)可通過我做的一些小項(xiàng)目可以看出來(lái),單Haproxy也跑得不錯(cuò),穩(wěn)定性可以與LVS相媲美;
二、根據(jù)官方文檔,HAProxy可以跑滿10Gbps-New benchmark of HAProxy at 10 Gbps using Myricom's 10GbE NICs (Myri-10G PCI-Express),這個(gè)作為軟件級(jí)負(fù)載均衡,也是比較驚人的;
三、HAProxy可以作為MySQL、郵件或其它的非web的負(fù)載均衡,我們常用于它作為MySQL(讀)負(fù)載均衡;
四、自帶強(qiáng)大的監(jiān)控服務(wù)器狀態(tài)的頁(yè)面,實(shí)際環(huán)境中我們結(jié)合Nagios進(jìn)行郵件或短信報(bào)警,這個(gè)也是我非常喜歡它的原因之一;
五、HAProxy支持虛擬主機(jī)。
實(shí)驗(yàn)環(huán)境也很簡(jiǎn)單:
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
內(nèi)容 如下:
global
log 127.0.0.1 local0
maxconn 4096
chroot /usr/local/haproxy
uid 501
gid 501
daemon
nbproc 1
pidfile /usr/local/haproxy/logs/haproxy.pid
debugdefaults
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 50000listen 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
#p#配置文件剛從服務(wù)器上copy下來(lái)的,保證可用。這里有個(gè)事情說明一下,有時(shí)候我們進(jìn)入頁(yè)面http://192.168.4.192/就會(huì)報(bào)如下錯(cuò)誤:
503 Service UnavailableNo server is available to handle this request.
option httpchk HEAD /check.txt HTTP/1.0
此問題出在這句話上面,它的意思是Haproxy會(huì)判斷你的后端web的根上存在check.txt沒有,以此作為haproxy-status的監(jiān)控狀態(tài)依據(jù),將它#掉即可;如果是生產(chǎn)環(huán)境,你可將check.txt改為index.jsp或index.php即可;
另外,建議配置一個(gè)HAProxy的啟動(dòng)、關(guān)閉、重啟腳本,放在/etc/init.d下,我們?cè)谄綍r(shí)的工作中應(yīng)該養(yǎng)成一個(gè)習(xí)慣,服務(wù)器的啟動(dòng)或重啟應(yīng)該是最簡(jiǎn)單的,萬(wàn)一到了生產(chǎn)環(huán)境下出錯(cuò)時(shí),我們可以以最快的方式啟動(dòng),如果不用腳本的話,我們就要嘗試以如下方式啟動(dòng):
/usr/local/haproxy/sbin/haproxy -f /usr/local/haproxy/haproxy.cfg
以下腳本生成后,我們直接可以用/etc/init.d/haproxy start來(lái)啟動(dòng)HAProxy服務(wù)了。
#!/bin/bash
BASE_DIR="/usr/local/haproxy"
ARGV="$@"start()
{
echo "START HAPoxy SERVERS"
$BASE_DIR/sbin/haproxy -f $BASE_DIR/conf/haproxy.cfg
}stop()
{
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 instart)
start
ERROR=$?
;;stop)
stop
ERROR=$?
;;restart)
stop
start
ERROR=$?
;;*)
echo "hactl.sh [start|restart|stop]"
esac
exit $ERROR
我們?cè)贔irefox或IE上輸入http://192.168.4.192 就可以輪詢的看到后端的web的頁(yè)面了,另外我們可以隨時(shí)監(jiān)控頁(yè)面http://192.168.4.192/haproxy-status/,效果圖如下:
另外,如果要做HAProxy的高可用,我推薦用HAProxy+Keepalived,網(wǎng)上成功的安例也有許多,大家可以googel學(xué)習(xí)下,如果你對(duì)此篇文章有疑問或其它,希望通過我在51cto的博客與我交流http://andrewyu.blog.51cto.com(撫琴煮酒)。
【51CTO.com獨(dú)家特稿,非經(jīng)授權(quán)謝絕轉(zhuǎn)載!合作媒體轉(zhuǎn)載請(qǐng)注明原文出處及出處!】