Haproxy搭建Web群集

目录

一. Haproxy简介

1. Haproxy应用分析

3. 常见负载均衡策略

3.1 RR(Round Robin)

3.2 LC(Least Connections)

3.3 SH(Source Hashing)

3.4 uri

3.5 url_param

3.6 rdp—cookie(name)

3.7 source

3.8 static-rr

4. LVS、Haproxy、Nginx区别

5. Haproxy的优点

6. 常见的Web集群调度器

二. Haproxy集群的部署

1. 部署nginx服务器

1.1 关闭防火墙

1.2 安装依赖关系包

1.3 新建用户和组方便管理

1.4 切换opt目录,下载压缩包并解

1.5 切换至解压后的目录下编译

1.6 安装

1.7 做软链接,让系统识别nginx操作命令

1.8 将nginx命令加入服务

1.9 创建站点目录

1.10 重新加载单元,启动服务

2. 部署haproxy服务器(192.168.119.70)

2.1 关闭防火墙

2.2 安装依赖软件

2.3 将haproxy软件包下载到opt目录下

2.4 解压安装包

2.5 编译安装haproxy

2.6 haproxy服务器配置

2.7 添加haproxy系统服务

2.8 客户端浏览器测试


一. Haproxy简介

Haproxy 是一个使用C语言编写的自由及开放源代码软件,其提供高可用性、负载均衡,以及基于TCP和HTTP的应用程序代理

1. Haproxy应用分析

  • LVS在企业应用中抗负载能力很强,但存在不足
  • LVS不支持正则处理,不能实现动静分离
  • 对于大型网站,LVS的实施配置复杂,维护成本相对较高
  • Haproxy是一款可提供高可用性、负载均衡、及基于TCP和HTTP应用的代理软件
  • 适用于负载大的web站点
  • 运行在硬件上可支持数以万计的并发连接的连接请求

2. Haproxy的特性

  • 可靠性和稳定性非常好,可以与硬件级的F5负载均衡设备相媲美
  • 最高可以同时维护40000-50000个并发连接,单位时间内处理的最大请求数为20000个,最大处理能力可达10Git/s
  • 支持多达8 种负载均衡算法,同时也支持会话保持
  • 支持虚拟主机功能,从而实现web负载均衡更加灵活
  • 支持连接拒绝、全透明代理等独特功能
  • 拥有强大的ACL支持,用于访问控制
  • 其独特的弹性二叉树数据结构,使数据结构的复杂性上升到了0(1),即数据的查询速度不会随着数据条目的增加而速度有所下降
  • 支持客户端的keepalive功能,减少客户端与haproxy的多次三次握手导致资源量费,让多个请求在一个tcp连接中完成
  • 支持TCP加速,零复制功能,类似于mmap机制
  • 支持响应池(response buffering)
  • 支持RDP协议
  • 基于源的粘性,类似于nginx的ip_hash功能,把来自同一客户端的请求在一定时间内始终调度到上游的同一服务器
  • 更好统计数据接口,其web接口显示后端冀全中各个服务器的接受、发送、拒绝、错误等数据的统计信息
  • 详细的健康状态检测,web接口中有关对上流服务器的健康检测状态,并提供了一定的管理功能
  • 基于流量的健康评估机制
  • 基于http认证
  • 基于命令行的管理接口
  • 日志分析器,可对日志进行分析

3. 常见负载均衡策略

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

3.1 RR(Round Robin)

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

理解举例:有三个节点A、B、C

  • 第一个用户访问会被指派到节点A
  • 第二个用户访问会被指派到节点B
  • 第三个用户访问会被指派到节点C
  • 第四个用户访问继续指派到节点A,轮询分配访问请求实现负载均衡效果

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

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

理解举例:有三个节点A、B、C

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

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

3.4 uri

  • 表示根据请求的URI,做cdn需使用

3.5 url_param

  • 表示根据HTTP请求头来锁定每 一 次HTTP请求。

3.6 rdp—cookie(name)

  • 表示根据据cookie (name)来锁定并哈希每一次TCP请求。

3.7 source

  • 表示根据请求的源IP,类似Nginx的IP hash机制。

3.8 static-rr

  • 表示根据权重,轮询

4. LVS、Haproxy、Nginx区别

  • LVS基于Linux操作系统实现软负载均衡,而Haproxy和Nginx是基于第三方应用实现的软负载均衡
  • LVS是可实现4层的IP负载均衡技术,无法实现基于目录、URL的转发。而实现Haproxy和Nginx都可以实现4层和7层技术,Haproxy可提供TCP和Http应用的负载均衡综合解决方案
  • LVS因为工作在ISO模型的第四层,其状态监测功能单一,而Haproxy在状态监测方面功能更丰富、强大,可支持端口、URL、脚本等多种状态监测方式
  • Haproxy功能强大,但整体性能低于4层模式的LVS负载均衡
  • Nginx主要用于web服务器或缓存服务器

