Haproxy搭建web集群

一、Haproxy调度算法

1.1 常见的Web集群调度器

目前常见的Web集群调度器分为软件和硬件

软件通常使用开源的LVS、Haproxy、Nginx

硬件一般使用比较多的是F5,也有很多人使用国内的一些产品,如梭子鱼、绿盟等

1.2 Haproxy应用分析

LVS在企业应用中抗负载能力很强,但存在不足

LVS不支持正则处理,不能实现动静分离

对于大型网站,LVS的实施配置复杂,维护成本相对较高

Haproxy是一款可提供高可用性、负载均衡、及基于TCP和HTTP应用的代理的软件

适用于负载大的Web站点

运行在硬件上可支持数以万计的并发连接的连接请求

1.3 Haproxy调度算法原理

Haproxy支持多种调度算法,最常用的有三种

(1) RR(Round Robin)

RR算法是最简单最常用的一种算法,即轮询调度

理解举例

有三个节点A、B、C

第一个用户访问会被指派到节点A

第二个用户访问会被指派到节点B

第三个用户访问会被指派到节点C

第四个用户访问继续指派到节点A,轮询分配访问请求实现负载均衡效果

(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) SH(Source Hashing)

基于来源访问调度算法,用于一些有Session会话记录在服务器端的场景,可以基于来源的IP、Cookie等做集群调度

理解举例

有三个节点A、B、C,第一个用户第一次访问被指派到了A ,第二个用户第一次访问被指派到了B

当第一个用户第二次访问时会被继续指派到A,第二个用户第二次访问时依旧会被指派到B,只要负载均衡调度器不重启,第一个用户访问都会被指派到A,第二个用户访问都会被指派到B,实现集群的调度

此调度算法好处是实现会话保持,但某些IP访问量非常大时会引起负载不均衡,部分节点访问量超大,影响业务使用

二、Haproxy配置文件详解

defaults配置项配置默认参数,一般会被应用组件继承

如果应用组件中没有特别声明,将按默认配置参数设置

log global:定义日志为global配置中的日志定义

mode http:模式为http

option httplog:采用http日志格式记录日志

retries 3:检查节点服务器失败连续达到三次则认为节点不可用

maxconn 2000:最大连接数

contimeout 5000:连接超时时间

clitimeout 50000:客户端超时时间

srvtimeout 50000:服务器超时时间

listen配置项目一般为配置应用模块参数

listen appli4-backup 0.0.0.0:10004:定义一个appli4-backup的应用

option httpchk /index.html:检查服务器的index.html文件

option persist :强制将请求发送到已经down掉的服务器

balance roundrobin:负载均衡调度算法使用轮询算法

server inst1 192.168.75.144 check inter 2000 fall 3:定义在线节点

server inst2 192.168.114.75.166 check inter 2000 fall 3 backup:定义备份节点
 

三、Haproxy日志管理

默认是输出到系统的syslog中,生产环境中一般单独定义

定义的方法步骤

修改Haproxy配置文件中关于日志配置的选项,加入配置

log /dev/log local0 info

log /dev/log local0 notice

修改rsyslog配置,将Haproxy相关的配置独立定义到haproxy.conf,并放到/etc/rsyslog.d/下

保存配置文件并重启rsyslog服务,完成rsyslog配置

四、Haproxy参数优化

option http-server-close:主动关闭http请求选项,建议在生产环境中使用此选项

timeout http-keep-alive:长连接超时时间,设置长连接超时时间,可以设置为10s

timeout http-request:http请求超时时间,建议将此时间设置为5~10s,增加http连接释放速度

timeout client:客户端超时时间,如果访问量过大,节点响应慢,可以将此时间设置短一些,建议设置为1min左右就可以了
 

五、LVS、Nginx、HAproxy的区别

Lvs基于Linux操作系统内核实现软负载均衡,而HAProxy和Nginx是基于第三方应用实现的软负载均衡;背一家物。

LVS是可实现4层的IP负载均衡技术,无法实现基于录、URL的转发。而HAProxy和Nginx都可以实现4层和7层技术,HAProxy可提供TCp和HTTp应用的负载均衡综合解决方案;

