heartbeat-haproxy-高可用

http://www.google.com.hk/search?hl=en&safe=active&q=heartbeat+haproxy++%E9%AB%98%E5%8F%AF%E7%94%A8&aq=f&aqi=&aql=&oq=

[1]

http://dev.firnow.com/course/6_system/linux/Linuxjs/20110217/553744.html

 Haproxy介绍及其定位



HAProxy提供高可用性、负载均衡以及基于TCP和HTTP应用的代理,支持虚拟主机,它是免费、快速并且可靠的一种解决方案。根据官方数据,其最高极限支持10G的并发。



HAProxy特别适用于那些负载特大的web站点, 这些站点通常又需要会话保持或七层处理。HAProxy运行在当前的硬件上,完全可以支持数以万计的并发连接。并且它的运行模式使得它可以很简单安全的整合进您当前的架构中, 同时可以保护你的web服务器不被暴露到网络上。







其支持从4层至7层的网络交换,即覆盖所有的TCP协议。就是说,Haproxy 甚至还支持 Mysql 的均衡负载。。

如果说在功能上,能以proxy反向代理方式实现 WEB均衡负载,这样的产品有很多。包括 Nginx,ApacheProxy,lighttpd,Cheroke 等。

但要明确一点的,Haproxy 并不是 Http 服务器。以上提到所有带反向代理均衡负载的产品,都清一色是 WEB 服务器。简单说,就是他们能自个儿提供静态(html,jpg,gif..)或动态(php,cgi..)文件的传输以及处理。而Haproxy 仅仅,而且专门是一款的用于均衡负载的应用代理。其自身并不能提供http服务。





但其配置简单,拥有非常不错的服务器健康检查功能还有专门的系统状态监控页面,当其代理的后端服务器出现故障, HAProxy会自动将该服务器摘除,故障恢复后再自动将该服务器加入。自1.3版本开始还引入了frontend,backend,frontend根据任意HTTP请求头内容做规则匹配,然后把请求定向到相关的backend。



另外, 版本1.3 是处于活跃开发阶段的版本, 它支持如下新特性:



l 内容交换 : 可以根据请求(request)的任何一部分 来选择一组服务器, 比如请求的 URI , Host头(header) , cookie , 以及其他任何东西. 当然,对那些静态分离的站点来说,对此特性还有更多的需求。


l 全透明代理 : 可以用 客户端IP地址 或者任何其他地址来连接后端服务器. 这个特性仅在Linux 2.4/2.6内核打了cttproxy 补丁后才可以使用. 这个特性也使得为某特殊服务器处理部分流量同时又不修改服务器的地址成为可能。


l 基于树的更快的调度器 : 1.2.16以上的版本要求所有的超时都设成同样的值以支持数以万计的全速连接. 这个特性已经移植到1.2.17.


l 内核TCP拼接 : 避免了内核到用户然后用户到内核端的数据拷贝, 提高了吞吐量同时又降低了CPU使用率 . Haproxy 1.3支持Linux L7SW 以满足在商用硬件上数Gbps 的吞吐的需求。


l 连接拒绝 : 因为维护一个连接的打开的开销是很低的,有时我们很需要限制攻击蠕虫(attack bots),也就是说限制它们的连接打开从而限制它们的危害。 这个已经为一个陷于小型DDoS攻击的网站开发了而且已经拯救了很多站点。


l 细微的头部处理 : 使得编写基于header的规则更为简单,同时可以处理URI的某部分。


l 快而可靠的头部处理 : 使用完全RFC2616 兼容的完整性检查对一般的请求全部进行分析和索引仅仅需要不到2ms 的时间。


l 模块化设计 : 允许更多人加入进此项目,调试也非常简单. poller已经分离, 已经使得它们的开发简单了很多. HTTP已经从TCP分离出来了,这样增加新的七层特性变得非常简单. 其他子系统也会很快实现模块化


l 投机I/O 处理 : 在一个套接字就绪前就尝试从它读取数据。poller仅推测哪个可能就绪哪个没有,尝试猜测,并且如果成功,一些开销很大的系统调用就可以省去了。如果失败,就会调用这些系统调用。已知的使用Linux epoll()已经净提升起码10%了。


l ACLs : 使用任意规则的任意组合作为某动作的执行条件。


l TCP 协议检查 : 结合ACL来对请求的任意部分进行检查,然后再进行转发。这就可以执行协议验证而不是盲目的进行转发。比如说允许SSL但拒绝SSH。


l 更多的负载均衡算法 : 现在,动态加权轮循(Dynamic Round Robin),加权源地址哈希(Weighted Source Hash),加权URL哈希和加权参数哈希(Weighted Parameter Hash)已经实现。其他算法比如Weighted Measured Response Time也很快会实现。


安装和配置

Haproxy 的配置相当简单,



从官方网站:http://www.haproxy.org 下载最新版本。



# wget http://haproxy.1wt.eu/download/1.3/src/haproxy-1.3.20.tar.gz

# tar zcvf haproxy-1.3.20.tar.gz

# cd haproxy-1.3.20

# make TARGET=linux26 PREFIX=/usr/local/haprpxy

# make install PREFIX=/usr/local/haproxy



安装完毕后,进入安装目录创建配置文件

# cd /usr/local/haproxy

# vi haproxy.cfg



配置内容如下:

global #全局设置
log 127.0.0.1 local0 #日志输出配置,所有日志都记录在本机,通过local0输出
#log 127.0.0.1 local1 notice
#log loghost local0 info

