HAProxy是一个使用C语言编写的自由及开放源代码软件[1],其提供高可用性、负载均衡,以及基于TCP和HTTP的应用程序代理。HAProxy特别适用于那些负载特大的web站点,这些站点通常又需要会话保持或七层处理。HAProxy 的优点能够补充 Nginx 的一些缺点,比如支持 Session 的保持,Cookie 的引导;同时支持通过获取指定的 url 来检测后端服务器的状态。HAProxy运行在当前的硬件上,完全可以支持数以万计的并发连接。并且它的运行模式使得它可以很简单安全的整合进您当前的架构中, 同时可以保护你的web服务器不被暴露到网络上。HAProxy实现了一种事件驱动, 单一进程模型,此模型支持非常大的并发连接数。多进程或多线程模型受内存限制 、系统调度器限制以及无处不在的锁限制,很少能处理数千并发连接。事件驱动模型因为在有更好的资源和时间管理的用户空间(User-Space) 实现所有这些任务,所以没有这些问题。此模型的弊端是,在多核系统上,这些程序通常扩展性较差。这就是为什么他们必须进行优化以 使每个CPU时间片(Cycle)做更多的工作。
1)安装nginx此处省略(注不知道的关照我)
2)安装Haproxy
yum -y install pcre-devel bzip2-devel
tar zxf haproxy-1.4....gz
cd haproxy-1.4...
make TARGET=linux26 //62位os
make install
//建立Haproxy的配置文件
mkdir /etc/haproxy //创建配置文件目录
cp examples/haproxy/haproxy.cfg /etc/haproxy/ //将haproxy.cfg文件复制到配置文件目录下
3)Haproxy配置项介绍
HAProxy配置文件根据功能和用途,主要有5个部分组成,但有些部分并不是必须的,可以根据需要选择相应的部分进行配置。
(1)global部分
用来设定全局配置参数,属于进程级的配置,通常和操作系统配置有关。
(2)defaults部分
默认参数的配置部分。在此部分设置的参数值,默认会自动被引用到下面的frontend、backend和listen部分中,因此,如果某些参数属于公用的配置,只需在defaults部分添加一次即可。而如果在frontend、backend和listen部分中也配置了与defaults部分一样的参数,那么defaults部分参数对应的值自动被覆盖。
(3)frontend部分
此部分用于设置接收用户请求的前端虚拟节点。frontend是在HAProxy1.3版本之后才引入的一个组件,同时引入的还有backend组件。通过引入这些组件,在很大程度上简化了HAProxy配置文件的复杂性。frontend可以根据ACL规则直接指定要使用的后端backend。
(4)backend部分
此部分用于设置集群后端服务集群的配置,也就是用来添加一组真实服务器,以处理前端用户的请求。添加的真实服务器类似于LVS中的real server节点。
(5)listen部分
此部分是frontend部分和backend部分的结合体。在HAProxy1.3版本之前,HAProxy的所有配置选项都在这个部分中设置。为了保持兼容性,HAProxy新的版本仍然保留了listen组件的配置方式。目前在HAProxy中,两种配置方式任选其一即可。
4)haproxy配置文件解释
vim /etc/haproxy/haproxy.cfg
~~~~~~~~~~~~~~~~~~~~~~~~~~
global
chroot dir //工作目录chroot
log 127.0.0.1 locall info //全局日志配置,使用127.0.0.1的rsyslog服务中locall日志设备,等级info
maxconn 4096 //每个进程最大并发数
nbproc 1 //后台进程数量
#用户
user nobody //用户
group nobody //用户
daemon //后台程序模式工作
pidfile /var/run/haproxy-private.pid //HAProxy pid文件存储目录
#tune.bufsize 16384 设置buffer(B)
defaults
mode http //模式(tcp http health)
retries 3 //连接后端服务器重试次数,超出后标为不可用
timeout connect 10S //连接服务器最长等待时间(ms)默认为5000
timeout client 20s //连接客户端发送数据最长等待时间。 默认为50000
timeout server 30s //服务器回复客户端最长等待时间。 默认为50000
timeout check 5s //对后端服务器的检测超时时间。
frontend www //定义名为www的前端虚拟节点
# bind [:] interface 监听套字节定义
bind *:80
mode http
option httplog //启用日志记录HTTP请求。
option forwardfor //启用后后端服务器可以获得客户端IP
option httpclose //客户端和服务器完成一次连接请求后,HAProxy主动关闭TCP链接(优化选项)
log global //使用全局日志配置
default_backend htmpool //指定后端服务池(backend定义htmpool)
backend htmpool //定义名为htmpool的真实服务器组
mode http
option redispatch //用于cookie保持环境。(如后端服务器故障,客户端cookie不会刷新,用此来把用户请求强制定向到正常服务器)
option abortonclose //负载均衡很高时,自动结束当前队列处理时间长的连接
balance roundrobin //负载均衡算法。
cookie SERVERID //允许向cookie插入SERVERID.下面server可以使用cookie定义
#option httpchk
#mothod: OPTION、GET、HEAD (其中HEAD仅检测是否返回状态码200 更快,更简单)
option httpchk GET /index.php //启用HTTP服务状态检测功能
#server [:port] [param*]
#[param*]为后端设定参数
#cookie server1 指定后端服务器设置cookie值,目的实现持久连接,指定的cookie值在请求时会被检查,第一次此cookie值将挑选后端服务器将一直被沿用。
#weight num权重
#check启用后端执行健康检测
#inter num 健康状态检测时间间隔
#rise num 从故障状态转换至正常需成功检测次数
#fall num 从正常转换故障需失败次数
#backup 设置后端真实服务器备份服务器,仅在所有真实服务器不可用启用
server web1 192.168.10.2:80 cookie server1 weight 6 check inter 2000 rise 2 fall 3 //定义在线节点
server web2 192.168.10.3:80 cookie server2 weight 6 check inter 2000 rise 2 fall 3
server web1 192.168.10.4:80 cookie server1 weight 6 check inter 2000 rise 2 fall 3 backup //定义备份节点
listen admin_stats //定义HAProxy监控页面
bind 0.0.0.0:9188
mode http
log 127.0.0.1 local3 err
stats refresh 30s //HAProxy监控页面统计自动刷新时间。
stats uri /haproxy-status //设置监控页面URL路径。 http//IP:9188/haproxy-status可查看
stats realm welcome login\ Haproxy //统计页面密码框提示信息
stats auth admin:123456 //登录统计页面用户和密码
stats hide-version //隐藏HAProxy版本信息
stats admin if TRUE //设置TURE后可在监控页面手工启动关闭后端真实服务器
5)本次只需要如要内容即可
global #全局设置
log /dev/log local0 info #日志输出配置,所有日志都记录在本机,通过local0输出
log /dev/log local0 nofice
#log loghost local0 info
#ulimit-n 82000 #设置每个进程的可用的最大文件描述符
maxconn 4096 #最大连接数
#chroot /usr/local/haproxy #改变当前工作目录
uid 99 #所属运行的用户uid
gid 99 #所属运行的用户组
daemon #以后台形式运行ha-proxy
#nbproc 3 #启动3个ha-proxy实例
pidfile /var/run/haproxy.pid #pid文件位置
#debug #调试模式,输出启动信息到标准输出
#quiet #安静模式,启动时无输出
defaults #默认设置
log global
#log 127.0.0.1 local3 #日志文件的输出定向
mode http #所处理的类别,默认采用http模式,可配置成tcp作4层消息转发
option httplog #日志类别,采用httplog
option httpclose #每次请求完毕后主动关闭http通道,ha-proxy不支持keep-alive,只能模拟这种模式的实现
option dontlognull #保证HAProxy不记录上级负载均衡发送过来的用于检测状态没有数据的心跳包
#option forwardfor #如果后端服务器需要获得客户端真实ip需要配置的参数,可以从Http Header中获得客户端ip
option redispatch #是否允许重新分配在session 失败后
retries 3 #3次连接失败就认为服务器不可用,主要通过后面的check检查
maxconn 2000 #最大连接数
contimeout 5000 #连接超时时间
clitimeout 50000 #客户端连接超时时间
srvtimeout 50000 #服务器端连接超时
listen webcluster 0.0.0.0:80 #运行的端口及主机
option httpchk GET /index.htm #用于健康检测的后端页面
balance roundrobin #负载均衡算法
server web1 192.168.10.2:80 cookie server1 weight 6 check inter 2000 rise 2 fall 3 //定义在线节点
server web2 192.168.10.3:80 cookie server2 weight 6 check inter 2000 rise 2 fall 3
server web1 192.168.10.4:80 cookie server1 weight 6 check inter 2000 rise 2 fall 3 backup //定义备份节点
6)创建自启动脚本
cp ~/haproxy-1.4.24/examples/haproxy.init /etc/init.d/haproxy
ln -s /usr/local/sbin/haproxy /usr/sbin/haproxy
/etc/init.d/haproxy start
7)haproxy的日志(修改rsysproxy配置)为了方便管理,将haproxy相关的配置独立定义到haproxy.conf 并发到/etc/rsyslog.d/下。rsyslog启动时会自动加载此目录的所有配置文件
touch /etc/rsyslog.d/haproxy.conf
vim /etc/rsyslog.d/haproxy.conf
if ($programname == 'haproxy' and $syslogserverity-text == 'info') then -/var/log/haproxy/haproxy-info.log
& ~
if ($programname == 'haproxy' and $syslogserverity-text == 'notice') then -/var/log/haproxy/haproxy-notice.log
& ~ #表示当日志写入到日志文件后,rsyslog停止处理这个信息 ;这里配置的语法是rainerscript脚本语言写得
service rsyslog restart
tail /var/log/haproxy/haproxy-info.log #查看haproxy的请求日志信息
8)测试高性能及高可用
打开一个浏览器(http://iphaproxy/test.html) 内容为 server192.168.10.2
再打开一个浏览器(http://iphaproxy/test.html)内容为 server192.168.10.3
再打开一个浏览器(http://iphaproxy/test.html) 内容为 server192.168.10.4
关闭nginx1会显示nginx2和nginx3的网页。说明当一台几点服务器故障,不会影响群集的使用。