一、概述
1、LvS在企业应用中抗负载能力很强,但存在不足。
①LVS不支持正则处理,不能实现动静分离。
②对于大型网站,[LVS的实施配置复杂,维护成本相对较高。
2、Haproxy是一款可提供高可用性、负载均衡及基于TCP和HTTF应用的代理的软件。
①适用于负载大的Web站点。
②运行在硬件上可支持数以万计的并发连接的连接请求。
一、主要优点
1、Haproxy在负载均衡速度和并发处理上是优于Nginx。
2、Haproxy支持虚拟主机,可以工作在4、7层。
3、能够补充Nginx ( ip hash)的一些缺点,比如session的保持、Cookie的引导等工作。
4、支持以url的方式检测后端的服务器的状态。
5、Haproxy可以对Mysql进行负载均衡,对后端的DB节点进行检测和负载均衡。
6、支持很多负载均衡算法:Round-robin (轮询)、weight-round-robin(加权轮询)、source hashing (原地址保持)、RI(请求URI)、rdp-cookie (根据cookie)。
二、主要使用的算法
1、RR (Round Robin):RR算法是最简里常用的一种算法,即轮询调度。
2、LC(Least Connections):最小连接数算法,根据后端的节点连接数大小动态分配前端请求。
3、SH (SourceHashing):基于来源访问调度算法,用于一些有session会话记录在服务器端的场景,可以基于来源的IP、Cookie等做集群调度。
二、实例
实验环境:
Haproxy:192.168.238.150
web1:192.168.238.100
web2:192.168.238.99
client:192.168.238.60
Haproxy服务器
[root@localhost ~]# hostnamectl set-hostname haproxy
[root@localhost ~]# su
[root@haproxy ~]# ntpdate ntp.aliyun.com
[root@haproxy ~]# cd /opt
#rz上传软件包haproxy-1.5.19.tar.gz
[root@haproxy opt]# yum install -y pcre-devel bzip2-devel gcc gcc-c++ make #安装依赖环境
[root@haproxy opt]# tar zxvf haproxy-1.5.19.tar.gz
#修改内核版本
[root@haproxy haproxy-1.5.19]# uname -a #查看内核版本
Linux haproxy 3.10.0-957.el7.x86_64 #1 SMP Thu Nov 8 23:39:32 UTC 2018 x86_64 x86_64 x86_64 GNU/Linux
[root@haproxy haproxy-1.5.19]# make TARGET=linux2628 ARCH=x86_64 #kernel大于2.6.28的用TARGET=linux2628
[root@haproxy haproxy-1.5.19]# make install
[root@haproxy haproxy-1.5.19]# mkdir /etc/haproxy #创建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]# ls
haproxy.cfg
[root@haproxy haproxy]# vim 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 local1 notice
6 #log loghost local0 info
7 maxconn 4096
8 #chroot /usr/share/haproxy #服务自设置的根目录,注释掉
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
27 listen webcluster 0.0.0.0:80
28 option httpchk GET /aa.html #检查服务器的aa.html文件
29 balance roundrobin #负载均衡调度算法使用轮询算法roundrobin
30 server inst1 192.168.238.100:80 check inter 2000 fall 3 #定义在线节点
###check inter 2000 #表示haproxy服务器和节点之间的一个心跳频率
###fall 3 #表示连续三次检测不到心跳频率则认为该节点失效
31 server inst2 192.168.238.99:80 check inter 2000 fall 3
#31行以下全部删除
[root@haproxy haproxy]# cp /opt/haproxy-1.5.19/examples/haproxy.init /etc/init.d/haproxy #将启动文件放入service的管理目录
[root@haproxy haproxy]# cd /etc/init.d/
[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]# systemctl start haproxy #启动服务
[root@haproxy init.d]# netstat -antp | grep haproxy #查看端口
tcp 0 0 0.0.0.0:80 0.0.0.0:* LISTEN 79480/haproxy
web服务器
#两台web服务器配置一致
[root@localhost ~]# hostnamectl set-hostname web1
[root@localhost ~]# su
[root@web1 ~]# ntpdate ntp.aliyun.com
31 Jul 14:34:52 ntpdate[17989]: step time server 203.107.6.88 offset -1.405824 sec
[root@web1 ~]# cd /opt
[root@web1 opt]# yum install -y pcre-devel zlib-devel gcc gcc-c++ make #安装Nginx的依赖环境
[root@web1 opt]# useradd -M -s /sbin/nologin nginx #创建服务用户
#rz上传nginx-1.12.2.tar.gz富案件包
[root@web1 opt]# tar zxvf nginx-1.12.2.tar.gz -C /opt/ #解压包
[root@web1 nginx-1.12.2]# ./configure --prefix=/usr/local/nginx --user=nginx --group=nginx
[root@web1 nginx-1.12.2]# make && make install
[root@web1 nginx-1.12.2]# ln -s /usr/local/nginx/sbin/nginx /usr/local/sbin/
[root@web1 nginx-1.12.2]# nginx #启动Nginx
[root@web1 nginx-1.12.2]# netstat -antp |grep 80 #查看端口,查看服务是否启动
tcp 0 0 0.0.0.0:80 0.0.0.0:* LISTEN 20668/nginx: master
[root@web1 nginx-1.12.2]# echo "this is web1" > /usr/local/nginx/html/aa.html
[root@web2 nginx-1.12.2]# echo "this is web2" > /usr/local/nginx/html/aa.html
client访问haproxy服务器IP地址
刷新
小结:
nginx和LVs、Haproxy的|区别
1、nginx
①支持正则
②只支持基于端口的健康检查
③不支持session的直接保持,但能通过IP_hash来解决
④对网络稳定性要求不高
⑤反向代理能力强
⑥nginx社区活跃
2、LVS
①只能基于四层端口转发
②在四层做分发作用,抗负载能力强
③负载应用范围广
3、Haproxy
①支持8种负载均衡策略
②仅做负载均衡软件使用,在高并发情况下性能优于nginx
③支持URL健康检测、支持session保持