Haproxy安装
 
 
1、 安装
wget http://haproxy.1wt.eu/download/1.4/src/haproxy-1.4.20.tar.gz
tar -zxvf haproxy-1.4.20.tar.gz
cd haproxy-1.4.20
make TARGET=linux26
make install
cd ..
 
vi /etc/sysctl.conf
net.ipv4.ip_nonlocal_bind=1
生效sysctl.conf配置
Sysctl –p
 
 
 
 
2、 启动脚本
#!/bin/bash
start(){
haproxy -f /etc/haproxy/haproxy.cfg
}
stop(){
echo "find pid:`cat /var/run/haproxy-private.pid`"
kill `cat /var/run/haproxy-private.pid`
}
test(){
haproxy -f /etc/haproxy/haproxy.cfg -c
}
case "$1" in
         start)
         start
         echo -e "\033[40;31mHaproxy start...\033[0m\n"
         ;;
         stop)
         stop
         echo -e "\033[40;31mHaproxy stop...\033[0m\n"
         ;;
         test)
         test
         ;;
         *)
         echo $"Usage:"$0" {start|stop|test}"
        ;;
Esac
 
 
 
 
3、 配置
mkdir -p /etc/haproxy
useradd haproxy
 
vim /etc/haproxy/haproxy.cfg
global
#         chroot /var/chroot/haproxy
        daemon
        log 127.0.0.1 local3
        nbproc 1
        pidfile /var/run/haproxy-private.pid
 
        ulimit-n        65535
        user    haproxy
             group        haproxy
        maxconn         32000                #最大连接数
        spread-checks           4
        tune.maxaccept          8
        tune.maxpollevents      100
 
 
defaults askwan
        log     global
        mode    http                   #默认的模式,还有tcp,http,health,tcp是4层,http是7层
        option httplog
        option dontlognull
        log 127.0.0.1 local3
        retries 3
        option redispatch
        maxconn 32000
        contimeout      5000
        clitimeout      50000
        srvtimeout      50000
 
 
listen appserver 0.0.0.0:80
        mode http
        stats enable                                 #开启监控界面
        stats hide-version
        stats uri /haproxy-stats
        stats realm Haproxy\ statistics
        stats auth admin:admin           #设置监控界面用户密码
        stats refresh 3s
         stats admin if TRUE
        monitor-uri /haproxy_test
        balance roundrobin                    #负载均衡的方式
        option httpclose
        option forwardfor
        #option httpchk HEAD /1.txt HTTP/1.0 #7层检测要开启这个,去掉为4层检测
 
        server server1 192.168.14.51:8080 check inter 2000 
        server server2 192.168.14.52:8080 check inter 2000
 
vim syslog.conf
...
local3.*          /var/log/haproxy.log
 
负载方式有:
轮询                    roundrobin
根据权重RR    static-rr
最少连接数      leastconn
根据源IP          source
根据URI            uri
根据URL里的参数          url_param
具体参考:http://code.google.com/p/haproxy-docs/wiki/balance
 
 
4、 测试
(一)session会话保持测试
有三种方法可以做到session会话保持,分别为:cookie识别、session识别、ip保持,配置如下:
Cookie识别
cookie JSESSIONID prefix
server tomcat1 192.168.14.51:8080 cookie JSESSIONID_SERVER_1 check inter 5000
server tomcat2 192.168.14.52:8080 cookie JSESSIONID_SERVER_2 check inter 5000
 
Session识别
appsession JSESSIONID len 52 timeout 3h
server tomcat1 192.168.14.51:8080 check
server tomcat2 192.168.14.52:8080 check
 
IP保持
balance source #负载方法改为source
 
测试页代码为:
<%@ page contentType="text/html; charset=UTF-8" %>
<%@ page import="java.util.*" %>
<html><head><title>Cluster Test</title></head>
<body>
<% //HttpSession session = request.getSession(true);
System.out.println(session.getId());
out.println("<br> 51 ESSION ID:" + session.getId()+"<br>");
%>
</body>
</html>
 
 
 
(二)虚拟主机测试
Haproxy对虚拟机的支持有两种方法,一种是后端服务器的支持,一种是通过frontend和backend的方法来实现
第一种很简单,只要在后端的服务器中进行虚拟主机的设置就OK,haproxy反向的时候自然会转到各个虚拟主机里面!
第二种要修改配置文件,具体配置如下:
 
frontend web_in
     mode    http
     maxconn 65535
     bind    *:80
 
     acl is_web hdr_beg(host) -i www.51play.com
     acl is_pay hdr_beg(host) -i pay.51play.com
 
     use_backend web if is_web
     use_backend pay if is_pay
 
 
