Haproxy+Nginx搭建Web群集精华篇

tech2022-08-15  139

文章目录

一:负载均衡简介1.1:为什么使用负载均衡:1.2:负载均衡类型: 二:常见的Web集群调度器2.1:Haprox应用分析2.2:Haproxy支持多种调度算法,最常用的有三种2.3:haproxy功能2.4:haproxy组成 三:使用Haproxy搭建Web群集3.1:Nginx的安装与启动3.11:在客户机上访问等进行测试3.2:Haproxy配置安装与启动3.21:在负载均衡器上安装Haproxy3.22:配置Haproxy文件3.23:创建自启动脚本,并启动Haproxy3.24:配置与测试 四:Haproxy日志管理4.1:编辑haproxy配置文件

一:负载均衡简介

负载均衡(Load Balance,简称LB)是一种服务或基于硬件设备等实现的高可用反向代理技术,负载均衡将特定的业务(web服务、网络流量等)分担给指定的一个或多个后端特定的服务器或设备,从而提高了公司业务的并发处理能力、保证了业务的高可用性、方便了业务后期的水平动态扩展。

1.1:为什么使用负载均衡:

Web服务器的动态水平扩展–>对用户无感知 增加业务并发访问及处理能力–>解决单服务器瓶颈问题 节约公网IP地址–>降低IT支出成本 隐藏内部服务器IP–>提高内部服务器安全性 配置简单–>固定格式的配置文件 功能丰富–>支持四层和七层,支持动态下线主机 性能较强–>并发数万甚至数十万

1.2:负载均衡类型:

四层:

LVS(Linux Virtual Server) HAProxy(High Availability Proxy) Nginx(1.9)

七层:

HAProxy Nginx

硬件:

F5 #https://f5.com/zh Netscaler #https://www.citrix.com.cn/products/citrix-adc/ Array #https://www.arraynetworks.com.cn/ 深信服 #http://www.sangfor.com.cn/ 北京灵州 #http://www.lingzhou.com.cn/cpzx/llfzjh/

二:常见的Web集群调度器

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

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

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

2.1:Haprox应用分析

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

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

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

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

适用于负载大的web站点

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

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

RR(Round Robin)

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

LC(Least Connections)

最小连接算法,根据后端的节点连接大小动态分配前端请求

SH(Source Hasging)

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

2.3:haproxy功能

HAProxy是TCP / HTTP反向代理服务器,尤其适合于高可用性高并发环境: 可以针对HTTP请求添加cookie,进行路由后端服务器 可平衡负载至后端服务器,并支持持久连接 支持基于cookie进行调度 支持所有主服务器故障切换至备用服务器 支持专用端口实现监控服务 支持不影响现有连接情况下停止接受新连接请求 可以在双向添加,修改或删除HTTP报文首部 支持基于pattern实现连接请求的访问控制 通过特定的URI为授权用户提供详细的状态信息 历史版本更新功能: 1.4 1.5 1.6 1.7 1.8 1.9 2.0 2.1 2.2-dev

2.4:haproxy组成

程序环境: 主程序:/usr/sbin/haproxy 配置文件:/etc/haproxy/haproxy.cfg Unit file:/usr/lib/systemd/system/haproxy.service 配置段: global:全局配置段 进程及安全配置相关的参数 性能调整相关参数 Debug参数 proxies:代理配置段 defaults:为frontend, backend, listen提供默认配置 frontend:前端,相当于nginx中的server {} backend:后端,相当于nginx中的upstream {} listen:同时拥有前端和后端,适用于一对一环境

三:使用Haproxy搭建Web群集

主机要求

用1台客户端,三台虚拟服务器模拟搭建一套Web群集

虚拟机安装Centos 7.6的系统

主机操作系统IP地址主要软件Haproxy服务器Centos 7.620.0.0.41haproxy-1.5.19.tarNginx服务器1Centos 7.620.0.0.42nginx-1.12.0.tarNginx服务器2Centos 7.620.0.0.43nginx-1.12.0.tar客户端win 1020.0.0.50Edge浏览器

3.1:Nginx的安装与启动

在两台网站服务器上安装Nginx,并启动服务

使用编码的方式进行安装

关闭Firewalld防火墙

安装基础软件包

增加系统用户nginx

编译安装Nginx并启动

#关闭防火墙 setenforce 0 iptables -F #安装环境包 yum install -y pcre-devel zlib-devel gcc gcc-c++ make #解压Nginx软件包 tar zxvf nginx-1.12.2.tar.gz -C /opt #切换到nginx目录 [root@web1 ~]# cd /opt [root@web1 opt]# cd nginx-1.12.2/ #配置 [root@web1 nginx-1.12.2]# ./configure \ > --prefix=/usr/local/nginx \ //安装目录 > --user=nginx \ //用户 > --group=nginx //用户组 编译及安装 make && make install #创建web站点首页index.html [root@web1 nginx-1.12.2]# cd html/ [root@web1 html]# vim test.html //编写以下信息 <h1>this is web1</h1> #切换web2节点服务器 <h1>this is web2</h1> #建立软链接,便于管理nginx ln -s /usr/local/nginx/sbin/nginx /usr/local/sbin/ #两台节点服务器都启动 nginx //启动 nginx -t //检查配置文件 nginx: the configuration file /usr/local/nginx/conf/nginx.conf syntax is ok nginx: configuration file /usr/local/nginx/conf/nginx.conf test is successful #查看端口 netstat -ntap | grep nginx tcp 0 0 0.0.0.0:80 0.0.0.0:* LISTEN 22361/ngin: master

