1、Haproxy概念 php
Haproxy提供高可用性、负载均衡以及基于TCP和HTTP应用的代理,支持虚拟主机,它是免费、快速而且可靠的一种解决方案。Haproxy特别适用于那些负载特大的web站点,这些站点一般又须要会保持或七html
层处理。Haproxy运行在当前的硬件上,彻底能够支持数以万计的并发链接。而且它的运行模式使得它能够很 简单安全的整合进您当前的架构中,同时能够保护你的web服务器不被暴露到网络上。 前端
2、安装Haproxy linux
# 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
3、配置Haproxy web
Haproxy配置中分红五部份内容,固然这些组件不是必选的,能够根据须要选择做为配置。redis
global:参数是进程级的,一般和操做系统(OS)相关。这些参数通常只设置一次,若是配置无误,就不须要再次 配置进行修改;算法
default:配置默认参数的,这些参数能够被利用配置到frontend,backend,listen组件;后端
frontend:接收请求的前端虚拟节点,Frontend能够根据规则直接指定具体使用后端的backend(可动态选择);安全
backend:后端服务集群的配置,是真实的服务器,一个Backend对应一个或者多个实体服务器;bash
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请求。
4、经过脚原本启动与关闭haproxy
一、编写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
二、让脚本随系统自动启动
# 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,数字越大,优先级越低。
三、启动与中止haproxy
# service haproxy stopSTOP HAPoxy ListenSTOP HAPoxy process# ps -ef |grep haproxy |grep -v grep# service haproxy startSTART HAPoxy SERVERS# ps -ef |grep haproxy |grep -v greproot 11259 1 0 15:33 ? 00:00:00 /usr/local/haproxy/sbin/haproxy -f /usr/local/haproxy/haproxy.cfg