详述Haproxy搭建web群集
发表于:2025-01-25 作者:千家信息网编辑
千家信息网最后更新 2025年01月25日,常见的Web集群调度器目前常见的Web集群调度器分为软件和硬件,软件通常使用开源的LVS、Haproxy、Nginx,硬件一般使用比较多的时F5,也有很多人使用国内的一些产品,如梭子鱼、绿盟等Hapr
千家信息网最后更新 2025年01月25日详述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
- 安装步骤
- 安装基础软件包
- 编译安装haproxy
- 要注意操作系统版本,是32位系统还是64位
- 建立Haproxy的配置文件
- 创建配置文件目录/etc/haproxy
- 将源码包提供的配置文件样例haproxy.cfg复制到配置文件目录中
Haproxy配置文件详解
- Haproxy配置文件通常分为三个部分
- global:为全局配置
- defaults:为默认配置
- listen:为应用组件配置
- global配置参数
- log 127.0.0.1 local0: 配置日志记录,local0为日志设备,默认存放到系统日志
- log 127.0.0.1 local1 notice: notice为日志级别,通常有24个级别
- maxconn 4096:最大连接数
- uid 99:用户uid
- d 99:用户gid
- 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.114.56:80 check inter 2000 fall 3:定义在线节点
- server inst2 192. 168.114.56:81 check inter 2000 fall 3 backup:定义备份节点
配置与测试
- 根据实际的案例将相应参数进行修改:
- listen webcluster 0.0.0.0:80
- option httpchk GET /index.html
- balance roundrobin
- server inst1 192. 168.10.61:80 check inter 2000 fall 3
- server inst2 192.168. 10.62:80 check inter 2000 fall 3
- 创建自启动脚本,并启动Haproxy服务
- 测试Haproxy集群
- 测试高性能
- 可在两个不同的浏览器中分别访问两个测试网站,正常情况下应该出现两个网站的测试页面
- 高可用性
- 将其中一台Nginx服务器停用,在客户端浏览器中访问Haproxy,正常情况下应出现另一台Nginx服务器网站测试页面
Haproxy日志管理
- Haproxy的日志默认是输出到系统的syslog中,在生产环境中一般单独定义出来
- 定义的方法步骤
- 修改Haproxy配置文件中关于日志配置的选项,加入配置:
- log /dev/log local0 info
- log /dev/log local0 notice
- 修改rsyslog配置,将Haproxy相关的配置独立定义到haproxy.conf,并放到/etc/rsyslog.d/下
- 保存配置文件并重启rsyslog服务,完成rsyslog配置
- 访问Haproxy集群测试网页并测试日志信息
Haproxy参数优化
- 随着企业网站负载增加,haproxy参数优化相当重要
- maxconn:最大连接数,根据应用实际情况进行调整,推荐使用10240
- daemon:守护进程模式,Haproxy可以使用非守护进程模式启动,建议使用守护进程模式启动
- nbproc:负载均衡的并发进程数,建议与当前服务器CPU核数相等或为其2倍
- retries:重试次数,主要用于对集群节点的检查,如果节点多,且并发量大,设置为2次或3次
- option http-server-close: 主动关闭http请求选项,建议在生产环境中使用此选项
- timeout http-keep-alive: 长连接超时时间,设置长连接超时时间可以设置为10s
- timeout http-request: http请求超时时间,建议将此时间设置为5~ 10s,增加http连接释放速度
- timeout client: 客户端超时时间,如果访问量过大,节点响应慢可以将此时间设置短一些, 建议设置为1min左右就可以了
操作实例
实验环境
Haporxy服务器IP地址:192.168.144.175web1服务器IP地址:192.168.144.151web2服务器IP地址:192.168.144.176client测试机
在web1,web2服务器上安装Nginx
[root@web1 ~]# yum install -y \ //安装环境需要组件包> pcre-devel \ //开发包> zlib-devel \ //压缩包> gcc \> gcc-c++ \> make [root@web1 ~]# useradd -M -s /sbin/nologin nginx //创建系统用户[root@web1 ~]# mkdir /abc ##创建挂载点[root@web1 ~]# mount.cifs //192.168.100.8/LNMP-C7 /abc/ //挂载Password for root@//192.168.100.3/LNMP-C7: [root@web1 ~]# cd /abc/[root@web1 abc]# tar zxvf nginx-1.12.2.tar.gz -C /opt //解压[root@web1 abc]# cd /opt/nginx-1.12.2/[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]# echo "this is kgv web" > /usr/local/nginx/html/test.html //创建站点网页内容,web2上为this is accp web[root@web1 nginx-1.12.2]# ln -s /usr/local/nginx/sbin/nginx /usr/local/sbin/ //便于系统识别[root@web1 nginx-1.12.2]# nginx -t //检查语法[root@web1 nginx-1.12.2]# nginx //开启服务[root@web1 nginx-1.12.2]# systemctl stop firewalld.service //关闭防火墙[root@web1 nginx-1.12.2]# setenforce 0
在haproxy服务器上安装haproxy调度服务
[root@haproxy ~]# yum install -y \ //安装环境组件工具> pcre-devel \> bzip2-devel \> gcc \> gcc-c++ \> make[root@haproxy ~]# systemctl stop firewalld.service //关闭防火墙[root@haproxy ~]# setenforce 0[root@haproxy ~]# mkdir /abc[root@haproxy ~]# mount.cifs //192.168.100.8/LNMP-C7 /abc/ //挂载[root@haproxy ~]# cd /abc/[root@haproxy abc]# tar zxvf haproxy-1.5.19.tar.gz -C /opt/ //解压[root@haproxy abc]# cd /opt/haproxy-1.5.19/[root@haproxy haproxy-1.5.19]# make TARGET=linux26 //编译[root@haproxy haproxy-1.5.19]# make install //安装[root@haproxy haproxy-1.5.19]# mkdir /etc/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]# vim haproxy.cfg //编辑配置文件#chroot /usr/share/haproxy //注释语句#redispatch //注释语句//删除所有listen项目,并添加listen webcluster 0.0.0.0:80 option httpchk GET /test.html //web网页 balance roundrobin //开启轮询模式 server inst1 192.168.144.151:80 check inter 2000 fall 3 //健康检查请求三次 server inst2 192.168.144.176:80 check inter 2000 fall 3[root@haproxy haproxy]# cp /opt/haproxy-1.5.19/examples/haproxy.init /etc/init.d/haproxy //启动文件[root@haproxy haproxy]# chmod +x /etc/init.d/haproxy //执行权限[root@haproxy haproxy]# chkconfig --add /etc/init.d/haproxy //添加到service[root@haproxy haproxy]# ln -s /usr/local/sbin/haproxy /usr/sbin/ //便于系统识别[root@haproxy haproxy]# service haproxy start //开启服务Starting haproxy (via systemctl): [ 确定 ][root@haproxy haproxy]# netstat -ntap | grep haproxy //查看端口tcp 0 0 0.0.0.0:80 0.0.0.0:* LISTEN 39884/haproxy
使用client测试网页
日志定义,修改haproxy配置文件
[root@haproxy haproxy]# vim /etc/haproxy/haproxy.cfg ##修改配置文件global log /dev/log local0 info ##添加两个级别的日志文件 log /dev/log local0 notice #log loghost local0 info[root@haproxy haproxy]# service haproxy restart ##重启服务[root@haproxy haproxy]# touch /etc/rsyslog.d/haproxy.conf ##创建系统日志haproxy配置文件[root@haproxy haproxy]# vim /etc/rsyslog.d/haproxy.confif ($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&~[root@haproxy haproxy]# systemctl restart rsyslog.service ##重启系统日志服务[root@haproxy haproxy]# cd /var/log/ ##此时是没有haproxy日志##重新访问网页[root@haproxy haproxy]# cd /var/log/haproxy/[root@haproxy haproxy]# ls ##此时就生成了info级别的日志文件haproxy-info.log
配置
服务
日志
文件
节点
用户
服务器
算法
调度
测试
时间
系统
应用
均衡
参数
集群
三个
建议
情况
模式
数据库的安全要保护哪些东西
数据库安全各自的含义是什么
生产安全数据库录入
数据库的安全性及管理
数据库安全策略包含哪些
海淀数据库安全审计系统
建立农村房屋安全信息数据库
易用的数据库客户端支持安全管理
连接数据库失败ssl安全错误
数据库的锁怎样保障安全
北京直销软件开发价格
防范网络安全诈骗
家用主机有必要上服务器主板吗
推广软件开发加盟商市场价格
服务器文件无更新怎么恢复
西峡市网络安全宣传
软件开发实习生评价
数据库+若存在+删除
林都讲坛网络安全报告
spass数据库资源
网络安全哪个大学有
软件开发中dev是什么
小学第五届网络安全宣传方案
boss系统数据库
南通软件开发创新服务
xml文件能导入数据库吗
与软件开发沟通需求
2022正保数据库账号
农业银行软件开发中心成都公司
小黄车网络技术
csmar数据库下载不了数据
人月神话是软件开发项目
数据库索引值有什么作用
怎么连接内网数据库
svn服务器管理规则
软件开发缩短工期报价
蔡甸售后完善的计算机软件开发
服务器怎么进入任务管理
财务如何做好安全和服务器
网络安全记在心