LVS因为工作在Iso模型的第四层,其状态监测功能单一,而HAProxy在状态监测方面功能更丰富、强大,可支持端口、URL、脚本等多种状态检测方

HAProxy功能强大,单纯从效率上来讲AProxy会比Nginx有更出色的负载均衡速度,在并发处理上也是优于Nginx的。但整体性能低于4层模式的LVS负载均衡;

Nginx主要用于Web服务器或缓存服务器。Nginx的upstream模块虽然也支持群集功能,但是对群集节点健康检查功能不强,性能没有Haproxy好

六、实验环节

环境:
Haproxy服务器:192.168.217.120
Nginx 服务器1:192.168.217.100
Nginx 服务器2:192.168.217.110
客户端:192.168.217.200

#关闭防火墙

systemctl stop firewalld

setenforce 0

#yum安装 nginx
vim /etc/yum.repos.d/nginx.repo

[nginx-stable]
name=nginx stable repo
baseurl=http://nginx.org/packages/centos/7/$basearch/

gpgcheck=0
enabled=1
 
yum install nginx -y 
 
systemctl start nginx
systemctl enable nginx
 

[root@localhost ~]# cd /usr/share/nginx/html/
[root@localhost html]# ls
50x.html  index.html
[root@localhost html]# echo "<h1>nginx test1</h1>" >index.html

网页测试

192.168.217.100

 

Nginx 服务器2:192.168.217.110

#关闭防火墙

systemctl stop firewalld

setenforce 0

#yum安装 nginx
vim /etc/yum.repos.d/nginx.repo

[nginx-stable]
name=nginx stable repo
baseurl=http://nginx.org/packages/centos/7/$basearch/

gpgcheck=0
enabled=1
 
yum install nginx -y 
 
systemctl start nginx
systemctl enable nginx

[root@localhost ~]# cd /usr/share/nginx/html/
[root@localhost html]# ls
50x.html  index.html
[root@localhost html]# echo "<h1>nginx test2</h1>" >index.html

网页测试

192.168.217.110

 

部署Haproxy服务器

关闭防火墙,将安装Haproxy所需软件包传到/opt目录下
systemctl stop firewalld

setenforce 0

cd /opt

安装依赖包

yum install -y pcre-devel bzip2-devel gcc gcc-c++ make

将安装包解压并切换目录

tar zxf haproxy-1.5.19.tar.gz

cd haproxy-1.5.19/

编译安装Haproxy

make TARGET=linux2628 ARCH=x86_64

make install

Haproxy服务器配置

mkdir /etc/haproxy

cp examples/haproxy.cfg /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.59.97:80 check inter 2000 fall 3        #定义在线节点
        server inst2 192.168.59.99:80 check inter 2000 fall 3
        
        
        
##########################参数说明########################
balance roundrobin #负载均衡调度算法
#轮询算法:roundrobin;最小连接数算法:leastconn;来源访问调度算法:source,类似于nginx的ip_hash
 
check inter 2000 #表示haproxy服务器和节点之间的一个心跳频率
fall3 #表示连续三次检测不到心跳频率则认为该节点失效
若节点配置后带有“backup”表示该节点只是个备份节点,只有主节点失效该节点才会上。不携带“backup”,表示为主节点,和其它主节点共同提供服务。

添加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

客户机测试

 

 日志定义优化

#修改日志输出路径 #默认haproxy的日志输出到系统syslog中,查看起来不方便,为了更好管理haproxy的日志,我们在生产环境中一般单独定义出来需要将haproxy的info及notice日志分别记录到不同的日志文件中。

vim haproxy.cfg global

--4~5行--修改,配置日志记录,local0为日志设备,默认存放到系统日志

log /dev/log   local0 info      

log /dev/log   local0 notice

wq保存

service haproxy restart


修改rsyslog配置

需要修改rsyslog配置,为了便于管理,将haproxy相关的配置单独定义到haproxy.conf,并放到/etc/rsyslog.d/下,rsyslog启动时会自动加载此目录下的所有配置文件

cd /etc/rsyslog.d/

vim 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-info.log下,将notice日志记录到/var/log/haproxy/haproxy-notice.log下。"&~"表示当日志写入到日志文件后,rsyslog停止处理这个信息。

systemctl restart rsyslog.service

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值