阿泰老师曾在群里说过,七层负载的话,HAproxy要优于Nginx
<?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" />

 

HaproxyNginx强的地方是对后端realserver的健康检查功能,是通过在WWW主目录下设定一个特定文件(如welcome.htm)并定时检查来实现的。还有一个是支持session会话保持功能,即同一个IP只转发到一台服务器上。这个功能LVS有,现在Nginx里有一个第三方扩展模块Nginx_upstream_ivn_route,是基于cookiessession sticky功能(基于cookies的会话保持模块),不过效果如何我暂时还没有测试。

 

一,         安装 Haproxy

tar  –zxvf   haproxy-<?xml:namespace prefix = st1 ns = "urn:schemas-microsoft-com:office:smarttags" />1.2.17.tar.gz
cd  haproxy-1.2.17
make  TARGET=linux26     # README ,找到自己的系统符合的标志

 

这样,在该目录下生成了 haproxy 命令文件

    

二,配置文件

自己创建配置文件 haproxy.cfg 如下:

  global

       maxconn 5120

      ulimit-n 65536

       chroot /usr/share/haproxy   #  haproxy 安装目录

       uid 99

       gid 99

       daemon

      quiet

        # 通过 nbproc 多设置几个 haproxy 并发进程,这样每个进程的 task_queue 相对就会短很多,性能自然就能提高不少

       nbproc   2  

       #pidfile /var/run/haproxy-private.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 SDS.DMS.COM 10.0.0.0:80  # 监听 IP 及端口,域名是在 Web 界面显示的标识

   listen 123  0.0.0.0:80  # 这个 123 是区别不同的负载名称,因为一个 listen 定义一个负载池

   mode http

   stats uri /haproxy   # 监控 haproxy 状态虚拟目录

   stats realm Haproxy\statistics

   stats auth gao:gao   # 设置状态监控的用户名为 gao 密码为 gao

   balance roundrobin   # 负载均衡算法,轮询, 1.3.14 以上版本支持多种算法

   cookie SERVERID insert indirect

   option httpclose

   option forwardfor 

   option httpchk HEAD /welcome.htm HTTP/1.0   # 健康检测 每一台的 WEB 根目录存放

                                          #  weblocme.htm 文件(靠这个文件检查健康状况!!!)

# 下面是节点服务器

#server APP01 10.0.1.10:80 cookie app1inst1 check inter 2000 rise 2 fall 5

#server APP02 10.0.1.11:80 cookie app1inst2 check inter 2000 rise 2 fall 5

server APP03 192.168.109.5:81 cookie app1inst3 check inter 2000 rise 2 fall 5

server APP04 192.168.109.3:80 cookie app1inst4 check inter 2000 rise 2 fall 5

 

三,        启动

   /usr/local/src1/HAproxy/haproxy-1.2.17/haproxy -f  /usr/local/src1/HAproxy/haproxy.cfg

正常启动的话,是什么都不输出的,没有 OK 之类反馈

 

我现在的环境是两台虚拟机 192.168.109.4 192.168.109.3

192.168.109.4 上另设置了一个 IP 192.168.109.5 ,让 Apache 专门监听这个 IP 81 端口

在算法是轮询的前提下,测试

 

[root@xxw HAproxy]# for i in $(seq 10); do curl http://192.168.109.4  ;done

192.168.109.3 It is work!

192.168.109.5  It is work!

192.168.109.5  It is work!

192.168.109.3 It is work!

192.168.109.3 It is work!

192.168.109.5  It is work!

192.168.109.3 It is work!

192.168.109.5  It is work!

192.168.109.3 It is work!

192.168.109.5  It is work!

 

算法改为 source ,测试

#!/bin/bash

for ((i=0;i<10;i++))

do curl http://192.168.109.4

done

[root@xxw HAproxy]# sh ~/test/test

192.168.109.5  It is work!

192.168.109.5  It is work!

192.168.109.5  It is work!

192.168.109.5  It is work!

192.168.109.5  It is work!

192.168.109.5  It is work!

192.168.109.5  It is work!

192.168.109.5  It is work!

192.168.109.5  It is work!

192.168.109.5  It is work!

 

1.3.14 版本支持以下负载算法:

  * 简单的轮询,balance roundrobin

* 根据请求的源IPbalance source

* 根据请求的uribalance uri

* 根据请求RUL中的参数,balance url_param

 

http://192.168.109.4/hproxy上可以看到详细的状态 (帐户就是haproxy.cfg上的gao:gao

 

LVS太笨重了,如果Nginx健康检查好的话,还是转向Nginx吧,尽管配置比HAproxy稍稍复杂

 

HAproxy 支持双机热备,注意搜集一下这方面的资料,下一步是测试Nginx的会话保持功能。