ulimit-n 82000
maxconn 4096 #最大连接数
chroot /usr/local/haproxy
uid 99 #所属运行的用户uid
gid 99 #所属运行的用户组
daemon #以后台形式运行ha-proxy
nbproc 3 #启动2个ha-proxy实例

pidfile /usr/local/haproxy/run/haproxy.pid
#debug
#quiet

defaults #默认设置
log global
log 127.0.0.1 local3 #日志文件的输出定向
mode http #所处理的类别,默认采用http模式,可配置成tcp作4层消息转发
option httplog #日志类别,采用httplog
option httpclose #每次请求完毕后主动关闭http通道,ha-proxy不支持keep-alive,只能模拟这种模式的实现

option dontlognull
option forwardfor #如果后端服务器需要获得客户端真实ip需要配置的参数,可以从Http Header中获得客户端ip

option redispatch
retries 2 #3次连接失败就认为服务器不可用,主要通过后面的check检查

maxconn 2000 #最大连接数
balance roundrobin #负载均衡算法
stats uri /haproxy-stats #haproxy 监控页面的访问地址,可通过 http://ip/haproxy-stats 访问
contimeout 5000 #连接超时时间
clitimeout 50000 #客户端连接超时时间
srvtimeout 50000 #服务器端连接超时时间

listen app-balancer 0.0.0.0:80
mode http
# log 127.0.0.1 local3
#cookie ServerID insert nocache
cookie ServerID prefix
cookie JSESSIONID prefix

capture request header Cookie len 200
capture request header X-Forwarded-For len 15
capture request header Host len 15
capture request header Referrer len 15

appsession JSESSIONID len 52 timeout 1080000
balance roundrobin
option httpchk GET /ok.jsp HTTP/1.0 #健康检查
server app_1 192.168.0.243:8080 cookie app1 minconn 100 maxconn 40960 check inter 5000 rise 2 fall 5 weight 2
server app_2 192.168.0.242:8080 cookie app2 minconn 100 maxconn 40960 check inter 2000 rise 2 fall 5 weight 2
server app_4 192.168.0.245:8080 cookie app2 minconn 100 maxconn 40960 check inter 2000 rise 2 fall 5 weight 1
#option forwardfor except 192.168.0.159
option forwardfor
stats enable
stats uri /haproxy-stat
stats realm "test_123 monitor"
stats auth admin:admin

启动服务:
# /usr/local/haproxy/sbin/haproxy -f /usr/local/haproxy/haproxy.cfg

重启服务:
# /usr/local/haproxy/sbin/haproxy -f /usr/local/haproxy/haproxy.cfg -st `cat /usr/local/haproxy/logs/haproxy.pid` (没有换行)

停止服务:
# killall haproxy

当然,为了方便系统在开机时加载,还可以创建启动脚本:
# vim /etc/rc.d/init.d/haproxy 内容如下:

#! /bin/sh
set -e

PATH=/sbin:/bin:/usr/sbin:/usr/bin:/usr/local/haproxy/sbin
PROGDIR=/usr/local/haproxy
PROGNAME=haproxy
DAEMON=$PROGDIR/sbin/$PROGNAME
CONFIG=$PROGDIR/conf/$PROGNAME.conf
PIDFILE=$PROGDIR/run/$PROGNAME.pid
DESC="HAProxy daemon"
SCRIPTNAME=/etc/init.d/$PROGNAME

# Gracefully exit if the package has been removed.
test -x $DAEMON || exit 0

start()
{
echo -n "Starting $DESC: $PROGNAME"
$DAEMON -f $CONFIG
echo "."
}

stop()
{
echo -n "Stopping $DESC: $PROGNAME"
haproxy_pid=cat $PIDFILE
kill $haproxy_pid
echo "."
}

restart()
{
echo -n "Restarting $DESC: $PROGNAME"
$DAEMON -f $CONFIG -p $PIDFILE -sf $(cat $PIDFILE)
echo "."
}

case "$1" in
start)
start
;;
stop)
stop
;;
restart)
restart
;;
*)
echo "Usage: $SCRIPTNAME {start|stop|restart}" >&2
exit 1
;;
esac
exit 0

保存后赐予可执行权限
# chmod +x /etc/rc.d/init.d/haproxy

就可以使用 service haproxy start|stop|restart 来控制服务的启动停止跟重启。
并通过以下命令加载到开机服务启动列表
# chkconfig --add haproxy

配置日志:
# vim /etc/syslog.conf

在最下边增加
local3.* /var/log/haproxy.log
local0.* /var/log/haproxy.log


重启核心日志服务使配置起效
# service syslog restart

然后就可查看日志了
# tail –f /var/log/harpoxy.log

Aug 22 15:32:06 localhost haproxy[64136]: Proxy www started.
Aug 22 15:32:06 localhost haproxy[64136]: Proxy cherokee started.
Aug 22 15:32:06 localhost haproxy[64136]: Proxy wap started.
Aug 22 15:32:06 localhost haproxy[64136]: Proxy pic started.
Aug 22 15:32:06 localhost haproxy[64136]: Proxy img started.
Aug 22 15:32:06 localhost haproxy[64136]: Proxy public started.
Aug 22 15:32:06 localhost haproxy[64136]: Proxy public started.
Aug 22 15:32:59 localhost haproxy[64137]: 219.142.128.30:6416 [22/Aug/2009:15:32:59.754] public stats/<STATS> 0/-1/-1/-1/0 200 17329 - - PR-- 0/0/0/0/0 0/0 "GET /?stats HTTP/1.1"
Aug 22 15:32:59 localhost haproxy[64137]: 219.142.128.30:6416 [22/Aug/2009:15:32:59.754] public stats/<STATS> 0/-1/-1/-1/0 200 17329 - - PR-- 0/0/0/0/0 0/0 "GET /?stats HTTP/1.1"

