从小白到大神之路之学习运维第42天---第三阶段----HAProxy开源负载均衡软件(工作原理、架构图、流程图、组成、centos7上部署haproxy+nginx+nfs(脚本部署)操作)

第三阶段基础

时  间:2023年6月16日

参加人:全班人员

内  容:

HAProxy开源负载均衡软件

目录

一、主要信息

整个系统是由以下三个组件构成:

二、HAProxy 工作原理

三、架构图

四、Haproxy 流程图

五、Haproxy 组成

六、centos7上部署haproxy+nginx+nfs(脚本部署)

实验环境配置:

haproxy的服务器配置:

nfs+rps服务器部署:

nginx服务器1部署:

 nginx服务器2部署:

结果测试:


一、主要信息

    HAProxy 是一款流行的开源负载均衡软件,它可以帮助在高流量网站上分担负载,提高网站的可靠性和性能。

    HAProxy 通常用于将来自客户端的流量分发到多个服务器中,以实现负载均衡。

    它还提供了高可用性和故障恢复功能,例如健康检查和自动切换到备用服务器。

    另外,HAProxy 还提供了很多高级功能,例如 SSL 终止、HTTP 压缩和请求缓存。HAProxy 的架构是基于事件驱动的,它运行在一个单一的进程中,并使用多线程和单线程事件循环机制来处理多个并发连接。

整个系统是由以下三个组件构成:

1.**客户端**:指浏览器或其他客户端应用程序,向 HAProxy 发送请求。

2.**HAProxy 服务器**: 运行在中间层的 HAProxy 服务器,接收来自客户端的请求,并将它们转发到后端服务器以处理请求。

3.**后端服务器**:这些服务器用于响应客户端请求。HAProxy 可以链接到多个服务端以实现负载均衡。在 HAProxy 结构中,后端服务器被组织成一个服务器池,它们可以是物理或虚拟服务器

当客户端连接到 HAProxy 服务器时,它们会被定向到适当的后端服务器。HAProxy 可以使用多种负载平衡算法来判断哪些后端服务器需要处理请求。一旦 HAProxy 选择了一个后端服务器,它会将客户端的请求转发到该服务器并返回响应。HAProxy 的优势在于它可以处理数百万个并发连接,同时提供高可用性、可扩展性和性能优化功能。

二、HAProxy 工作原理

如下

1.客户端发起连接:当客户端发起连接请求时,它将连接到 HAProxy 提供的 IP 地址和端口。

2.HAProxy 接受连接请求: HAProxy 将客户端连接请求接受到其监听的端口上,以等待后续的请求。

3.检查请求: HAProxy 会检查请求并根据预定义的负载平衡规则,将请求分发到其中一个可用的后端服务器。

4.转发请求: HAProxy 会将请求转发到选定的后端服务器处理,该服务器将处理请求并返回HAProxy。

5.HAProxy 返回响应:一旦后端服务器处理完成请求,HAProxy 将返回响应到客户端。

在 HAProxy 的架构中,它担当了传统的 TCP/HTTP 服务器和反向代理的角色。HAProxy 可以在应用层、TCP 层、IP 层对客户端请求进行负载均衡,同时可以在响应返回之前对请求进行修改。需要注意的是,HAProxy 几乎没有任何延迟,因为 它实现了事件驱动机制和无阻塞l/0,因此可以通过多线程和多核 CPU 等技术来处理并发连接。此外,HAProxy 还支持 TLS终止、HTTP 压缩、请求缓存等高级功能。

三、架构图

以下是 HAProxy 的简化架构图,展示了客户端、HAProxy 和后端服务器之间的关系:

在上图中,客户端向 HAProxy 发送请求。HAProxy 将请求路由到适当的后端服务器,并将响应从服务器返回给客户端。HAProxy 架构的优势在于它可以提供高可用性、可扩展性和性能优化功能,因此它已成为在线应用程序的主要负载平衡解决方案之一。

四、Haproxy 流程图

以下是 HAProxy 的简化流程图,描述了客户端请求如何通过 HAProxy 进行负载均衡:

在上面的流程中,客户端向 HAProxy 发送请求,HAProxy 根据其负载平衡规则选择可用的后端服务器来处理请求。选定的后端服务器将请求处理并返回响应,HAProxy 在响应中暗示给客户端。HAProxy 通过使用一些算法来选择一个最合适的后端服务器,其中包括轮询和IP散列等负载均衡算法。HAProxy 还提供了其他高级功能,例如粘性会话和 SSL 卸载。

