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.*" %>
<% //HttpSession session = request.getSession(true);
System.out.println(session.getId());
out.println("
51 ESSION ID:" + session.getId()+"
");
51 ESSION ID:" + session.getId()+"
");
%>
(二)虚拟主机测试
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
[email protected] //就会连接到后端,可以支持长连接!
(四)性能
根据官方测试可以达到千万级并发,可以跑满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、应用范围比较广,可以对所有应用做负载均衡;
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就简单多了
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的算法现在也越来越多了。
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的状态,而且自带的监控界面也非常人性化!