应用举例



WEB 均衡负载 & 虚拟主机

重新打开配置文件 haproxy.cfg,留意最下部分的均衡主机选项
listen localhost 0.0.0.0:1080 #运行的端口及主机名
mode http
option httpchk GET /index.htm #用于健康检测的后端页面
server s1 127.0.0.1:3121 weight 3 check #后端的主机 IP &权衡
server s2 127.0.0.1:3122 weight 3 check #后端的主机 IP &权衡

在实验中,我们的的后端是 squid 分开了2个端口在同一台服务器上。
以其中一项为例:

server s1 127.0.0.1:3121 weight 3 check

s1 是可自己定义的服务器别名
127.0.0.1:3121 服务器的IP地址以及端口号
weight 3 所能分配到请求的高低权衡,数字越大分配到的请求数就越高
check 接受 haproxy 的定时检查,以确定后端服务器的健康情况。

如需配置虚拟主机,相当简单,紧需修改 localhost 为你虚拟主机的的域名,加到haproxy配置中, 再为其分配后端服务器的参数即可。

例:

listen www.x1.com 0.0.0.0:1080 #运行的端口及主机名
mode http
option httpchk GET /index.htm #用于健康检测的后端页面
server s1 127.0.0.1:3121 weight 3 check #后端的主机 IP &权衡
server s2 127.0.0.1:3122 weight 3 check #后端的主机 IP &权衡

listen www.x2.com 0.0.0.0:1080 #运行的端口及主机名
mode http
option httpchk GET /index.htm #用于健康检测的后端页面
server s1 127.0.0.1:3121 weight 3 check #后端的主机 IP &权衡
server s2 127.0.0.1:3122 weight 3 check #后端的主机 IP &权衡


保存配置后重新加载,即可生效,刷新管理页面也可看到新的虚拟主机。
性能对比

在此,我们用最近最火红的 http 兼前端WEB均衡负载服务器 Nginx 与 Haproxy 做个简单的性能对比。

测试环境:

CPU:Xeon2.8G X2
RAM:4G
OS:RedHat As5.3 X64

工具:apache ab
参数:ab -i -c 500 -n 100000 (500并发,1W请求)
最终服务端:2个squid 需实现均衡负载

成绩如下:

####### Nginx + haproxy : (由Nginx通过反向代理发送请求至haproxy, 并由其进行均衡负载)

Concurrency Level: 500
Time taken for tests: 53.758 seconds
Complete requests: 100000
Failed requests: 0
Write errors: 0
Total transferred: 38600386 bytes
HTML transferred: 0 bytes

