Haproxy简介
Haproxy是一个使用C语言编写得开源软件,提供高可用、负载均衡,以及基于TCP和HTTP得应用程序代理。
特别适用在负载特大得web站点。
WEB集群调度器分类
- 软件:LVS、Haproxy、Nginx
- 硬件:F5以及国内的一些产品,比如梭子鱼、绿盟等。
Haproxy的优点
1、在负载均衡速度和并发处理上由于Nginx
2、支持虚拟主机,可以工作在四层、七层
3、能够补充Nginx的一些缺点,比如session的保持,Cookie的引导等工作
4、支持以URL的方式检测后端的服务器状态
5、Haproxy可以对MySQL进行负载均衡,对后端的DB节点进行检测和负载均衡
6、支持很多种负载均衡算法:Round-robin(轮询)、weight-round-robin(加权轮询)、source hasing(原地址保持)、RI(请求URL)、rdp-cookie(根据cookie)
Haproxy 四层与七层负载的主要区别
四层:通过分析IP层及TCP/UDP层的流量实现的基于“IP+端口”的负载均衡,主要通过报文的目标地址和端口配合负载均衡算法选择后端真实服务器,确定是否需要对报文进行修改并将数据转发至选出的后端真实服务器。
七层:基于应用层信息(比如URL、Cookie等)的负载均衡。主要依据报文的内容配合负载均衡算法选择后端真实服务器,然后再分发请求到真实服务器进行处理,也称“内容交换器”。客户端与负载均衡器、负载均衡器与后端真实服务器之间会分别建立TCP连接。
Haproxy常用的三种调度算法
1、RR(Round-robin):轮询调度
2、LC(Least Connections):最小连接数算法
3、SH(Source Hashing):基于来源访问调度算法,用于一些有Session会话记录在服务器的场景,可以基于来源的IP、Cookie等做集群调度。
Haproxy实验配置
实验环境:
Haproxy调度器:192.168.177.100 安装haproxy
web1:192.168.177.110 安装nginx
web2:192.168.177.114 安装nginx
实验步骤:
①:所有服务器安装ntp进行时钟同步
yum -y install ntp
ntpdate ntp.aliyun.com
②:安装haproxy
//安装依赖包,上传软件包(haproxy-1.5.19.tar.gz)到opt目录下并解压安装
yum install -y pcre-devel bzip2-devel gcc gcc-c++ make
cd /opt
tar zxvf haproxy-1.5.19.tar.gz
cd haproxy-1.5.19/
make TARGET=linux2628 ARCH=x86_64
make install
参数说明
TARGET=linux2628
//uname -r 查看内核,如2.6.18-371.e15.x86_64,此时该参数用TARGET=linux26
//内核版本大于2.6.28的用TARGET=linux2628
ARCH=x86_64 //系统位数,64位系统
③:修改 Haproxy 配置文件
//创建配置文件目录
mkdir /etc/haproxy
//复制配置文件模板到 /etc/haproxy 目录下
cp examples/haproxy.cfg /etc/haproxy/
haproxy.cfg配置文件解析
1 # this config needs haproxy-1.1.28 or haproxy-1.2.1
2
3 global
4 log /dev/log local0 info //local0为日志设备,默认存放到系统日志
5 log /dev/log local0 notice
6 #log loghost local0 info
7 maxconn 4096 //最大连接数,需考虑ulimit -n限制(不能超过65535)
8 #chroot /usr/share/haproxy //注释此行,chroot(改变根目录),为该服务自设置的根目录,一般需将此行注释掉
9 uid 99 //用户UID
10 gid 99 //用户GID
11 daemon //表示是守护进程
12 #debug
13 #quiet
14
15 defaults
16 log global //定义日志为global配置中的日志定义
17 mode http //模式为http
18 option httplog //采用http日志格式记录日志
19 option dontlognull //不记录健康检查日志信息
20 retries 3 //检查节点服务器失败次数,连续达到三次失败,则认为节点不可用
21 redispatch //当服务器负载很高时,自动结束当前队列处理比较久的连接
22 maxconn 2000 //最大连接数
23 contimeout 5000 //连接超时时间
24 clitimeout 50000 //客户但超时时间
25 srvtimeout 50000 //服务端超时时间
26 listen webcluster 0.0.0.0:80 //监听任意地址的80端口
27 option httpchk GET /test.html //检查服务器的test.html文件
28 balance roundrobin //负载均衡调度算法RR轮询方式
29 server inst1 192.168.177.110:80 check inter 2000 fall 3 //定义在线的节点
30 server inst2 192.168.177.114:80 check inter 2000 fall 3
//check inter 2000 表示haproxy服务器和节点之间的一个心跳频率
//fall 3 表示连续三次检测不到心跳频率则认为该节点失效
若节点配置后带有“backup”表示该节点只是个备份节点,只有主节点失效该节点才会上。不携带“backup”,表示为主节点,和其它主节点共同提供服务。
复制段
global
log /dev/log local0 info
log /dev/log local0 notice
#log loghost local0 info
maxconn 4096
#chroot /usr/share/haproxy
uid 99
gid 99
daemon
defaults
log global
mode http
option httplog
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
balance roundrobin
server inst1 192.168.177.110:80 check inter 2000 fall 3
server inst2 192.168.177.114:80 check inter 2000 fall 3
④:启动Haproxy服务
cp /opt/haproxy-1.5.19/examples/haproxy.init /etc/init.d/haproxy
chmod +x /etc/init.d/haproxy
chkconfig --add /etc/init.d/haproxy
ln -s /usr/local/sbin/haproxy /usr/sbin/haproxy
service haproxy start
⑤:web1、web2上配置test.html测试页面
cd /usr/local/nginx/html
vim test.html
<h1>this is test01 page</h1> //192.168.177.110:80
<h1>this is test02 page</h1> //192.168.177.110:80
⑥:客户端访问haproxy调度服务器查看是否可以访问ngixn
小结
1、nginx、LVS和Haproxy的区别
- nginx:
- 支持正则;
- 只支持基于端口的健康检查;
- 不支持session的直接保持,但能通过IP_hash来解决
- 对网络稳定性要求不高
- 方向代理能力强
- LVS:
- 只能基于四层端口转发
- 在四层做分发作用,抗负载能力强
- 应用范围广(几乎可以对所有应用做负载)
- Haproxy:
- 支持八种负载均衡策略
- 仅做负载均衡软件使用,在高并发情况下性能优于NGINX
- 支持URL健康检查,支持session保持