一 Haproxy简介
- 目前常见的Web集群调度器分为软件和硬件
- 软件:通常使用开源的LVS、Haproxy、Nginx
- 硬件:一般使用比较多的是F5,也有很多人使用国内的一些产品,如梭子鱼、绿盟(裸金属)等
二 aproxy高可用反向代理服务器
Haproxy调度算法
- Haproxy群集配置
- Haproxy日志管理
- Haproxy参数优化
三 常见的Web集群调度器
目前常见的Web集群调度器分为软件和硬件,软件通常使用开源的LVS、Haproxy、Nginx,硬件一般使用比较多的是F5,也有很多人使用国内的一些产品,如梭子鱼、绿盟等
3.1功能
一.代理服务器 squid
squid主要提供缓存加速、应用层过滤的功能
3.2代理的工作机制
代替客户机向网站请求数据,从而可以隐藏用户的真实IP地址
将获得的网页数据(静态web元素)保存到缓存中并发给客户机,以便下次请求相同的数据快速响应
3.2 squid代理类型
- 如果squid反向代理服务器中缓存了该请求的资源,则将该请求的资源直接返回给客户端,否则反向代理服务器将向后台的web服务器请求资源,然后将请求的应答返回给客户端,同时也将该应答缓存在本地,供下一个请求者使用。
- 传统代理
适用于Internet,需要在客户机指定代理服务器的地址和端口 - 透明代理
客户机不需要指定代理服务器的地址和端口,而是通过默认路由、防火墙策略将web访问重定向给代理服务器处理 - 反向代理
如果squid反向代理服务器中缓存了该请求的资源,则将该请求的资源直接返回给客户端,否则反向代理服务器将向后台的web服务器请求资源,然后将请求的应答返回给客户端,同时也将该应答缓存在本地,供下一个请求者使用地,供下一个请求者使用- ① 定义后端真实服务器地址池
- ② 配置反向代理(部分服务)
- ③ 设置所需要的分流算法(轮询策略)
- ④ 是否对流量进行访问控制
squid把一部分的业务流量缓存在本地,在下一次重复请求来的时候直接根据提供数据,不需要再次向真实服务器建立请求连接。
3.3Haproxy的优点
3.3.1 LVS在企业应用中抗负载能力很强,但有以下缺点
- LVS不支持正则处理
- 不能实现动静分离
- 不支持7层
- 对于大型网站,LVS的实施配置复杂,维护成本相对较高
3.3.2 Haproxy优点
- Haproxy在负载均衡速度和并发处理上是优于Nginx
- Haproxy支持虚拟主机,可以工作在4、7层
- 能够补充Nginx (ip_ hash) 的一些缺点,比如session的保持、Cookie的引导等工作
- 支持以ur1的方式检测后端的服务器的状态
- Haproxy可以对Mysql进行负载均衡,对后端的DB节点进行检测和负载均衡
- 支持很多负载均衡算法(丰富),Round-robin (轮询)、weighl-round- robin(加权轮询)、source hashing (原地址保持)、 RI (请求URL)、 rdp-cookie (根 据cookie)
3.4 Haproxy的应用
- Haproxy是一款可提供高可用性、 负载均衡、及基于TCP和HTTP应用的代理的软件
- 适用于负载大的Web站点
- 运行在硬件上可支持数以万计的并发连接的连接请求
3.5 Haproxy调度算法原理
- Haproxy支持多种调度算法,最常用的有三种
3.5.1 RR(Round Robin)
RR算法是最简单最常用的一种算法,即轮询调度
理解举例:
◆有三个节点A、B、C
◆第一个用户访问会被指派到节点A
◆第二个用户访问会被指派到节点B
◆第三个用户访问会被指派到节点C
◆第四个用户访问继续指派到节点A,轮询分配访问请求实现负载均衡效果
3.5.2 LC (Least Connections)
最小连接数算法,根据后端的节点连接数大小动态分配前端请求
理解举例:
◆ 有三个节点A、B、C,各节点的连接数分别为A:4、B:5、C:6
◆ 第一个用户连接请求,会被指派到A上,连接数变为A:5、B:5、C:6
◆ 第二个用户请求会继续分配到A上,连接数变为A:6、B:5、C:6;再有新的请求会分配给B,每次将新的请求指派给连接数最小的客户端
◆ 由于实际情况下A、B、C的连接数会动态释放,很难会出现一样连接数的情况
◆ 此算法相比较rr算法有很大改进,是目前用到比较多的一种算法
3.5.3 SH (Source Hashing)
基于来源访问调度算法,用于一些有Session会话记录在服务器端的场景,可以基于来源的IP、Cookie等做集群调度
理解举例:
- ◆ 有三个节点A、B、C,第一个用户第一次访问被指派到了A,第二个用户第一次访问被指派到了B
- ◆ 当第一个用户第二次访问时会被继续指派到A,第二个用户第二次访问时依旧会被指派到B,只要负载均衡调度器不重启,第一个用户访问都会被指派到A,第二个用户访问都会被指派到B,实现集群的调度
- ◆ 此调度算法好处是实现会话保持,但某些IP访问量非常大时会引起负载不均衡部分节点访问量超大,影响业务使用
四 安装squid服务
实验环境:
虚拟机 | IP |
---|---|
Haproxy服务器 | Haproxy:192.168.10.130 |
nginx1服务器 | nginx01:192.168.10.142 |
nginx2服务器 | nginx02:192.168.10.146 |
4.1主机改名
hostnamectl set-hostname haproxy
su
hostnamectl set-hostname nginx1
su
hostnamectl set-hostname nginx2
su
4.2 安装和布置haproxy
将包haproxy-1.5.19.tar.gz 上传到/opt/下
[root@haproxy]cd /opt
[root@haproxy opt]#tar zxvf haproxy-1.5.19.tar.gz
[root@haproxy opt]# yum install -y pcre-devel bzip2-devel gcc gcc-c++ make
[root@haproxy opt]# cd haproxy-1.5.19/
[root@haproxy haproxy-1.5.19]# make TARGET=linux2628 ARCH=x86_64 #指定内核版本
[root@haproxy haproxy-1.5.19]# make install
参数说明:
- TARGET=linux2628 ##内核版本
- 使用uname -r 查看内核,如2.6.18-371.e15,此时该参数用
TARGET=linux26
;kernel大于2.6.28的用TARGET=linux2628
- 使用uname -r 查看内核,如2.6.18-371.e15,此时该参数用
- ARCH=x86_64 ##系统位数,64位系统
4.3 Haproxy服务器配置【配置文件解析】
[root@haproxy haproxy-1.5.19]# mkdir /etc/haproxy #在当前目录常见存放配置文件的目录
[root@haproxy haproxy-1.5.19]# cp examples/haproxy.cfg /etc/haproxy/
[root@haproxy haproxy-1.5.19]# cd /etc/haproxy/
[root@haproxy haproxy]# vim haproxy.cfg
global
log /dev/log local0 info #修改local0为日志设备,默认存放到系统日志
log /dev/log local0 notice
#log loghost local0 info
maxconn 4096 #最大连接数,可以用ulimit -n限制
chroot /usr/share/haproxy #将这行注释
uid 99 #用户UID
gid 99 #用户GID
daemon #守护进程模式
#debug
#quiet
defaults
log global #定义日志为global配置中的日志定义
mode http #模式是http
option httplog #采用http日志格式记录日志
option dontlognull #不记录健康检查日志信息
retries 3 #检查节点服务器失败次数,连续达到三次失败,则认为节点不可用
redispatch #当服务器负载很高时,自动结束当前队列处理比较久的连接
maxconn 2000 #最大连接数
contimeout 5000 #连接超时时间
clitimeout 50000 #客户端超时时间
srvtimeout 50000 #服务器超时时间
#删除多余部分
listen webcluster 0.0.0.0:80
option httpchk GET /test.html #检查服务器的test.html文件
balance roundrobin #负载均衡调度算法使用轮询算法
server inst1 192.168.10.142:80 check inter 2000 fall 3 #定义在线节点
server inst2 192.168.10.146:80 check inter 2000 fall 3
#check inter 2000 检测时间2000
#fall 3 表示连续三次检测不到心跳频率则认为该节点失效
参数详解:
balance roundrobin
#负载均衡调度算法- 轮询算法:
roundrobin
- 最小连接数算法:
leastconn
- 来源访问调度算法:
source hashing
,类似于nginx的ip_hash
- 轮询算法:
- check inter 2000 #表示haproxy服务器和节点之间的一个心跳频率
- fall 3 #表示连续三次检测不到心跳频率则认为该节点失效
- 若节点配置后带有“backup”表示该节点只是个备份节点,只有主节点失效该节点才会上。不携带“backup”,表示为主节点,和其它主节点共同提供服务
- 2 配置nginx端(确保已安装)
4.4 2台web服务器安装httpd服务
netstat -antp | grep 80
4.5启动管理Haproxy
[root@haproxy examples]# cd /opt/haproxy-1.5.19/
[root@haproxy haproxy-1.5.19]# cd /opt/haproxy-1.5.19/examples/
[root@haproxy examples]# cp haproxy.init /etc/init.d/haproxy
[root@haproxy examples]# cd /etc/init.d/
[root@haproxy init.d]# ls
functions haproxy netconsole network README
[root@haproxy init.d]# chmod +x haproxy
[root@haproxy init.d]# chkconfig --add /etc/init.d/haproxy
[root@haproxy init.d]# ln -s /usr/local/sbin/haproxy /usr/sbin/haproxy
[root@haproxy init.d]# service haproxy start
Starting haproxy (via systemctl): [ 确定 ]
4.6.编辑测试网页
192.168.10.142:
echo "this is ddd web" > /usr/local/nginx/html/test.html
192.168.10.146:
echo "this is www web" > /usr/local/nginx/html/test.html
五 Haproxy 日志管理
修改Haproxy配置文件中关于日志配置的选项,加入配置
log /dev/1oq loac10 info
log /dev/ log 1oca10 notice
修改rsyslog配置,将haproxy
相关配置独立定义到haproxy.conf
, 并放到/etc/rsyslog.d/下
保存配置文件并重启rsyslog服务,完成rsyslog配置
六 Haproxy参数优化
随着企业网站负载增加,haproxy参数优化相当重要,具体的优化项如下:
1. maxconn: 最大连接数,根据应用实际情况进行调整,推荐使用10 240
2. daemon: 守护进程模式;Haproxy可以使用非守护进程模式启动,建议使用守护进程模式启动
3. nbproc:负载均衡的并发进程数,建议与当前服务器CPU核数相等或为其2倍
4. retries: 重试次数,主要用于对集群节点的检查,如果节点多,且并发量大,设置为2次或3次
5. option http-server-close: 主动关闭http请求选项, 建议在生产环境中使用此选项
6. timeouthttp-keep-alive:长连接超时时间,设置长连接超时时间,可以设置为10s
7. Limeoul http-requesL: hLLp请求超时时问,建议将此时问设置为5-~10s, 增加http连接释放速度
6. timcout. clicnt: 客户端超时时间,如果访问量过大,节点响应慢,可以将此时间设置短一 些,建议设置为1min左右就可以了
七 小结
常见的web集群调度器分为软件和硬件
LVs性能最好,但是搭建相对复杂;Nginx的upstream模块支持群集功能,但是对群集节点健康检查功能不强,高并发性能没有Haproxy好
- Haproxy是一款可提供高可用性、 负载均衡、及基于TCP和HTTP应用的代理的软件
- 最常用的调度算法有三种:
① RR:轮询调度;
② LC:最小连接数算法
③ SH:基于来源访问调度算法