1.LVS在企业应用中抗负载能力很强,但存在不足
2.Haproxy是一款可提供高可用性、负载均衡、及基于TCP和HTTP应用的代理软件
Haproxy 支持多种调度算法,最常用的有三种
RR算法是最简单最常用的一种算法,即轮询调度
例如:
• 有三个节点A、B、C
• 第一个用户访问会被指派到节点A
• 第一个用户访问会被指派到节点B
• 第一个用户访问会被指派到节点C
• 第四个用户访问会被指派到节点A,轮询分配访问请求实现负载均衡效果
最小连接数算法,根据后端的节点连接数大小动态分配前端请求
例如:
• 有三个节点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算法有很大改进,是目前用到比较多的一-种算法
基于来源访问调度算法,用于一些有Session会记录在服务器端的场景,可以基于来源的IP、Cookie等做集群调度
例如:
• 有三个节点A、B、C,第一个用户第一次访问被指派到了A,第二个用户第一次访问被指派到了B
• 当第一个用户第二次访问时会被继续指派到A,第二个用户第二次访问时依旧会被指派到B,只要负载均衡调度器不重启,第一个用户访问都会被指派到A,第二个用户访问都会被指派到B,实现集群的调度
• 此调度算法好处是实现会话保持,但某些IP访问量非常大时会引|起负载不均衡,部分节点访问量超大,影响业务使用
HAProxy是可提供高可用性、负载均衡以及基于TCP和HTTP应用的代理,是免费、快速并且可靠的一种解决方案。HAProxy非常适用于并发大(并发达1w以上)web站点,这些站点通常又需要会话保持或七层处理。HAProxy的运行模式使得它可以很简单安全的整合至当前的架构中,同时可以保护web服务器不被暴露到网络上。
Haproxy的主要特性有:
HAProxy负载均衡策略非常多,常见的有如下8种:
LVS、Nginx、HAproxy的区别:
环境准备
haproxy服务器:20.0.0.20
nginx节点服务器1:20.0.0.10
nginx节点服务器2:20.0.0.11

1. #关闭防火墙,将安装Haproxy所需软件包传到/opt目录下
systemctl stop firewalld
setenforce 0
cd /opt
haproxy-1.5.19.tar.gz
2. #安装依赖软件
yum install -y pcre-devel bzip2-devel gcc gcc-c++ make
3. #解压安装包,并切换至该软件包
tar zxf haproxy-1.5.19.tar.gz
cd haproxy-1.5.19/
4. #编译安装Haproxy
make TARGET=linux2628 ARCH=x86_64
make install
####################参数说明###################
TARGET=linux26 #内核版本,
#使用uname -r查看内核,如:2.6.18-371.el5,此时该参数用TARGET=linux26;kernel大于2.6.28的用TARGET=linux2628
ARCH=x86_64 #系统位数,64位系统
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 #守护进程模式
nbproc 1 #添加,设置并发进程数,建议与当前服务器CPU核数相等或为其2倍
defaults
log global #定义日志为global配置中的日志定义
mode http #模式为http
option httplog #采用http日志格式记录日志
option dontlognull #不记录健康检查日志信息
retries 3 #检查节点服务器失败次数,连续达到三次失败,则认为节点不可用
redispatch #当服务器负载很高时,自动结束当前队列处理比较久的连接
maxconn 2000 #最大连接数
#contimeout 5000 #连接超时时间
#clitimeout 50000 #客户端超时时间
#srvtimeout 50000 #服务器超时时间
timeout http-request 10s #默认http请求超时时间
timeout queue 1m #默认队列超时时间
timeout connect 10s #默认连接超时时间,新版本中替代contimeout,该参数向后兼容
timeout client 1m #默认客户端超时时间,新版本中替代clitimeout,该参数向后兼容
timeout server 1m #默认服务器超时时间,新版本中替代srvtimeout,该参数向后兼容
timeout http-keep-alive 10s #默认持久连接超时时间
timeout check 10s #设置心跳检查超时时间
--删除下面所有listen项--,添加
listen webcluster 0.0.0.0:80 #定义一个名为webcluster的应用
option httpchk GET /test.html #检查服务器的test.html文件
balance roundrobin #负载均衡调度算法使用轮询算法roundrobin
##轮询算法:roundrobin;最小连接数算法:leastconn;来源访问调度算法:source类似于nginx的ip_hash
server inst1 20.0.0.10:80 check inter 2000 fall 3 #定义在线节点
server inst2 20.0.0.11:80 check inter 2000 fall 3
##check inter 2000 表示启用对此后端服务器执行健康检查,设置健康状态检查的时间间隔,单位为毫秒
#fall 3 表示连续三次检测不到心跳频率则认为该节点失效
#若节点配置后带有“backup”表示该节点只是个备份节点,仅在所有在线节点都失效该节点才启用。不携带“backup”,表示为主节点,和其它在线节点共同提供服务。
6. #添加haproxy系统服务
cp /opt/haproxy-1.5.19/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://20.0.0.20/test.html ,不断刷新浏览器测试负载均衡效果
11
#关闭防火墙,将安装Haproxy所需软件包传到/opt目录下