5. Haproxy的优点

  • Haproxy也是支持虚拟主机的
  • Haproxy支持8种负载均衡器策略
  • Haproxy的优点能补充nginx的一些缺点,比如支持Session的保持,Cookie的引导,同时支持通过获取指定url来检测后端服务器的状态
  • Haproxy跟LVS类似,本身就只是一款负载均衡软件,单纯从效率上来讲Haproxy会比Nginx有更出色的负载均衡速度,在并发处理上也是优于Nginx的
  • Haproxy支持TCP协议的负载均衡转发

6. 常见的Web集群调度器

  • 目前常见的Web集群调度器分为软件和硬件
  • 软件通常使用开源的LVS、Haproxy、Nginx
  • 硬件一般使用比较多的是F5,也有很多人使用国内的一些产品,如梭子鱼、绿盟等

二. Haproxy集群的部署

环境:
Haproxy服务器:192.168.119.70
Nginx 服务器1:192.168.119.20
Nginx 服务器2:192.168.119.30
客户端:192.168.119.128

1. 部署nginx服务器

nginx1服务器(192.168.119.20)nginx2服务器(192.168.119.30)

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. #切换至opt目录,将下载好的压缩包传进来解压
cd /opt
tar -zxf nginx-1.12.0.tar.gz

5. #切换至解压后的目录下编译
cd nginx-1.12.0

./configure \
--prefix=/usr/local/nginx \
--user=nginx \
--group=nginx \
--with-http_stub_status_module

6. #安装
make && make install -j4

7. #做软连接,让系统识别nginx的操作命令
ln -s /usr/local/nginx/sbin/nginx /usr/local/sbin/

8. #将nginx命令加入服务
cd /lib/systemd/system
vim nginx.service
#!/bin.bash

[Unit]
Description=nginx
After=network.target
[Service]
Type=forking
PIDFile=/usr/local/nginx/logs/nginx.pid
ExecStart=/usr/local/nginx/sbin/nginx
ExecReload=/usr/bin/kill -s HUP $MAINPID
ExecStop=/usr/bin/kill -s QUIT $MAINPID
PrivateTmp=true
[Install]
WantedBy=multi-user.target

9. #创建站点目录
nginx1
vim /var/www/html/index.html
<html>
<body>
<meta http-equiv="Content-Type" content="text/html;charset=utf-8">
<h1>飘摇风雨中,睹物思故乡</h1>
</body>
</html>
cat /usr/local/nginx/html/index.html

nginx2
vim /var/www/html/index.html
<html>
<body>
<meta http-equiv="Content-Type" content="text/html;charset=utf-8">
<h1>总会有地上的生灵,敢于直面雷霆的威光</h1>
</body>
</html>
cat /usr/local/nginx/html/index.html

10. #重新加载单元.启动服务
systemctl daemon-reload
systemctl start nginx

11. #查看是否能成功启动
ss -ntap|grep nginx
http://192.168.119.20/

1.1 关闭防火墙

1.2 安装依赖关系包

1.3 新建用户和组方便管理

1.4 切换opt目录,下载压缩包并解

1.5 切换至解压后的目录下编译

1.6 安装

1.7 做软链接,让系统识别nginx操作命令

1.8 将nginx命令加入服务

1.9 创建站点目录

1.10 重新加载单元,启动服务

1.11 查看是否能成功启动

2. 部署haproxy服务器(192.168.119.70)

1. #关闭防火墙
systemctl stop firewalld
setenforce 0

2. #将安装Haproxy所需软件包传到/opt目录下
cd /opt
haproxy-1.5.18.tar.gz

3. #安装依赖软件
yum install -y pcre-devel bzip2-devel gcc gcc-c++ make

4. #解压安装包,并切换至该软件包
tar zxf haproxy-1.5.18.tar.gz
cd haproxy-1.5.18/

5. #编译安装Haproxy
make TARGET=linux2628 ARCH=x86_64
make install

6. #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                      #守护进程模式

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.102:80 check inter 2000 fall 3     #定义在线节点
        server inst2 192.168.59.118:80 check inter 2000 fall 3

7. #添加haproxy系统服务
cp /opt/haproxy-1.5.18/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

8. #在客户端测试
在客户端使用浏览器打开 http://192.168.59.103/test.html ,不断刷新浏览器测试负载均衡效果

2.1 关闭防火墙

2.2 安装依赖软件

2.3 将haproxy软件包下载到opt目录下

2.4 解压安装包

2.5 编译安装haproxy

2.6 haproxy服务器配置

2.7 添加haproxy系统服务

2.8 客户端浏览器测试

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值