使用Haproxy搭建Web群集的方法
发表于:2025-12-01 作者:千家信息网编辑
千家信息网最后更新 2025年12月01日,常见的 Web集群调度器目前常见的 Web 集群调度器分为软件和硬件,软件通常使用开源的LVS、Haproxy、Nginx,硬件一般使用比较多的是 F5,也有很多人使用国内的一些产品,如梭子鱼、绿盟等
千家信息网最后更新 2025年12月01日使用Haproxy搭建Web群集的方法
常见的 Web集群调度器
目前常见的 Web 集群调度器分为软件和硬件,软件通常使用开源的LVS、Haproxy、Nginx,硬件一般使用比较多的是 F5,也有很多人使用国内的一些产品,如梭子鱼、绿盟等Haproxy应用分析
■LVS在企业应用中抗负载能力很强,但存在不足
LVS不支持正则处理,不能实现动静分离对于大型网站,LVS的实施配置复杂,维护成本相对较高■Haproxy是一款可提供高可用性、负载均衡、及基于TCP和HTTP应用的代理的软件
特别适用于负载特别大的Web站点运行在当前的硬件上可支持数以万计的并发连接连接请求Haproxy 调度算法原理
Haproxy 支持多种调度算法,最常用的有三种:
●RR (Round Robin)RR算法是最简单最常用的一-种算法,即轮询调度理解举例 有三个节点A、B、C,第一个用户访问会被指派到节点A,第二个用户访问会被指派到节点B,第三个用户访问会被指派到节点 第四个用户访问继续指派到节点A,轮询分配访问请求实现负载均衡效果●LC (Least Connections)LC算法即最小连接数算法,根据后端的节点连接数大小动态分配前端请求理解举例 有三个节点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算法有很大改进,是目前用到比较多的-种算法●SH (Source Hashing)SH即基于来源访问调度算法,此算法用于一些有Session会话记录在服务器端的场景,可以基于来源的IP、Cookie等做集群调度理解举例 有三个节点A、B、C,第一个用户第一次访问被指派到了A,第二个用户第一次访问被指派到了B 当第一个用户第二次访问时会被继续指派到A,第二个用户第二次访问时依旧会被指派到B,只要负载均衡调度器不重启,第一个用户访问都会被指派到A,第二个用户访向都会被指派到B,实现集群的调度 此调度算法好处是实现会话保持,但某些IP访问量非常大时会引起负载不均衡部分节点访问量超大,影响业务使用Haproxy 配置文件详解
Haproxy配置文件通常分为三个部分
●global:为全局配置●defaults:为默认配置●listen:为应用组件配置global配置参数
●log 127.0.0.1 local0:配置日志记录,配置日志记录,ocal0为日志设备,默认存放到系统日志●log 127.0.0.1 local1 notice: notice为 日志级别通常有24个级别●maxconn4096:最大连接数●uid 99:用户uid●gid 99:用户giddefaults配置项配置默认参数,-般会被应用组件继承,如果在应
用组件中没有特别声明,将安装默认配置参数设置
●log global:定义日志为global配置中的日志定义●mode http:模式为http●option httplog:采用http日志格式记录日志●retries 3:检查节点服务器失败连续达到三次则认为节点不可用●maxconn 2000:最大连接数●contimeout 5000:连接超时时间●clitimeout 50000:客户端超时时间●srtimeout 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.114 .56:80 check inter 2000 fall3: 定义在线节点server inst2 192. 168.114.56:81 check inter 2000 fall 3 backup:定义备份节点Haproxy 日志管理
Haproxy的日志默认是输出到系统的syslog中,在生产
环境中一般单独定义出来
定义的方法步骤
●修改Haproxy配置文件中关于日志配置的选项,加入配置:p log /dev/log local0 info。log /dev/log local0 notice●修改rsyslog配置,将Haproxy相关的配置独立定义到haproxy.conf,并放到etclrsyslog.d下●保存配置文件并重启rsyslog服务,完成rsyslog配置访问Haproxy集群测试网页并测试日志信息
Haproxy优化参数
随着企业网站负载增加,haproxy参数优化相当重要
●maxconn:最大连接数,根据应用实际情况进行调整,推荐使用10 240●daemon:守护进程模式, Haproxy可以使用非守护进程模式启动,建议使用守护进程模式启动●nbproc:负载均衡的并发进程数,建议与当前服务器CPU核数相等或为其2倍●oretries:重试次数,主要用于对集群节点的检查,如果节点多,且并发量大,设置为2次或3次●option http-server-close:主动关闭http请求选项,建议在生产环境中使用此选项●timeout http-keep-alive:长连接超时时间,设置长连接超时时间可以设置为10s●timeout http-request: http请求超时时间,建议将此时间设置为5~ 10s,增加http连接释放速度●timeout client:客户端超时时间,如果访问量过大,节点响应慢可以将此时间设置短一些,建议设置为1min左右就可以了案例演示
实验要求
1.一台 Haproxy调度服务器,两台 Nginx 服务器,一台windows7作为客户端;2.三台服务器为CentOS 7.3的64位系统;3.所有主机网卡都设置成仅主机模式,绑定静态地址;4.客户端可以通过访问调度服务器,访问到两台节点服务器,不需要访问真实服务器地址。| 主机角色 | IP地址 |
|---|---|
| Haproxy服务器 | 192.168.100.210 |
| Nginx服务器1 | 192.168.100.201 |
| Nginx服务器2 | 192.168.100.202 |
| windows7客户端 | 192.168.100.50 |
第一步:搭建 Haproxy调度服务器
1.使用yum安装编译工具
[root@haproxy ~]# yum install bzip2-devel pcre-devel gcc gcc-c++ make -y2.修改网卡为仅主机模式,并绑定静态地址
[root@haproxy ~]# vim /etc/sysconfig/network-scripts/ifcfg-ens33#将dhcp替换为staticBOOTPROTO=static#在末行追加IP地址\子网掩码\网关IPADDR=192.168.100.210NETMASK=255.255.255.0GATEWAY=192.168.100.1[root@haproxy ~]# service network restart Restarting network (via systemctl): [ 确定 ]3.远程共享并挂载haproxy源码包到本地服务器
[root@haproxy ~]# smbclient -L /192.168.100.1 Sharename Type Comment --------- ---- ------- haproxy Disk LNMP Disk 4.解压haproxy源码包并编译
[root@haproxy ~]# cd /mnt#解压haproxy源码包到.opt目录[root@haproxy mnt]# tar zxvf haproxy-1.5.19.tar.gz -C /opt[root@haproxy mnt]# cd /opt[root@haproxy opt]# lshaproxy-1.5.19 rh#切换至haproxy目录[root@haproxy opt]# cd haproxy-1.5.19/#查看系统版本号3100[root@haproxy haproxy-1.5.19]# uname -aLinux haproxy 3.10.0-693.el7.x86_64 #1 SMP Tue Aug 22 21:09:27 UTC 2017 x86_64 x86_64 x86_64 GNU/Linux#编译haproxy[root@haproxy haproxy-1.5.19]# make TARGET=linux3100#编译安装[root@haproxy haproxy-1.5.19]# make install5.修改haproxy.cfg配置文件,并开启服务
#创建haproxy文件目录[root@haproxy haproxy-1.5.19]# mkdir /etc/haproxy#复制模板文件到haproxy目录[root@haproxy haproxy-1.5.19]# cp examples/haproxy.cfg /etc/haproxy/#修改haproxy.cfg文件[root@haproxy haproxy-1.5.19]# vim /etc/haproxy/haproxy.cfg#注释chroot和redispatch条目,防止启动失败global log 127.0.0.1 local0 log 127.0.0.1 local1 notice #log loghost local0 info maxconn 4096 #chroot /usr/share/haproxy uid 99 gid 99 daemon #debug #quietdefaults log global mode http option httplog option dontlognull retries 3 #redispatch maxconn 2000 contimeout 5000 clitimeout 50000 srvtimeout 50000#删除原有的所有listen条目,添加一下条目listen webcluster 0.0.0.0:80 option httpchk GET /test.html balance roundrobin server inst1 192.168.100.201:80 check inter 2000 fall 3 server inst2 192.168.100.202:80 check inter 2000 fall 3#复制haproxy启动脚本到系统启动进程中[root@haproxy haproxy-1.5.19]# cp examples/haproxy.init /etc/init.d/haproxy#授予脚本执行权限[root@haproxy haproxy-1.5.19]# chmod +x /etc/init.d/haproxy#添加脚本到service管理条目中[root@haproxy haproxy-1.5.19]# chkconfig --add haproxy #建立脚本命令软链接[root@haproxy haproxy-1.5.19]# ln -s /usr/local/sbin/haproxy /usr/sbin/haproxy#启动服务[root@haproxy haproxy-1.5.19]# service haproxy startStarting haproxy (via systemctl): [ 确定 ]#关闭防火墙和安全功能[root@Haproxy haproxy-1.5.19]# systemctl stop firewalld.service [root@Haproxy haproxy-1.5.19]# setenforce 0第二步:搭建Nginx服务器
1.两台Nginx服务器都要使用yum安装编译工具
[root@haproxy ~]# yum install zlib-devel pcre-devel gcc gcc-c++ make -y2.修改网卡为仅主机模式,并绑定静态地址
[root@nginx1 ~]# vim /etc/sysconfig/network-scripts/ifcfg-ens33#将dhcp替换为staticBOOTPROTO=static#在末行追加IP地址\子网掩码\网关IPADDR=192.168.100.201NETMASK=255.255.255.0GATEWAY=192.168.100.1[root@nginx1 ~]# service network restart Restarting network (via systemctl): [ 确定 ][root@nginx2 ~]# vim /etc/sysconfig/network-scripts/ifcfg-ens33#将dhcp替换为staticBOOTPROTO=static#在末行追加IP地址\子网掩码\网关IPADDR=192.168.100.202NETMASK=255.255.255.0GATEWAY=192.168.100.1[root@nginx2 ~]# service network restart Restarting network (via systemctl): [ 确定 ]3.远程共享挂载Nginx源码包到本地服务器
[root@nginx1 ~]# mount.cifs //192.168.100.1/LNMP /mntPassword for root@//192.168.100.1/LNMP: 4.解压源码包并创建管理用户
[root@nginx1 ~]# cd /mnt#解压Nginx源码包到/opt目录root@nginx1 mnt]# tar zxvf nginx-1.12.0.tar.gz -C /opt#创建Nginx管理用户root@nginx1 mnt]# cd /opt[root@nginx1 opt]# useradd -M -s /sbin/nologin nginx5.配置Nginx
[root@nginx1 opt]# cd nginx-1.12.0/[root@nginx1 nginx-1.12.0]# ./configure --prefix=/usr/local/nginx --user=nginx --group=nginx6.编译安装
[root@nginx1 nginx-1.12.0]# make && make install7.创建测试网页
[root@nginx1 nginx-1.12.0]# cd /usr/local/nginx/html/[root@nginx1 html]# echo "this is kgc web" >test.html[root@nginx2 nginx-1.12.0]# cd /usr/local/nginx/html/[root@nginx2 html]# echo "this is accp web" >test.html8.创建Nginx命令软链接到系统
[root@nginx1 html]# ln -s /usr/local/nginx/sbin/nginx /usr/local/sbin/9.关闭防火墙和安全功能,启动服务
[root@nginx1 html]# systemctl stop firewalld.service [root@nginx1 html]# setenforce 0[root@nginx1 html]# nginx10.使用客户端访问网页,在浏览器中输入192.168.100.210/test/html进行访问
由此论证使用Haproxy搭建Web群集采用轮询机制
配置haproxy日志
#重启haproxy 服务[root@haproxy etc]# service haproxy restart Restarting haproxy (via systemctl): [ 确定 ]#创建[root@haproxy haproxy-1.5.19]# touch /etc/rsyslog.d/haproxy.conf[root@haproxy haproxy-1.5.19]# vim /etc/rsyslog.d/haproxy.conf#定义haproxy信息日志if ($programname == 'haproxy' and $syslogseverity-text == 'info')then -/var/log/haproxy/haproxy-info.log&~#定义haproxy通知日志if ($programname == 'haproxy' and $syslogseverity-text == 'notice')then -/var/log/haproxy/haproxy-notice.log&~#重启日志服务[root@haproxy etc]# systemctl restart rsyslog.service#切换到日志目录下查看haproxy日志文件[root@haproxy etc]# cd /var/log/haproxy/[root@haproxy haproxy]# lshaproxy-info.log#查看日志文件[root@haproxy haproxy]# cat haproxy-info.logNov 30 16: 53: 30 Haproxy haproxy[119165]: 192.168.100.50: 49191 [ 30/Nov/2019:16: 53: 30.100webcluster. webcluster/inst2 168/0/1/0/169 200 252 - - --- 1/1/0/1/0 0/0 "GET /test.html HTTP/1.1"Nov 30 16: 53:42 Haproxy haproxy[119165]: 192.168.100.50: 49191[ 30/Nov/2019: 16:53: 42.290 :webcluster. webcluster/inst1 159/0/0/0/159 200 253 - - ---- 1/1/0/1/0 0/0 "GET /test.html HTTP/1.1 "谢谢阅读!!!
服务
配置
日志
服务器
节点
用户
调度
算法
文件
时间
应用
地址
客户
客户端
模式
均衡
参数
源码
目录
系统
数据库的安全要保护哪些东西
数据库安全各自的含义是什么
生产安全数据库录入
数据库的安全性及管理
数据库安全策略包含哪些
海淀数据库安全审计系统
建立农村房屋安全信息数据库
易用的数据库客户端支持安全管理
连接数据库失败ssl安全错误
数据库的锁怎样保障安全
计算机网络安全管理的论文
s3流媒体服务器
尚德网络安全是什么专项行动
国外免费dns服务器
什么是网络安全保障篇
无线传感器网络技术体系
家电软件开发咋这么唯
罗威科技网络技术有限公司
数据库中搜索期刊
战地5怎么管理自己的服务器
怎么给物理服务器添加硬盘
国外网络安全产品
数据库强制存取控制方法是
软件开发公司旺季
网络安全致家长一封信2021
饥荒服务器搜索
如何删除云服务器中的无线网络
服务器管理 php
提升网络技术监管
python将链表存数据库
福建服务器机柜定做高档虚拟主机
高校食堂管理系统数据库设计
网络安全攻防一体技术研究
用友数据服务器
互联网高新科技经济犯罪
计信息网络安全责任书
如何删除ftp服务器
公安网络安全监控
大型软件开发项目管理经验分享
严格落实网络安全管理措施