?1CTO.com 独家特稿】Y件负载均衡一般通过两种方式来实玎ͼZ操作pȝ的Y负蝲实现和基于第三方应用的Y负蝲实现。LVS是ZLinux操作pȝ实现的一UY负蝲QHAProxy是开源的q且ZW三应用实现的Y负蝲?/p>
HAProxy相比LVS的用要单很多,功能斚w也很丰富。当 前,HAProxy支持两种主要的代理模?"tcp"也即4层(大多用于邮g服务器、内部协议通信服务器等Q,?层(HTTPQ。在4层模?下,HAProxy仅在客户端和服务器之间{发双向流量?层模式下QHAProxy会分析协议,q且能通过允许、拒l、交换、增加、修Ҏ者删除请?(request)或者回?response)里指定内Ҏ控制协议Q这U操作要Z特定规则?/p>
我现在用HAProxy主要在于它有以下优点Q这里我ȝ下:
一?/strong>免费开源,E_性也是非常好Q这个可通过我做的一些小目可以看出来,单Haproxy也跑得不错,E_性可以与LVS相媲;
二?/strong>Ҏ官方文档QHAProxy可以跑满10Gbps-New benchmark of HAProxy at 10 Gbps using Myricom's 10GbE NICs (Myri-10G PCI-Express)Q这个作Y件负蝲均衡Q也是比较惊人的Q?/p> 三?/strong>HAProxy可以作ؓMySQL、邮件或其它的非web?strong>负蝲均衡Q我们常用于它作为MySQL(?负蝲均衡Q?/p> 四?/strong>自带强大的监控服务器状态的面Q实际环境中我们l合Nagiosq行邮g或短信报警,q个也是我非常喜Ƣ它的原因之一Q?/p> 五?/strong>HAProxy支持虚拟L?/p> 实验环境也很单: 具体安装及配|文档如下: 一、HAProxy的下载及安装q程Q?/p> 内容 如下Q?/p> global defaults listen web_proxy 192.168.4.192:80 配置文g刚从服务器上copy下来的,保证可用。这里有个事情说明一下,有时候我们进入页?span style="color: #0000ff;">http://192.168.4.192/׃报如下错误: 503 Service UnavailableNo server is available to handle this request. option httpchk HEAD /check.txt HTTP/1.0 此问题出在这句话上面Q它的意思是Haproxy会判断你的后端web的根上存在check.txt没有Q以此作为haproxy-status的监控状态依据,它#掉即可;如果是生产环境,你可check.txt改ؓindex.jsp或index.php卛_Q?/p> 另外Q徏议配|一个HAProxy的启动、关闭、重启脚本,攑֜/etc/init.d下,我们在^时的工作中应该养成一个习惯,服务器的启动或重启应该是最单的Q万一C生环境下出错时Q我们可以以最快的方式启动Q如果不用脚本的话,我们p试以如下方式启动: 以下脚本生成后,我们直接可以?etc/init.d/haproxy start来启动HAProxy服务了?/p> #!/bin/bash start() stop() start) stop) restart) *) 我们在Firefox或IE上输?span style="color: #0000ff;">http://192.168.4.192 可以轮询的看到后端的web的页面了Q另外我们可以随时监控页?span style="color: #0000ff;">http://192.168.4.192/haproxy-status/Q效果图如下Q?/p> 另外Q如果要做HAProxy的高可用Q我推荐用HAProxy+KeepalivedQ网上成功的安例也有许多Q大家可以googel学习下,如果你对此篇文章有疑问或其它Q希望通过我在51cto的博客与我交?a style="color: #004276;">http://andrewyu.blog.51cto.com(抚琴煮酒)?/p> ?1CTO.com独家特稿Q非l授权谢l{载!合作媒体转蝲h明原文出处及出处Q?/p>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-64bitwget 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
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
debug
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
#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/usr/local/haproxy/sbin/haproxy -f /usr/local/haproxy/haproxy.cfg
BASE_DIR="/usr/local/haproxy"
ARGV="$@"
{
echo "START HAPoxy SERVERS"
$BASE_DIR/sbin/haproxy -f $BASE_DIR/conf/haproxy.cfg
}
{
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
ERROR=$?
;;
stop
ERROR=$?
;;
stop
start
ERROR=$?
;;
echo "hactl.sh [start|restart|stop]"
esac
exit $ERROR