一、Haproxy概念
Haproxy提供高可用性、负载均衡以及基于TCP和HTTP应用的代理,支持虚拟主机,它是免费、快速并且可靠的一种解决方案。Haproxy特别适用于那些负载特大的web站点,这些站点通常又需要会保持或七
层处理。Haproxy运行在当前的硬件上,完全可以支持数以万计的并发连接。并且它的运行模式使得它可以很 简单安全的整合进您当前的架构中,同时可以保护你的web服务器不被暴露到网络上。
二、安装Haproxy
# mkdir /usr/local/haproxy # tar zxvf haproxy-1.5.3.tar.gz # cd haproxy-1.5.3 # make TARGET=linux2628 PREFIX=/usr/local/haproxy # make install PREFIX=/usr/local/haproxy # mkdir /etc/haproxy # cp examples/haproxy.cfg /etc/haproxy/ # groupadd -g 1001 haproxy # useradd -g haproxy haproxy -s /sbin/nologin
三、配置Haproxy
Haproxy配置中分成五部分内容,当然这些组件不是必选的,可以根据需要选择作为配置。
global:参数是进程级的,通常和操作系统(OS)相关。这些参数一般只设置一次,如果配置无误,就不需要再次 配置进行修改;
default:配置默认参数的,这些参数可以被利用配置到frontend,backend,listen组件;
frontend:接收请求的前端虚拟节点,Frontend可以根据规则直接指定具体使用后端的backend(可动态选择);
backend:后端服务集群的配置,是真实的服务器,一个Backend对应一个或者多个实体服务器;
listen:Frontend和Backend的组合体。
编写haproxy.cfg文件:
# vi /etc/haproxy/haproxy.cfg # 两节点配置一致
global log 127.0.0.1 local0 #日志输出配置,所有日志都记录在本机,通过local0输出 log 127.0.0.1 local1 notice #log loghost local0 info maxconn 51200 #最大连接数 chroot /usr/local/haproxy #改变当前工作目录。 pidfile /var/run/haproxy.pid uid haproxy gid haproxy daemon #以后台程序运行 #quiet nbproc 1 #进程数 defaults log global mode http #默认的模式mode { tcp|http|health },tcp是4层,http是7层,health只会返回OK retries 3 #两次连接失败就认为是服务器不可用,也可以通过后面设置 option httplog #日志类别,采用httplog option dontlognull #option redispatch #当serverId对应的服务器挂掉后,强制定向到其他健康的服务器 #option abortonclose #当服务器负载很高的时候,自动结束掉当前队列处理比较久的链接 maxconn 20000 #默认的最大连接数 timeout connect 5000ms #连接超时 timeout client 30000ms #客户端超时 timeout server 30000ms #服务器超时 timeout check 2000 #心跳检测超时 listen admin_stats bind 0.0.0.0:8888 #监听端口 stats enable #开启统计页面功能 option httplog #采用http日志格式 stats refresh 10s #统计页面自动刷新时间 stats uri /stats #统计页面url stats realm Haproxy Manager #统计页面密码框上提示文本 stats auth admin:123456 #统计页面用户名和密码设置,开启登录验证功能 stats admin if TRUE #若登录用户验证通过,则赋予管理功能 stats hide-version #隐藏统计页面上HAProxy的版本信息 listen web *:88 option httpclose #每次请求完毕后主动关闭http通道,ha-proxy不支持keep-alive,只能模拟这种模式的实现 option forwardfor #如果后端服务器需要获得客户端真实ip需要配置的参数,可以从Http Header中获得客户端ip balance roundrobin #负载均衡算法 #option httpchk HEAD /index.php HTTP/1.0 #启用HTTP协议检查服务器监控状态,在web服务器上分别建立index.html页面,可以添加不同的内容,给待会测试用,内容分别填写100:80,150:8080,200:8080好了,如果没有,haproxy会认为对应的web服务器挂掉了。 server web1 192.168.1.101:8080 cookie 100 check inter 5000 fall 1 rise 2 server web2 192.168.1.102:8080 cookie 150 check inter 5000 fall 1 rise 2 ##server 服务器定义:cookie 表示server id;check inter 2000 是检测心跳频率;rise 2 是2次正确认为服务器可用;fall 5 是5次失败认为服务器不可用;weight 代表权重 附:这里还说一下啊,HAProxy的算法现在也越来越多了,具体有如下8种: ①roundrobin,表示简单的轮询,这个不多说,这个是负载均衡基本都具备的; ②static-rr,表示根据权重,建议关注; ③leastconn,表示最少连接者先处理,建议关注; ④source,表示根据请求源IP,这个跟Nginx的IP_hash机制类似,我们用其作为解决session问题的一种方法,建议关注; ⑤ri,表示根据请求的URI; ⑥rl_param,表示根据请求的URl参数'balance url_param' requires an URL parameter name; ⑦hdr(name),表示根据HTTP请求头来锁定每一次HTTP请求; ⑧rdp-cookie(name),表示根据据cookie(name)来锁定并哈希每一次TCP请求。
四、通过脚本来启动与关闭haproxy
1、编写haproxy脚本
# vi /etc/rc.d/init.d/haproxy
#!/bin/bash
BASE_DIR="/var/run"
ARGV="$@"
start()
{
echo "START HAPoxy SERVERS"
/usr/local/haproxy/sbin/haproxy -f /etc/haproxy/haproxy.cfg
}
stop()
{
echo "STOP HAPoxy Listen"
kill -TTOU $(cat $BASE_DIR/haproxy.pid)
echo "STOP HAPoxy process"
kill -USR1 $(cat $BASE_DIR/haproxy.pid)
}
case $ARGV in
start)
start
ERROR=$?
;;
stop)
stop
ERROR=$?
;;
restart)
stop
start
ERROR=$?
;;
*)
echo "hactl.sh [start|restart|stop]"
esac
exit $ERROR
2、让脚本随系统自动启动
# chmod +x /etc/rc.d/init.d/haproxy
# chkconfig --add haproxy
haproxy does not support chkconfig
----解决上面的问题的办法是在/etc/rc.d/init.d/haproxy中添加下面两行到#!/bin/bash之后
# vi /etc/rc.d/init.d/haproxy
#!/bin/bash
#chkconfig: 2345 10 90
#description:haproxy
----其中2345是默认启动级别,级别有0-6共7个级别。----等级0表示:表示关机----等级1表示:单用户模式----等级2表示:无网络连接的多用户命令行模式----等级3表示:有网络连接的多用户命令行模式----等级4表示:不可用----等级5表示:带图形界面的多用户模式----等级6表示:重新启动----10是启动优先级,90是停机优先级,优先级范围是0-100,数字越大,优先级越低。
3、启动与停止haproxy
# service haproxy stop
STOP HAPoxy Listen
STOP HAPoxy process
# ps -ef |grep haproxy |grep -v grep
# service haproxy start
START HAPoxy SERVERS
# ps -ef |grep haproxy |grep -v grep
root 11259 1 0 15:33 ? 00:00:00 /usr/local/haproxy/sbin/haproxy -f /usr/local/haproxy/haproxy.cfg