需要注意的是,上面的流程图中省略了一些细节,例如 TCP 层和应用程序层请求处理等。实际上,HAProxy 可以在应用程序层、TCP 层和P 层上操作,并可以根据需要进行筛选和修改。

五、Haproxy 组成

HAProxy 主要由以下组件组成:

1.**haproxy 二进制可执行文件**: haproxyj二进制可执行文件是 HAProxy 的核心组件,实现了负载均衡、反向代理等功能。管理员可以使用 haproxy 二进制文件来启动、停止和管理HAProxy 进程,并指定配置文件和日志文件等参数。

2.**配置文件**:配置文件包含 HAProxy 服务的各种配置,例如监听 P 和端口、后端服务器列表、负载均衡算法、匹配规则、转发规则等。管理员可以编辑配置文件来自定义 HAProxy服务,同时也可以使用 HAProxy 的命令行选项覆盖配置文件的某些设置。

3.**统计数据界面**: HAProxy 提供了一个统计数据界面,可以通过该界面查看 HAProxy 服务的各项指标,例如吞吐量、连接数、CPU 利用率、内存利用率、后端服务器状态等。管理员可以使用这些指标来监控 HAProxy 服务的运行状态,并进行问题排查和性能优化。

4.**日志文件**:HAProxy 可以将报告存储在日志文件中,以便管理员进行问题排查和诊断。管理员可以在 HAProxy 的配置文件中指定日志文件路径、日志级别等选项,以满足不同的需求。

5.**管理工具**: HAProxy 提供了一些管理工具,帮助管理员更轻松地管理 HAProxy 服务。

例如“haproxy-systemd-wrapper 是一个用于启动和停止 HAProxy 服务的管理工具;haproxycl可以用于执行诸如热重载、重新启动、暂停和恢复服务等操作。

总的来说,以上组件共同构成了 HAProxy 的体系结构,提供了负载均衡、反向代理、监控和管理等功能,使得 HAProxy 成为一个强大而灵活的开源负载均衡器

六、centos7上部署haproxy+nginx+nfs(脚本部署)

目  的:

    两台nginx服务器做web服务,haproxy服务器做调度负载均衡,为保证提供的内容一致性使用nfs做共享目录,两台nginx服务器使用相同的共享目录文件提供web服务

硬件需求

centos7服务器

haproxy

192.168.1.107

centos7服务器

nginx

192.168.1.136

centos7服务器

nginx

192.168.1.145

centos7服务器

nfs+rps

192.168.1.108

实验环境配置:

四台服务器均进行以下设置:

请关闭防火墙和selinux再执行后续操作

#关闭防火墙和selinux代码如下

systemctl stop firewalld.service    

#停止防火墙服务

systemctl disable firewalld.service  

#开机不自启动防火墙服务

sed -i 's/SELINUX=.*/SELINUX=disabled/'

/etc/sysconfig/selinux   

#将selinux的配置文件改为不启动

reboot   #重启服务器,修改selinux配置后重启生效

 

haproxy的服务器配置:

在作为haproxy的服务器上导入以下shell执行haproxy安装

vim install-haproxy.sh

Chmod 755 install-haproxy.sh

#!/bin/bash

#function:安装haproxy修改配置文件并添加两台web

#author:999vip 2021118

yum install haproxy -y  #yum安装haproxy

echo 请输入nginx服务器1ip  

read a          #弹出输入框并将输入内容作为变量a

echo 请输入nginx服务器2ip

read b          #弹出输入框并将输入内容作为变量a

sed -i "82s/127.0.0.1:5001/$a:80/"  

/etc/haproxy/haproxy.cfg        

#替换haproxy的配置文件82行为nginx1的ip

sed -i "83s/127.0.0.1:5002/$b:80/"  

/etc/haproxy/haproxy.cfg        

#替换haproxy的配置文件83行为nginx2的ip

sed -i '63s/5000/80/'  /etc/haproxy/haproxy.cfg  

#将haproxy的默认5000端口改为80端口

echo "listen admin_stats" >>

/etc/haproxy/haproxy.cfg               

#设置haproxy的web管理用户

echo "stats enable" >> /etc/haproxy/haproxy.cfg                     

#开启haproxy程序web服务

echo "bind *:8080" >> /etc/haproxy/haproxy.cfg                      