#安装依赖软件

#解压安装包,并切换至该软件包


#编译安装Haproxy


#Haproxy服务器配置


#添加haproxy系统服务


1. #关闭防火墙
systemctl stop firewalld
setenforce 0
2. #安装依赖关系包
yum -y install pcre-devel zlib-devel gcc gcc-c++ make
3. #新建用户和组便于管理
useradd -M -s /sbin/nologin nginx
4. #rpm安装nginx的yum源(nginx官网下载地址)
rpm -Uvh http://nginx.org/packages/centos/7/noarch/RPMS/nginx-release-centos-7-0.el7.ngx.noarch.rpm
############or##############
yum install -y epel-release.noarch #epel为一个网络软件库
5.#安装nginx
yum install -y nginx
systemctl start nginx
########小tips#########
# yum install 包名 -y --downloadonly 下载RPM包而不安装
# yum reinstall -y bash --downloadonly 下载已安装过的rpm包
# yum install 包名 -y --downloadonly --downloaddir=/tmp/ 下载RPM包到指定目录
6. #创建站点目录,先找到html文件所在位置
#rpm -qc nginx
#cat /etc/nginx/conf.d/default.conf
echo "啊要辣油啊!
" > /usr/share/nginx/html/test.html
10. #重新加载单元.启动服务
systemctl daemon-reload
systemctl start nginx
#######or########
systemctl restart nginx
11. #查看是否能成功启动
ss -ntap|grep nginx
http://20.0.0.10/
########or#########
curl 20.0.0.10/test.html
#关闭防火墙
#安装依赖关系包

#新建用户和组便于管理

#rpm安装nginx的yum源(nginx官网下载地址)






1. #关闭防火墙
systemctl stop firewalld
setenforce 0
2. #安装依赖关系包
yum -y install pcre-devel zlib-devel gcc gcc-c++ make
3. #新建用户和组便于管理
useradd -M -s /sbin/nologin nginx
4. #rpm安装nginx的yum源(nginx官网下载地址)
rpm -Uvh http://nginx.org/packages/centos/7/noarch/RPMS/nginx-release-centos-7-0.el7.ngx.noarch.rpm
############or##############
yum install -y epel-release.noarch #epel为一个网络软件库
5.#安装nginx
yum install -y nginx
systemctl start nginx
########小tips#########
# yum install 包名 -y --downloadonly 下载RPM包而不安装
# yum reinstall -y bash --downloadonly 下载已安装过的rpm包
# yum install 包名 -y --downloadonly --downloaddir=/tmp/ 下载RPM包到指定目录
6. #创建站点目录,先找到html文件所在位置
#rpm -qc nginx
#cat /etc/nginx/conf.d/default.conf
echo "再斩个鸭子!
" > /usr/share/nginx/html/test.html
10. #重新加载单元.启动服务
systemctl daemon-reload
systemctl start nginx
#######or########
systemctl restart nginx
11. #查看是否能成功启动
ss -ntap|grep nginx
http://20.0.0.11/
########or#########
curl 20.0.0.11/test.html
#关闭防火墙
#安装依赖关系包

#新建用户和组便于管理

#rpm安装nginx的yum源(nginx官网下载地址)





#创建站点目录,先找到html文件所在位置



默认haproxy的日志是输出到系统的syslog中,查看起来不是非常方便,为了更好的管理haproxy的日志,我们在生产环境中一般单独定义出来。需要将haproxy的info及notice日志分别记录到不同的日志文件中。
需要修改rsyslog配置,为了便于管理。将haproxy相关的配置独立定义到haproxy.conf,并放到/etc/rsyslog.d/下,rsyslog启动时会自动加载此目录下的所有配置文件
vim /etc/haproxy/haproxy.cfg
#更改日志文件
global
log /dev/log local0 info
log /dev/log local0 notice
#重启haproxy服务
service haproxy restart
#为了便于管理将haproxy相关的配置独立定义到haproxy.conf
vim /etc/rsyslog.d/haproxy.conf
if ($programname == 'haproxy' and $syslogseverity-text == 'info')
then -/var/log/haproxy/haproxy-info.log
&~
if ($programname == 'haproxy' and $syslogseverity-text == 'notice')
then -/var/log/haproxy/haproxy-notice.log
&~
#将haproxy的info日志记录到/var/log/haproxy/haproxy-info.log下,将notice日志记录到/var/log/haproxy/haproxy-notice.log下
#“&~”表示当日志写入到日志文件后,rsyslog停止处理这个信息。
#重启服务
systemctl restart rsyslog.service




使用网页访问20.0.0.20,则会产生对应的日志文件

停止掉某个节点服务器,然后再刷新页面,再开启节点服务器,则会产生haproxy-notice.log
查看


使用tail -f /var/log/haproxy/haproxy-info.log命令可以追踪请求日志信息