backend web
     mode    http
     fullconn 56000
     option httpchk HEAD /1.txt HTTP/1.1\r\nHost:www.51play.com
 
     balance roundrobin
     #balance source
     #option allbackups
     #cookie SERVERID       insert nocache indirect
     server server1         192.168.14.51:80 check inter 2s minconn 64 maxconn 1024 slowstart 10s weight 100
     server server2         192.168.14.52:80 check inter 2s minconn 64 maxconn 1024 slowstart 10s weight 100
 
backend pay
     mode    http
     fullconn 2048
     option httpchk HEAD /2.txt HTTP/1.1\r\nHost:pay.51play.com
     balance roundrobin
     server server1         192.168.14.51:80 check inter 2s minconn 64 maxconn 1024 slowstart 10s weight 100
     server server2         192.168.14.52:80 check inter 2s minconn 64 maxconn 1024 slowstart 10s weight 100
 
(三)tcp长连接测试
配置如下:
vim /etc/haproxy/haproxy.cfg
 
global
        daemon
        log 127.0.0.1 local3
        nbproc 1
        pidfile /var/run/haproxy-private.pid
 
        ulimit-n        65535
        user    haproxy
         group        haproxy
        maxconn         32000
        spread-checks           4
        tune.maxaccept          8
        tune.maxpollevents      100
 
 
defaults
        mode    tcp
         retries 2                          #尝试2次失败则从集群摘除
         option redispatch              #如果失效则强制转换其他服务器
         option abortonclose           #连接数过大自动关闭
         maxconn 32000                  #最大连接数
         timeout connect 1d           #连接超时时间,重要,hive查询数据能返回结果的保证
         timeout client 1d               #同上
         timeout server 1d              #同上
         timeout check 2000           #健康检查时间
 
 
listen admin_stats
         bind 0.0.0.0:80
        mode http
        stats enable
        stats hide-version
        stats uri /haproxy-stats
        stats realm Haproxy\ statistics
        stats auth admin:admin
        stats refresh 3s
         stats admin if TRUE
 
listen sshd
         bind 0.0.0.0:2022
         mode tcp
         balance leastconn   #最小连接数
         maxconn 32000
         server server1 192.168.14.51:22 check inter 50000 rise 1 fall 2 #释义:server 主机代名(你自己能看懂就行),IP:端口 每180000毫秒检查一次。也就是三分钟
         server server2 192.168.14.52:22 check inter 50000 rise 1 fall 2
 
ssh –p 2022 root@192.168.14.11 //就会连接到后端,可以支持长连接!
 
 
(四)性能
根据官方测试可以达到千万级并发,可以跑满10G的网卡,详见:http://haproxy.1wt.eu/10g.html
 
 
(五) haproxy和LVS比较
来源于互连网
LVS:使用集群技术和Linux操作系统实现一个高性能、高可用的服务器,它具有很好的可伸缩性(Scalability)、可靠性(Reliability)和可管理性(Manageability),感谢章文嵩博士为我们提供如此强大实用的开源软件。
LVS的特点是:
1、抗负载能力强、是工作在网络4层之上仅作分发之用,没有流量的产生,这个特点也决定了它在负载均衡软件里的性能最强的;
2、配置性比较低,这是一个缺点也是一个优点,因为没有可太多配置的东西,所以并不需要太多接触,大大减少了人为出错的几率;
3、工作稳定,自身有完整的双机热备方案,如LVS+Keepalived和LVS+Heartbeat,不过我们在项目实施中用得最多的还是LVS/DR+Keepalived;
4、无流量,保证了均衡器IO的性能不会收到大流量的影响;
5、应用范围比较广,可以对所有应用做负载均衡;
6、软件本身不支持正则处理,不能做动静分离,这个就比较遗憾了;其实现在许多网站在这方面都有较强的需求,这个是Nginx/HAProxy+Keepalived的优势所在。
7、如果是网站应用比较庞大的话,实施LVS/DR+Keepalived起来就比较复杂了,特别后面有Windows Server应用的机器的话,如果实施及配置还有维护过程就比较复杂了,相对而言,Nginx/HAProxy+Keepalived就简单多了
 
HAProxy的特点是:
1、HAProxy是支持虚拟主机的,以前有朋友说这个不支持虚拟主机,我这里特此更正一下。
2、能够补充Nginx的一些缺点比如Session的保持,Cookie的引导等工作
3、支持url 7层检测后端的服务器出问题的检测会有很好的帮助。
4、它跟LVS一样,本身仅仅就只是一款负载均衡软件;单纯从效率上来讲HAProxy更会比Nginx有更出色的负载均衡速度,在并发处理上也是优于Nginx的。
5、HAProxy可以对Mysql读进行负载均衡,对后端的MySQL节点进行检测和负载均衡,不过在后端的MySQL slaves数量超过10台时性能不如LVS,所以我向大家推荐LVS+Keepalived。
6、HAProxy的算法现在也越来越多了。
 
5、 监控
Haproxy有cacti和nagios下面的监控插件,可以方面监控haproxy的状态,而且自带的监控界面也非常人性化!