#haproxy管理页面端口为8080

echo "mode http" >> /etc/haproxy/haproxy.cfg                        

#以下为haproxy系统配置

echo "option httplog" >> /etc/haproxy/haproxy.cfg

echo "log global" >> /etc/haproxy/haproxy.cfg

echo "maxconn 10" >> /etc/haproxy/haproxy.cfg

echo "stats refresh 30s" >>

/etc/haproxy/haproxy.cfg

echo "stats uri /admin" >>

/etc/haproxy/haproxy.cfg

echo "stats realm haproxy" >>

/etc/haproxy/haproxy.cfg

echo "stats auth admin:admin" >>

/etc/haproxy/haproxy.cfg

echo "stats hide-version" >>

/etc/haproxy/haproxy.cfg

echo "stats admin if TRUE" >>

/etc/haproxy/haproxy.cfg              

#以上为haproxy系统配置

systemctl start haproxy.service                                     

#开启haproxy程序

c=$(ip a | grep "inet "|grep ens33| awk '{print $2}'|awk -F/ '{print $1}')  

#变量c等于本机ip

echo haproxy部署完成

echo 访问$c将自动轮询$a和$b的web页面

echo 访问$c:8080/admin为haproxy程序的管理页面

echo 管理页面登录账户为admin密码为admin

执行结果如下,在弹出的提示语后分别输入两台nginx服务器ip地址(根据实际环境输入)

例:

nginx1:192.168.1.136

nginx2:192.168.1.145

浏览器访问测试:192.168.1.107:8080/admin

输入账户和密码

结果如下:

nfs+rps服务器部署:

由于nginx服务需要用的nfs共享目录,这里我们先部署nfs在部署nginx

vim install-nfs-rps.sh

chomod 755 install-nfs-rps.sh

#!/bin/bash

#function:安装nfs 创建/app/file作为共享文件

#author:999vip 20211118

yum install nfs-utils rpcbind -y

#yum安装nfs和rpc服务

touch /etc/exports               

#创建nfc的配置文件

mkdir -p /app/file               

#创建nfc共享文件目录

chown -R nfsnobody.nfsnobody /app/file/

#赋予共享目录nfs权限

echo "/app/file *(rw,sync)" >> /etc/exports

#允许所有IP访问nfs共享目录并有可读写权限

exportfs –rv                               

#载入配置

systemctl enable nfs                        

#开机自启动nfs

systemctl enable rpcbind          #开机自启动rps

systemctl start nfs                #启动nfs程序

systemctl start rpcbind            #启动rps程序

touch /app/file/index.html

#在共享目录下创建网页文件

echo "<h1>chenjiafengmeiyouxiaojii</h1>" >>

/app/file/index.html

#在网页文件中写入要显示的数据

echo nfs服务部署完成

运行结果如下表示已完成nfs服务部署

nginx服务器1部署:

vim install-ninx1.sh

chomod 755 install-ninx1.sh

#!/bin/bash

#function: Centos7一键安装nginux

#author:999vip 20211117

yum -y install  gcc gcc-c++ autoconf automake libtool make openssl openssl-devel pcre pcre-devel #安装nginx所需环境

cd  /usr/local/src/                                                                              

#切换到安装目录

wget  

http://nginx.org/download/nginx-1.8.1.tar.gz                                               

#下载nginx到当前目录

tar -zxvf nginx-1.8.1.tar.gz                                                                 

#解压nginx安装包

cd  nginx-1.8.1       #进入解压后目录

./configure \--prefix=/usr/local/nginx

\--with-http_ssl_module \--with-http_flv_module

\--with-http_stub_status_module

\--with-http_gzip_static_module \--with-pcre                                                     

#编译文件

make && make install      #编译安装                                                                    

cd  /usr/local/nginx      #进入nginx安装目录

sed -i '14s/nginx/BDQN/'

/usr/local/nginx/html/index.html                                        

#方便测试区分将网页中nginx改为BDQN

/usr/local/nginx/sbin/nginx      #启动nginx服务

echo nginx部署完成,

请测试web页面   #屏幕输出内容提醒用户

echo 接下来将部署nfs并映射html,请确认是否继续                                                    

#屏幕输出内容提醒用户

echo 键入任意值将继续操作,如需中断请按Ctrl+c                                                    

#屏幕输出内容提醒用户

read a                                                                                         