3.11:在客户机上访问等进行测试

3.2:Haproxy配置安装与启动

3.21:在负载均衡器上安装Haproxy

//下载依赖环境 [root@haproxy ~]# yum install -y \ > pcre-devel \ > bzip2-devel \ > gcc \ > gcc-c++ \ > make [root@haproxy ~]# ls anaconda-ks.cfg initial-setup-ks.cfg 模板 图片 下载 桌面 haproxy-1.5.19.tar.gz 公共 视频 文档 音乐 //解压到当前目录 [root@haproxy ~]# tar zxvf haproxy-1.5.19.tar.gz #编译安装 [root@haproxy ~]# cd haproxy-1.5.19/ [root@haproxy haproxy-1.5.19]# make TARGET=linux26 [root@haproxy haproxy-1.5.19]# make install #创建haproxy配置文件目录 [root@haproxy haproxy-1.5.19]# mkdir /etc/haproxy #复制模板配置文件到haproxy目录下 [root@haproxy haproxy-1.5.19]# cp examples/haproxy.cfg /etc/haproxy/

3.22:配置Haproxy文件

vim /etc/haproxy/haproxy.cfg 删除:#chroot /usr/share/haproxy #redispatch this config needs haproxy-1.1.28 or haproxy-1.2.1 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 //使用系统为99的ID号 gid 99 daemon #debug #quiet default log global //定义日志为global配置 mode http //http模式 option httplog //采用http日志格式记录日志 option dontlognull retries 3 //检查节点服务器的失败连续达到三次认为节点不可用 #iredispatch //这边注释 不然服务启动不了 maxconn 2000 //最大连接数 contimeout 5000 //连接超时时间 clitimeout 50000 //客户端超时时间 srvtimeout 50000 //服务器超时时间 listen webcluster 0.0.0.0:80 option httpchk GET /test.html 检查节点服务器的test.html文件【首页文件】 balance roundrobin server inst1 20.0.0.42:80 check inter 2000 fall 3 //定义备份点 server inst2 20.0.0:43:80 check inter 2000 fall 3 //定义备份点

3.23:创建自启动脚本,并启动Haproxy

#关闭防火墙 [root@localhost haproxy-1.5.19]# iptables -F [root@localhost haproxy-1.5.19]# setenforce 0 [root@localhost haproxy-1.5.19]# cp examples/haproxy.init /etc/init.d/haproxy #为haproxy赋予可执行权限 [root@localhost haproxy-1.5.19]# chmod +x /etc/init.d/haproxy #加入系统服务 [root@localhost haproxy-1.5.19]# chkconfig --add /etc/init.d/haproxy [root@localhost haproxy-1.5.19]# ln -s /usr/local/sbin/haproxy /usr/sbin/haproxy #启动haproxy [root@localhost haproxy-1.5.19]# service haproxy start [root@localhost haproxy-1.5.19]# netstat -ntap | grep haproxy tcp 0 0 0.0.0.0:80 0.0.0.0:* LISTEN 87939/haproxy

3.24:配置与测试

测试Haproxy集群 测试高性能 可在两个不同的浏览器中分别访问两个测试网站,正常情况下应该出现两个网站的测试页面

高可用性

将其中一台 Nginx服务器停用,在客户端浏览器中访问 Haproxy,正常情况下应出现另外一台 Nginx服务器的网站测试页面

四:Haproxy日志管理

Haproxy的日志默认是输出到系统的 syslog中,在生产环境中一般单独定义出来定义的方法步骤 修改 Haproxy配置文件中关于日志配置的选项,加入配置: log /dev/log local0 infolog /dev/log local0 notice 修改 rsyslog配置,将 Haproxy相关的配置独立定义到 haproxy.conf,并放到/etc/rsyslog.d/下 保存配置文件并重启 rsyslog服务,完成 rsyslog配置

4.1:编辑haproxy配置文件

[root@localhost haproxy]# vim /etc/haproxy/haproxy.cfg //在global下面两行日志文件位置重新定义分离 global log /dev/log local0 info log /dev/log local1 notice ...省略信息........ #修改配置文件需要重启服务 [root@localhost haproxy-1.5.19]# service haproxy restart Restarting haproxy (via systemctl): #创建配置文件目录 [root@localhost haproxy-1.5.19]# touch /etc/rsyslog.d/haproxy.conf [root@localhost haproxy-1.5.19]# 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 &~ #重启日志文件 [root@localhost haproxy-1.5.19]# systemctl restart rsyslog.service 再次访问刷新会产生两个日志文件 [root@localhost log]# cd haproxy/ [root@localhost haproxy]# ls haproxy-info.log haproxy-notice.log

感谢观看

最新回复(0)