Requests per second: 1860.19 [#/sec] (mean)
Time per request: 268.790 [ms] (mean)
Time per request: 0.538 [ms] (mean, across all concurrent requests)
Transfer rate: 701.21 [Kbytes/sec] received
####### haproxy : (单独由haproxy进行均衡负载)
Concurrency Level: 500
Time taken for tests: 32.562 seconds
Complete requests: 100000
Failed requests: 0
Write errors: 0
Total transferred: 36606588 bytes
HTML transferred: 0 bytes
Requests per second: 3071.02 [#/sec] (mean)
Time per request: 162.812 [ms] (mean)
Time per request: 0.326 [ms] (mean, across all concurrent requests)
Transfer rate: 1097.85 [Kbytes/sec] received
####### nginx : (单独由nginx进行均衡负载)
Concurrency Level: 500
Time taken for tests: 36.539 seconds
Complete requests: 100000
Failed requests: 0
Write errors: 0
Total transferred: 38600000 bytes
HTML transferred: 0 bytes
Requests per second: 2736.82 [#/sec] (mean)
Time per request: 182.694 [ms] (mean)
Time per request: 0.365 [ms] (mean, across all concurrent requests)
Transfer rate: 1031.65 [Kbytes/sec] received

反复测试,得出其结果:
Haproxy 单独进行均衡负载的性能最强,超过了Nginx。
然而 Nginx + Haproxy 的搭配性能最弱,应该是跟通过了2层反向代理有关。
所以想用 Haproxy 替代 Nginx 所自带的均衡负载功能将会令性能打折。
但虽然如此 Haproxy 对均衡负载功能远比 Nginx 成熟,例如session粘贴,cookies 引导等都是 nginx 所没有的。
可根据需要而选择搭配。
相关启动参数介绍
相关启动参数介绍

#./haproxy –help //haproxy相关命令参数介绍.

haproxy -f <配置文件>

[-n 最大并发连接总数] [-N 每个侦听的最大并发数] [-d] [-D] [-q] [-V] [-c] [-p <pid文件>] [-s] [-l] [-dk]

[-ds] [-de] [-dp] [-db] [-m <内存限制M>] [{-sf|-st} pidlist...]

-d 前台,debug模式

-D daemon模式启动

-q 安静模式,不输出信息

-V 详细模式

-c 对配置文件进行语法检查

-s 显示统计数据

-l 显示详细统计数据

-dk 不使用kqueue

-ds 不使用speculative epoll

-de 不使用epoll

-dp 不使用poll

-db 禁用后台模式,程序跑在前台

-sf <pidlist>

程序启动后向pidlist里的进程发送FINISH信号,这个参数放在命令行的最后

-st <pidlist>

程序启动后向pidlist里的进程发送TERMINATE信号,这个参数放在命令行的最后


原文地址 http://www.oschina.net/bbs/thread/8785

[2]

http://alsww.blog.51cto.com/2001924/514089

ubuntu10.04下haproxy+heartbeat配置高可用负载均衡(修改版|亲测绝对可行)
2011-03-12 22:23:06
标签:heartbeat+haproxy heartbeat haproxy ubuntu 高可用负载均衡
版权声明:原创作品,谢绝转载!否则将追究法律责任。



配置前提:ubuntu10.04 server版

ip及主机名设置:

node1: 主机名:www1 ( HA01 )

eth0: 192.168.0.91 //对外IP地址

eth1: 192.168.1.11 //HA心跳使用地址

node2: 主机名:www2 ( HA02 )

eth0: 192.168.0.73 //对外IP地址

eth1: 192.168.1.13 //HA心跳使用地址



vip :192.168.0.99 (注意!此vip不需要刻意手动用命令配置,在heartbeat配置中即可生成!)





一、配置IP及主机名



在www1上:

vi /etc/hosts

127.0.0.1 localhost.localdomain localhost

192.168.0.91 www1 HA01

192.168.1.11 HA01

192.168.1.13 HA02

192.168.0.73 www2

vi /etc/hostname

www1



在www2上

vi /etc/hosts

127.0.0.1 localhost.localdomain localhost

192.168.0.73 www2 HA02

192.168.1.13 HA02

192.168.1.11 HA01

192.168.0.91 www1

vi /etc/hostname

www2

(配置完以后可以在www1上ping www2或者在www2上ping www1看是否能ping通,通则hosts和hostname设置成功)



二、配置 heartbeat

在www1和www2上配置如下内容:

1.安装

Apt-get install heartbeat



2.修改内核参数

Vi /etc/sysctl.conf

net.ipv4.ip_nonlocal_bind=1

sysctl –p #让设置生效



拷贝样例文件到ha.d目录下:

#sudo cp /usr/share/doc/heartbeat/authkeys /etc/ha.d/

#sudo cp /usr/share/doc/heartbeat/ha.cf.gz /etc/ha.d/

#sudo cp /usr/share/doc/heartbeat/haresource.gz /etc/ha.d/

#cd /etc/ha.d

#sudo gzip –d ha.cf.gz

#sudo gzip –d haresources.gz





3.设置授权KEY

vi /etc/ha.d/authkeys

auth 3

3 md5 alsww

chmod 600 /etc/ha.d/authkeys #修改权限



4.添加ha资源

vi /etc/ha.d/haresources

www1 192.168.0.99 haproxy



在www1上配置:

vi /etc/ha.d/ha.cf



vim /etc/ha.d/ha.cf

logfacility local0

keepalive 2

deadtime 10

udpport 694

bcast eth0

ucast eth0 192.168.0.73

auto_failback on



node www1

node www2



在www2上配置



vim /etc/ha.d/ha.cf

logfacility local0

keepalive 2

deadtime 10

udpport 694

bcast eth0

ucast eth0 192.168.0.91

auto_failback on



node www1

node www2



vim /etc/ha.d/haresources

www1 192.168.0.99 haproxy



在配置ha.cf文件前后用ip addr sh 命令对比如下,你会发现eth0多了一行:

“inet 192.168.0.99/24 brd 192.168.0.255 scope global secondary eth0:1”这就说明heartbeat的配置生效了!!

如果前后没多出这条命令,说明配置失败!!!



root@www1:~# ip addr sh

1: lo: <LOOPBACK,UP,LOWER_UP> mtu 16436 qdisc noqueue state UNKNOWN

link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00

inet 127.0.0.1/8 scope host lo

inet6 ::1/128 scope host

valid_lft forever preferred_lft forever

2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UNKNOWN qlen 1000

link/ether 00:0c:29:09:a7:f5 brd ff:ff:ff:ff:ff:ff

inet 192.168.0.91/24 brd 192.168.0.255 scope global eth0

inet6 fe80::20c:29ff:fe09:a7f5/64 scope link

valid_lft forever preferred_lft forever

3: eth1: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UNKNOWN qlen 1000

link/ether 00:0c:29:09:a7:ff brd ff:ff:ff:ff:ff:ff

inet 192.168.1.11/24 brd 192.168.0.255 scope global eth1

inet6 fe80::20c:29ff:fe09:a7ff/64 scope link

valid_lft forever preferred_lft forever

root@www1:~# ip addr sh

1: lo: <LOOPBACK,UP,LOWER_UP> mtu 16436 qdisc noqueue state UNKNOWN

link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00

inet 127.0.0.1/8 scope host lo

inet6 ::1/128 scope host

valid_lft forever preferred_lft forever

2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UNKNOWN qlen 1000

link/ether 00:0c:29:09:a7:f5 brd ff:ff:ff:ff:ff:ff

inet 192.168.0.91/24 brd 192.168.0.255 scope global eth0

inet 192.168.0.99/24 brd 192.168.0.255 scope global secondary eth0:1

inet6 fe80::20c:29ff:fe09:a7f5/64 scope link

valid_lft forever preferred_lft forever

3: eth1: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UNKNOWN qlen 1000

link/ether 00:0c:29:09:a7:ff brd ff:ff:ff:ff:ff:ff

inet 192.168.1.11/24 brd 192.168.0.255 scope global eth1

inet6 fe80::20c:29ff:fe09:a7ff/64 scope link

valid_lft forever preferred_lft forever





三、配置haproxy



1,下载并配置haproxy主配置文件

在www1和www2上配置:

apt-get install haproxy



cp /etc/haproxy/haproxy.cfg /etc/haproxy/haproxy.cfg.bak



cat /dev/null > /etc/haproxy/haproxy.cfg



vi /etc/haproxy/haproxy.cfg



2,修改默认配置,让haproxy开机自动启动

vim /etc/default/haproxy



3,修改端口号

vim /etc/apache2/ports.conf

修改端口为81

vim /etc/apache2/sites-available/default

修改端口号为81

修改完之后重启apache2服务

( 以上apache2文件最好修改并重启,否则启动haproxy肯定报错!)

4,开启haproxy服务

/etc/init.d/haproxy start

(如果启动不了haproxy服务则修改vi /etc/sysctl.conf文件,在最后添加:

net.ipv4.ip_forward = 1

net.ipv4.ip_nonlocal_bind=1)

5,编辑/var/www目录,加入验证文件

touch /var/www/alswwtest.htm

6,修改测试页面:

vim /var/www/index.html



修改www1的index.html内容为111111111。。。



修改www2的index.html内容为222222222。。。

四、 测试:

输入网址 : http://192.168.0.99 并按F5刷新 ,如果显示的网页在111111111和22222222之间来回切换,则说明配置负载均衡成功。



可用 curl命令验证:

如图





测试heartbeat效果: 关掉www1上的heartbeat服务,这瞬间PING效果如图:







再把www1上的heartbeat服务开启,这时的效果如图:





如果有这2个效果出现,说明配置成功!(备注:在关闭和开启heartbeat服务时,访问192.168.0.99均可正常切换111111和222222页面!!体现出群集的高可用性!)



也可使用haproxy软件web方式查看Web服务当前状态:

输入网址: http://192.168.0.99/haproxy-stats 如果显示如下界面,则配置成功!

(需要输入帐号密码: alsww | alswwpwd 才可进入 )














[3]

http://chiahu.com/blog/?p=532

HAProxy 使用 ACL 實現多重網域負載平衡筆記
2010年3月12日
佳湖
發表評論
閱讀評論

使用 HAProxy 已經有很長一段時間了。以往都是先交由 Apache 處理網域問題,然後再交給 HAProxy 做後續動作。直到最近我才將 ACL 的機制加入 HAProxy 中,讓 HAProxy 直接取代 Apache 的工作。使得多個網址的一台 WEB 機器也能實現平衡負載的理想。

以下是我的 haproxy.conf 設定範例,僅供參考:
global
log 127.0.0.1 local0
log 127.0.0.1 local1 notice
maxconn 4096
user haproxy
group haproxy
daemon

defaults
log global
mode http
option httplog
option dontlognull
retries 3
option redispatch
maxconn 2000
contimeout 5000
clitimeout 50000
srvtimeout 50000

frontend http-in
bind *:80
acl is_example_com hdr_beg(host) -i example.com
acl is_domain_com hdr_beg(host) -i domain.com

use_backend example_com if is_example_com
use_backend domain_com if is_domain_com
default_backend example_com

backend example_com
balance roundrobin
cookie SERVERID insert nocache indirect
option httpchk HEAD /check.txt HTTP/1.0
option httpclose
option forwardfor
server Server1 10.1.1.1:80 cookie Server1
server Server2 10.1.1.2:80 cookie Server2

backend domain_com
balance roundrobin
cookie SERVERID insert nocache indirect
option httpchk HEAD /check.txt HTTP/1.0
option httpclose
option forwardfor
server Server1 192.168.5.1:80 cookie Server1
server Server2 192.168.5.2:80 cookie Server2

[4]

http://blog.51yip.com/server/868.html

负载均衡工具haproxy安装,配置,使用

张映 发表于 2010-06-19

分类目录: 服务器相关

一,什么是haproxy

HAProxy提供高可用性、负载均衡以及基于TCP和HTTP应用的代 理,支持虚拟主机,它是免费、快速并且可靠的一种解决方案。HAProxy特别适用于那些负载特大的web站点,这些站点通常又需要会话保持或七层处理。HAProxy运行在当前的硬件上,完全可以支持数以万计的并发连接。并且它的运行模式使得它可以很简单安全的整合进您当前的架构中, 同时可以保护你的web服务器不被暴露到网络上。

二,安装haproxy

下载列表地址http://haproxy.1wt.eu

wget http://haproxy.1wt.eu/download/1.4/src/haproxy-1.4.8.tar.gz


tar zxvf haproxy-1.4.8.tar.gz
cd haproxy-1.4.8
uname -a //查看linux内核版本
make TARGET=linux26 PREFIX=/usr/local/haproxy
make install PREFIX=/usr/local/haproxy

三,配置haproxy

vi /usr/local/haproxy/haproxy.cfg
global
maxconn 5120
chroot /usr/local/haproxy
uid 99
gid 99
daemon
quiet
nbproc 2
pidfile /usr/local/haproxy/haproxy.pid
defaults
log global
mode http
option httplog
option dontlognull
log 127.0.0.1 local3
retries 3
option redispatch
maxconn 2000
contimeout 5000
clitimeout 50000
srvtimeout 50000

listen webinfo :1080
mode http
balance roundrobin
option httpclose
option forwardfor
server phpinfo1 192.168.18.2:10000 check weight 1 minconn 1 maxconn 3 check inter 40000
server phpinfo2 127.0.0.1:80 check weight 1 minconn 1 maxconn 3 check inter 40000

listen webmb :1081
mode http
balance roundrobin
option httpclose
option forwardfor
server webmb1 192.168.1.91:10000 weight 1 minconn 1 maxconn 3 check inter 40000
server webmb2 127.0.0.1:10000 weight 1 minconn 1 maxconn 3 check inter 40000

listen stats :8888
mode http
transparent
stats uri / haproxy-stats
stats realm Haproxy \ statistic
stats auth zhangy:xtajmd

三,启动haproxy

#启动haproxy
/usr/local/haproxy/haproxy -f /usr/local/haproxy/haproxy.cfg

#查看是否启动
[zhangy@BlackGhost haproxy]$ ps -e|grep haproxy
4859 ? 00:00:00 haproxy
4860 ? 00:00:00 haproxy

四,压力测试

[root@BlackGhost haproxy]# /usr/local/bin/webbench -c 100 -t 30 http://localhost:1080/phpinfo.php
Webbench – Simple Web Benchmark 1.5
Copyright (c) Radim Kolar 1997-2004, GPL Open Source Software.

Benchmarking: GET http://localhost:1080/phpinfo.php
100 clients, running 30 sec.

Speed=26508 pages/min, 20929384 bytes/sec.
Requests: 13254 susceed, 0 failed.

说明:haproxy监听的端口是1080,代理192.168.18.2:10000,127.0.0.1:10000

统计监听的是8888端口 http://localhost:8888/haproxy-stats


haproxy负载均衡

配置说明:

1.4系列参考配置文件

http://haproxy.1wt.eu/download/1.4/doc/configuration.txt

1.3系列参考配置文件

http://haproxy.1wt.eu/download/1.3/doc/configuration.txt

[5]

http://www.oschina.net/bbs/thread/8789

1.目的

通过此作业指导书,知道如何使用ubuntu+haproxy+heartbeat搭建大规模WEB集群环 境,实现负载均衡。

2.适用范围

所有系统管理员。

3.定义

l Ubuntu 开源的LINUX服务器操作系统.

l Haproxy Haproxy提供高可用性、负载均衡 以及基于TCP和HTTP应用

的代理,它是免费、快速并且可靠的一种解决方案

l Heartbeat 用于实现故障转移,当一台机器DOWN后自动切换到备用机器

l Web服务器 包括Apache,Lighttpd,Nginx

l Openfiler 这是一个基于LINUX的NAS,用来建立Iscsi服务器

一 环境

1.硬件

服务器:

DELL 2950 1台

DELL 1950 1台

2U组装机 2台

1U组装机 1台

交换机:

H3C千M交换机

2.网络环境

· Load Balancer 1: lb1.ylmf.com, IP address: 192.168.1.100 eth0

· Load Balancer 2: lb2.ylmf.com, IP address: 192.168.1.101 eth0

· Web Server 1: web1.ylmf.com, IP address: 192.168.1.102 eth0

· Web Server 2: web2.ylmf.com, IP address: 192.168.1.103 eth0

· Iscsi target:openfiler.ylmf.com,IP address:192.168.1.104 eth0

· lb1 and lb2共享IP: 192.168.1.99

3.所需要的软件

操作系统:Ubuntu server 8.0.4

Lb1和lb2:haproxy heartbeat

Web1和web2:Apache2

Iscsi target:Openfiler

二 Web服务器配置

在web1和 web2上配置

1.设置自动登录到iscsi target(openfiler)

安装open-iscsi

Apt-get install open-iscsi

发现iscsi-target

iscsiadm -m discovery -t sendtargets -p 192.168.1.104



设置开机自动登录到iscsi-target

iscsiadm -m node -T iqn.2006-01.com.openfiler:tsn.6f5d0fb29fc9 -p 192.168.1.104 –op update -n node.startup -v automatic

说明:-T后面的字符串是执行发现iscsi-target所获得的连接字符串

很多时候设置自动登录不成功,是因为在/etc/rc.local里面设置了dhclient

自动获取IP,这样自动登录到ISCSI的时候网络是不通的,所以不成功。

需要在/etc/network/interfaces里面设置自动获取IP地址

如: auto eth0

iface eth0 inet dhcp



2.格式化ISCSI磁盘并设置自动挂载

使用fdisk –l查看磁盘分区

fdisk -l



说明:/dev/sdb 164.4GB是iscsi磁盘

fdisk /dev/sdb #对磁盘进行分区

mkfs.ext3 /dev/sdb1 #将sdb1分区格式化为ext3文件系统

建立挂载目录

mkdir /iscsi

开机自动挂载

vi /etc/fstab

/dev/sdb1 /iscsi ext3 relatime 0 2 #增加这一行



3.安装web server

Apt-get install apache2

2)修改web服务器日志格式

Vi /etc/apache2/apache2.conf

#LogFormat “%h %l %u %t \”%r\” %>s %b \”%{Referer}i\” \”%{User-Agent}i\”" combined

LogFormat “%{X-Forwarded-For}i %l %u %t \”%r\” %>s %b \”%{Referer}i\” \”%{User-Agent}i\”" combined

注释掉原来的CustomLog,并修改文档根路径为/iscsi/www

vi /etc/apache2/sites-available/default

SetEnvIf Request_URI “^/check\.txt$” dontlog

CustomLog /var/log/apache2/access.log combined env=!dontlog



/etc/init.d/apache2 restart #重启web服务器

4)建立check文件,haproxy使用该文件检查WEB状态,必须建立

Touch /iscsi/www/check.txt

Web服务器配置完成,很简单,lb1和lb2就要复杂一些

三配置负载均衡haproxy

在lb1和lb2上配置

1.修改hosts文件

Vi /etc/hosts

192.168.1.100 lb1.ylmf.com

192.168.1.101 lb2.ylmf.com

192.168.1.102 web1.ylmf.com

192.168.1.103 web2.ylmf.com

2.安装软件

Apt-get install haproxy

3.修改haproxy配置文件

Cp /etc/haproxy.cfg /etc/haproxy.cfg.bak

Cat /dev/null > /etc/haproxy.cfg

Vi /etc/haproxy.cfg

global

log 127.0.0.1 local0

log 127.0.0.1 local1 notice

#log loghost local0 info

maxconn 4096

#debug

#quiet

user haproxy

group haproxy

defaults

log global

mode http

option httplog

option dontlognull

retries 3

redispatch

maxconn 2000

contimeout 5000

clitimeout 50000

srvtimeout 50000

listen webfarm 192.168.1.99:80

mode http

stats enable

stats auth ylmf:ylmf

balance roundrobin

cookie JSESSIONID prefix

option httpclose

option forwardfor

option httpchk HEAD /check.txt HTTP/1.0

server webA 192.168.1.102:80 cookie A check

server webB 192.168.1.103:80 cookie B check

4.修改默认配置,让haproxy开机自动启动

Vi /etc/default/haproxy

# Set ENABLED to 1 if you want the init script to start haproxy.

ENABLED=1

# Add extra flags here.

#EXTRAOPTS=”-de -m 16″

四配置heartbeat高可用

Active/Standby 模式

Lb1和lb2上配置

1.安装

Apt-get install heartbeat

2.修改内核参数

Vi /etc/sysctl.conf

net.ipv4.ip_nonlocal_bind=1

sysctl –p #让设置生效

3.设置授权KEY

vi /etc/ha.d/authkeys

auth 3

3 md5 somerandomstring

chmod 600 /etc/ha.d/authkeys #修改权限

4.添加ha资源

vi /etc/ha.d/haresources

lb1.ylmf.com 192.168.1.99

在lb1上配置

vi /etc/ha.d/ha.cf#

# keepalive: how many seconds between heartbeats

#

keepalive 2

#

# deadtime: seconds-to-declare-host-dead

#

deadtime 10

#

# What UDP port to use for udp or ppp-udp communication?

#

udpport 694

bcast eth0

mcast eth0 225.0.0.1 694 1 0

ucast eth0 192.168.1.101 #这个IP是lb2的IP

# What interfaces to heartbeat over?

udp eth0

#

# Facility to use for syslog()/logger (alternative to log/debugfile)

#

logfacility local0

#

# Tell what machines are in the cluster

# node nodename … — must match uname -n

node lb1.ylmf.com

node lb2.ylmf.com


在lb2上配置

vi /etc/ha.d/ha.cf#

# keepalive: how many seconds between heartbeats

#

keepalive 2

#

# deadtime: seconds-to-declare-host-dead

#

deadtime 10

#

# What UDP port to use for udp or ppp-udp communication?

#

udpport 694

bcast eth0

mcast eth0 225.0.0.1 694 1 0

ucast eth0 192.168.1.100 #这个IP是lb1的IP

# What interfaces to heartbeat over?

udp eth0

#

# Facility to use for syslog()/logger (alternative to log/debugfile)

#

logfacility local0

#

# Tell what machines are in the cluster

# node nodename … — must match uname -n

node lb1.ylmf.com

node lb2.ylmf.com


5.设置开机自动启动heartbeat

vi /etc/rc.local

/etc/init.d/heartbeat start

Active/Active模式

在lb1和lb2的ha.cf里面增加一行

auto_failback on

在lb1上

vi /etc/ha.d/haresources

lb1.ylmf.com 192.168.1.99

在lb2上

vi /etc/ha.d/haresources

lb2.ylmf.com 192.168.1.99

参考文档http://www.hiadmin.com/ha%E9%85%8D%E7%BD%AE%E6%96%B9%E6%B3%95/

五测试

1.启动heartbeat

/etc/init.d/heartbeat start

2.启动haproxy

/etc/init.d/haproxy start

3.在lb1和lb2上查看接口信息

Ifconfig 或 ip addr sh eth0

4.查看haproxy状态

http://192.168.1.99/haproxy?stats



六 haproxy参考文档

官方网址:http://cn.haproxy.org/
描述

HAProxy提供高可用 性、负载均衡 以及基于TCP和HTTP应用的代理,它是免费、快速并且可靠的一种解决方案。HAProxy特别适用于那些负载特大的web站点,这些站点通常又需要会 话保持或七层处理。 HAProxy运行在当前的硬件上,完全可以支持数以万计的并发连接。并且它的运行模式使得它可以很简单安全的整合进您当前的架构中,同时可以保护你的 web服务器不被暴露到网络上, 如下所示:



当前,版本1.3, 它支持如下新特性:
内容交换 : 可以根据请求(request)的任何一部分来选择一组服 务器, 比如请求的 URI, Host头(header), cookie, 以及其他任何东西. 当然,对那些静态分离的站点来说,对此特性还有更多的需求。
全透明代理 : 可以用 客户端IP地 址或者任何其他地址来连接后端服务器. 这个特性仅在Linux 2.4/2.6内核打了cttproxy补 丁后才可以使用. 这个特性也使得为某特殊服务器处理部分流量同时又不修改服务器的地址成为可能。
基于树的更快的调度器 : 1.2.16以上的版本要求所有的超时都设成同样的值以支持数以万计的全速连接. 这个特性已经移植到1.2.17.
内核TCP拼接 : 避免了内核到用户然后用户到内核端的数据拷贝, 提 高了吞吐量同时又降低了CPU使用率. Haproxy 1.3支持Linux L7SW 以满足在商用硬件上数Gbps的 吞吐的需求。
连接拒绝 : 因为维护一个连接的打开的开销是很低的,有时我们很需要限制攻击蠕虫(attack bots), 也就是说限制它们的连接打开从而限制它们的危害。 这个已经为一个陷于小型DDoS攻击的网站开发了而且已经拯救了很多站点。
细微的头部处理 : 使得编写基于header的规则更为简单,同时可以处理URI的某部分。
快而可靠的头部处理 : 使用完全RFC2616兼容的完整性检查对一般的请求全部 进行分析和索引仅仅需要不到2ms的时间。
模块化设计 : 允许更多人加入进此项目,调试也非常简单. poller已经分离, 已经使得它们的开发简单了很多. HTTP已经从TCP分离出来了, 这样增加新的七层特性变得非常简单. 其他子系统也会很快实现模块化
投机I/O 处理 : 在一个套接字就绪前就尝试从它读取数据。poller仅推测哪个可能就绪哪个没有,尝试猜测,并且如果成功,一些开销很大的系统调用 就可以省去了。如果失败,就会调用这些系统调用。已知的使用Linux epoll()已经净提升起码10%了。
ACLs : 使用任意规则的任意组合作为某动作的执行条件。
TCP 协议检查 : 结合ACL来对请求的任意部分进行检查,然后再进行转发。这就可以执行协议验证而不是盲目的进行转发。比如说允许SSL但拒绝SSH。
更多的负载均衡算法 : 现在,动态加权轮循(Dynamic Round Robin),加权源地址哈希(Weighted Source Hash),加权URL哈希和 加权参数哈希(Weighted Parameter Hash)已经实现。其他算法比如Weighted Measured Response Time也很快会实现。

和其他”免费”的负载均衡解决方案不同的是, HAproxy仅被几百或者几千的遍布全球的用户使用, 但是这些用户通常运行很大的站点, 每天有数百万的点击量和几Gbps甚至几万兆(terabytes)吞吐量。 他们需要7×24的可用性并且愿意承受免费软件解决方案的风险, 同时有这些使用技术. 通常, 这种解决方案仅配置为内部使用, 我仅在他们提供给我反馈或者需要新特性的时候才会知道.

Heartbeat介绍

Linux-HA项目在广泛的平台上提供成熟的高可用(故障切换)能力,在全球支持上万个关键任务节点。 其中一小部分记录在成功案例。

Linux-HA项目是目前可用的时间最长,最多能力,和经过最好测试的开放源码高可用性解决方案,并具有最大的辅助社区.根据项目的规则,它一直 保证编译时没有警告,没有静态分析工具发现的问题.安全专家定期审查源程序.

它提供对节点,应用的监视功能,提供一个成熟的基于规则的资源配置依赖模型.当一个故障发生,或一个规则变化,用户提供的规则将指导期望的资源的重 新配置.

一般来说,它具有至少与Veritas VCS, SunCluster, LifeKeeper, ServiceGuard等商业集群软件类似的功能和同样方便的使用方法.
特性
工作在所有Linux的变体和平台上,并随许多Linux发行版一起打包发行.
支持复杂的服务间的依赖关系.可以快速准确地启动和停止资源.
支持强制多个资源运行在同一位置或强制多个资源运行在不同位置的规则.
基于规则的资源配置可以让资源精确地根据用户定义的规则,节点的属性和位置的限制条件来配置.
适当力度的资源管理可以让用户自己定义属性,这样可以使资源的切换基于用户自己的标准进行.
基于时间的规则可以根据不同时间来适用不同的规则.举例来说,用户可以设定,切换要延迟到晚上或周末进行.
易于理解和配置的基于init脚本的应用管理. – 对于基本管理,许多服务不需要定义新脚本.
资源组提供了一个简单的易于使用的服务管理.

· 活动的隔离机制(STONITH)提供强大的数据完整性保证-即使在发生一些不 寻常的故障情况下.

· 全特性的图形用户界面 – 可以用来配置,控制,监视服务和服务器的运行

· 支持工业标准的系统管理协议 CIM (Common Information Model)
开放源码避免了提供商占据产品,并提供非常大的灵活性,稳定性,响应度和测试.
在Linux上有很长的历史,并在健壮性上有良好的声望.
可以在单独的机器上对基于init脚本的应用进行监控和重启.
可以运行在FreeBSD和Solaris上,并可以移植其它类POSIX平台.

官方网址:http://www.linux-ha.org/zh/HomePage_zh

完成!

原文转自:高进波博客

posted @ 2011-03-28 19:19  陳聽溪  阅读(1175)  评论(0)    收藏  举报