#弹出框暂停执行,用户键入任意值继续执行,键入值作为变量a但后续并不调用这个变量

yum install nfs-utils rpcbind  -y                                                                

#安装nfs和rpc服务

systemctl enable nfs        #开机自启动nfs服务                                                                     

systemctl enable rpcbind   #开机自启动rps服务                                                                    

systemctl start nfs    #启动nfs服务

systemctl start rpcbind    #启动rpc服务

echo nfs服务安装完成,接下来将进行挂载操作                                                       

#屏幕输出内容提醒用户

echo 键入任意值将继续操作,如需中断请按Ctrl+c                                                    

#屏幕输出内容提醒用户

echo 请输入nfs服务器ip                                                                           

#屏幕输出内容提醒用户

read b           #将键入值作为变量b

mount -t nfs $b:/app/file /usr/local/nginx/html/                                                 

#挂载nfs上的目录到nginx的html目录下

注意:运行到下面这里时提示nginx部署完成,按任意键进行下一步时可暂停下,进行nginx2服务器部署

手动输入nfs服务器ip

例:192.168.1.108

 网页输入验证:192.168.1.107

 nginx服务器2部署

vim install-ninx2.sh

chomod 755 install-ninx2.sh

#!/bin/bash

#function: Centos7一键安装nginux

#author:999vip 20211117

yum -y install  gcc gcc-c++ autoconf automake libtool make openssl openssl-devel pcre pcre-devel

#安装nginx所需环境

cd  /usr/local/src/   #切换到安装目录

wget  

http://nginx.org/download/nginx-1.8.1.tar.gz                                               

#下载nginx到当前目录

tar -zxvf nginx-1.8.1.tar.gz                                                                     

#解压nginx安装包

cd  nginx-1.8.1    #进入解压后目录

./configure \--prefix=/usr/local/nginx

\--with-http_ssl_module \--with-http_flv_module

\--with-http_stub_status_module

\--with-http_gzip_static_module \--with-pcre                                                     

#编译文件

make && make install   #编译安装

cd  /usr/local/nginx     #进入nginx安装目录

/usr/local/nginx/sbin/nginx     #启动nginx服务

echo nginx部署完成,

请测试web页面         #屏幕输出内容提醒用户                                                       

echo 接下来将部署nfs并映射html,请确认是否继续                                                    

#屏幕输出内容提醒用户

echo 键入任意值将继续操作,如需中断请按Ctrl+c                                                    

#屏幕输出内容提醒用户

read a                                                                                           

#弹出框暂停执行,用户键入任意值继续执行,

键入值作为变量a但后续并不调用这个变量

yum install nfs-utils rpcbind  -y                                                                

#安装nfs和rpc服务

systemctl enable nfs  #开机自启动nfs服务

systemctl enable rpcbind     #开机自启动rps服务

systemctl start nfs    #启动nfs服务

systemctl start rpcbind      #启动rpc服务

echo nfs服务安装完成,接下来将进行挂载操作                                                       

#屏幕输出内容提醒用户

echo 键入任意值将继续操作,如需中断请按Ctrl+c                                                    

#屏幕输出内容提醒用户

echo 请输入nfs服务器ip                                                                           

#屏幕输出内容提醒用户

read b             #将键入值作为变量b                                                                              

mount -t nfs $b:/app/file /usr/local/nginx/html/                                                 

#挂载nfs上的目录到nginx的html目录下

 

结果测试:

同样,在提示nginx部署完成时不按回车,进行haproxy测试,访问haproxy服务器的web页面会自动转到nginx1服务器的web页面,点击刷新后会跳转到nginx2服务器的web页面,多次刷新会顺序跳转

 这时测试完成,能正常做到负载均衡,到nginx上敲下回车或者键入任意值回车进行nfs安装,安装完成后提示输入nfs服务器ip(根据实际部署的ip进行输入)

输入后会自动挂载nfs上脚本创建的目录到本地,这时再去访问haproxy的web页面发现出现的页面发生变化了,而且刷新也是相同界面,到这里就实现了负载均衡加页面统

 到这里我们就可以去haproxy后台查看转发记录了,浏览器访问haproxy的IP:8080/admin进入后台

账户名:admin 密码:admin

  后台显示两台nginx转发次数相差不超过±1即为正常,至此搭建完成,可以将项目移交给开发人员进行网站开发了。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

人间打气筒(Ada)

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值