设为首页 收藏本站
查看: 1407|回复: 0

[经验分享] heartbeat-haproxy-高可用

[复制链接]

尚未签到

发表于 2015-9-4 13:26:26 | 显示全部楼层 |阅读模式
  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.iyunv.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
四,压力测试
[iyunv@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&Prime;
四配置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
完成!
原文转自:高进波博客

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-109416-1-1.html 上篇帖子: HAproxy和TIME WAIT的一次问题排查 下篇帖子: lVS/haproxy
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表