目录
一、Haproxy集群概述
1、Haproxy集群的概述
Haproxy 是一个使用C语言编写的自由及开放源代码软件,其提供高可用性、负载均衡,以及基于TCP和HTTP的应用程序代理。
2、Haproxy特点
(1)单进程、事件驱动模型显著降低了上下文切换的开销及内存占用。
事件检查器(event checker)允许其在高并发连接中对任何连接的任何事件实现即时探测。
(2)在任何可用的情况下,单缓冲(single buffering)机制能以不复制任何数据的方式完成读写操作,这会节约大量的CPU时钟周期及内存带宽。
(3)借助于Linux 2.6 (>= 2.6.27.19)上的splice()系统调用,HAProxy可以实现零复制转发(Zero-copy forwarding),在Linux 3.5及以上的OS中还可以实现零复制启动(zero-starting)。
(4)内存分配器在固定大小的内存池中可实现即时内存分配,这能够显著减少创建一个会话的时长。
(5)树型存储:侧重于使用作者多年前开发的弹性二叉树,实现了低开销来保持计时器命令、保持运行队列命令及管理轮询及最少连接队列。
(6)优化的HTTP首部分析:优化的首部分析功能避免了在HTTP首部分析过程中重读任何内存区域。
(7)精心地降低了昂贵的系统调用,大部分工作都在用户空间完成,如时间读取、缓冲聚合及文件描述符的启用和禁用等。
所有的这些细微之处的优化实现了在中等规模负载之上依然有着相当低的CPU负载,甚至于在非常高的负载场景中,5%的用户空间占用率和95%的系统空间占用率也是非常普遍的现象,这意味着HAProxy进程消耗比系统空间消耗低20倍以上。因此,对OS进行性能调优是非常重要的。即使用户空间的占用率提高一倍,其CPU占用率也仅为10%,这也解释了为何7层处理对性能影响有限这一现象。由此,在高端系统上HAProxy的7层性能可轻易超过硬件负载均衡设备。
在生产环境中,在7层处理上使用HAProxy作为昂贵的高端硬件负载均衡设备故障故障时的紧急解决方案也时长可见。硬件负载均衡设备在“报文”级别处理请求,这在支持跨报文请求(request across multiple packets)有着较高的难度,并且它们不缓冲任何数据,因此有着较长的响应时间。对应地,软件负载均衡设备使用TCP缓冲,可建立极长的请求,且有着较大的响应时间。
HAProxy目前主要有三个版本:1.3,1.4,1.5,CentOS6.6自带的RPM包为1.5的。
3、常见负载均衡策略
1)、roundrobin
简单的轮询
(2)static-rr
权重轮询
(3)leastconn
最少连接者优先
(4)source
根据请求源IP,这个跟Nginx的ip_hash机制类似
(5)ri
根据请求的URI
(6)rl_param
表示根据请求的URI参数‘balance url_param’requires an URL parameter name;
7)hdr(name)
根据HTTP请求头来锁定每一次HTTP请求
8)rdp-cookie(name)
根据cookie来锁定并哈希每一次TCP请求
二、搭建Haproxy群集
1、环境配置
web1的配置:192.168.222.20
web2的配置:192.168.222.100
Haproxy服务器:192.168.222.10
nfs共享服务器:192.168.222.30
搭建nfs共享服务器
1、安装nfs服务
yum -y install nfs-utils rpcbind
2、开启服务
systemctl start rpcbind.service
systemctl start nfs.service
3、创建共享目录
mkdir /opt/abc
mkdir /opt/def
4、给共享目录设置权限
chmod 777 /opt/abc
chmod 777 /opt/def
5、编写共享策略
vim /etc/exports
/usr/share *(ro,sync)
/opt/abc 192.168.222.0/24(rw,sync)
/opt/def 192.168.222.0/24(rw,sync)
6、发布共享
exportfs -rv
2、 web1配置
1、安装httpd服务
yum install -y httpd
2、挂载共享目录
mount 192.168.222.30:/opt/abc /var/www/html
3、修改网卡的网关
vim /etc/sysconfig/network-scripts/ifcfg-ens33
GATEWAY=192.168.222.10
#DNS1=114.114.114.114
systemctl restart network
3、web2配置
1、安装httpd服务
yum install -y httpd
2、开启httpd
systemctl start httpd
3、挂载nfs共享目录
mount 192.168.222.30:/opt/def /var/www/html
4、修改网卡配置
GATEWAY=192.168.222.10
#DNS1=8.8.8.8
5、重启网卡
systemctl restart network
4、Haproxy服务器配置
1、安装依赖软件
yum install -y pcre-devel bzip2-devel gcc gcc-c++ make
2、在/opt目录下准备好安装包
cd /opt
tar zxvf haproxy-1.5.19.tar.gz
3、编译安装
make TARGET=linux2628 ARCH=x86_64
make install
5. #Haproxy服务器配置
mkdir /etc/haproxy
cp examples/haproxy.cfg /etc/haproxy/
cd /etc/haproxy/
vim haproxy.cfg
global
--4~5行--修改,配置日志记录,local0为日志设备,默认存放到系统日志
log /dev/log local0 info
log /dev/log local0 notice
#log loghost local0 info
maxconn 4096 #最大连接数,需考虑ulimit -n限制
--8行--注释,chroot运行路径,为该服务自设置的根目录,一般需将此行注释掉
#chroot /usr/share/haproxy
uid 99 #用户UID
gid 99 #用户GID
daemon #守护进程模式
defaults
log global #定义日志为global配置中的日志定义
mode http #模式为http
option httplog #采用http日志格式记录日志
option dontlognull #不记录健康检查日志信息
retries 3 #检查节点服务器失败次数,连续达到三次失败,则认为节点不可用
redispatch #当服务器负载很高时,自动结束当前队列处理比较久的连接
maxconn 2000 #最大连接数
contimeout 5000 #连接超时时间
clitimeout 50000 #客户端超时时间
srvtimeout 50000 #服务器超时时间
--删除下面所有listen项--,添加
listen webcluster 0.0.0.0:80 #定义一个名为webcluster的应用
option httpchk GET /index.html #检查服务器的index.html文件
balance roundrobin #负载均衡调度算法使用轮询算法roundrobin
server inst1 192.168.222.20:80 check inter 2000 fall 3 #定义在线节点
server inst2 192.168.222.100:80 check inter 2000 fall 3
6. #添加haproxy系统服务
cp /opt/haproxy-1.5.18/examples/haproxy.init /etc/init.d/haproxy
cd /etc/init.d/
chmod +x haproxy
chkconfig --add /etc/init.d/haproxy
ln -s /usr/local/sbin/haproxy /usr/sbin/haproxy
service haproxy start
7. #在客户端测试
在客户端使用浏览器打开 http://192.168.59.103 ,不断刷新浏览器测试负载均衡效果
—
5、日志重定义
1. #修改配置文件
vim /etc/haproxy/haproxy.cfg
global
log 192.168.222.100 local6 info
log /dev/log local0 notice
2. #修改rsyslog配置
vim /etc/rsyslog.conf
14 # Provides UDP syslog reception
15 $ModLoad imudp #注释掉
16 $UDPServerRun 514 #注释掉
...
74 local6.* /var/log/haproxy.log
3. # 重启服务
systemctl restart rsyslog.service
service haproxy restart
4. #查看haproxy的访问请求日志信息
访问网页后查看日志
tail -f /var/log/haproxy.log