小白到运维工程师自学之路 第三十九集 (HAproxy 负载均衡)

news/2024/11/15 8:24:42/

一、概述

        HAProxy是一款高性能的负载均衡软件,可以将来自客户端的请求分发到多个服务器上,以提高系统的可用性和性能。HAProxy支持多种负载均衡算法,包括轮询、加权轮询、最少连接数等。同时,HAProxy还支持会话保持、健康检查、SSL终止等功能,可以满足不同场景下的负载均衡需求。HAProxy的配置文件简单易懂,可以通过命令行或者Web界面进行管理和监控。HAProxy广泛应用于Web服务器、数据库服务器、应用服务器等领域,是一款非常优秀的负载均衡软件。

二、工作原理

1. 客户端向 HAProxy 发送请求,请求可以是 HTTP、TCP 或者其他协议。

2. HAProxy 接收到请求后,根据预先定义的负载均衡算法(如轮询、加权轮询、最少连接数等)选择一个后端服务器。

3. HAProxy 将请求转发给选中的后端服务器。

4. 后端服务器处理请求并返回响应。

5. HAProxy 接收到响应后,将响应返回给客户端。

三、准备(CtneOS7系统)

1、四台服务器可以互相通联

2、四台服务器都关闭防火墙

systemctl stop firewalld.service     停止防火墙服务
systemctl disable firewalld.service  开机不自启动防火墙服务
sed -i 's/SELINUX=.*/SELINUX=disabled/' /etc/sysconfig/selinux  将selinux的配置文件改为不启动
reboot                               重启

四、部署haproxy+nginx+nfs(脚本部署)

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

1、在192.168.1.20的服务器上安装haproxy

#!/bin/bash
#function:安装haproxy修改配置文件并添加两台web
#author:syh123 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

保存退出赋予脚本执行权限后执行该脚本

OK脚本执行完成

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

#!/bin/bash
#function:安装nfs 创建/app/file作为共享文件
#author:syh123 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>test123</h1>" >> /app/file/index.html #在网页文件中写入要显示的数据
echo nfs服务部署完成

 保存退出赋予脚本执行权限后执行该脚本

OK安装完成

3、安装nginx1

#!/bin/bash
#function: Centos7一键安装nginux
#author:syh123 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/test123/' /usr/local/nginx/html/index.html                                        #方便测试区分将网页中nginx改为test123
/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目录下

保存退出赋予脚本可执行权限后执行该脚本

安装完成

 查看挂载

可以看到已经挂载到网络共享文件夹中了

4、安装nginx2

#!/bin/bash
#function: Centos7一键安装nginux
#author:syh123 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/syh123/' /usr/local/nginx/html/index.html                                        #方便测试区分将网页中nginx改为syh123
/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目录下

 保存退出赋予脚本可执行权限后执行该脚本

 ok安装完成

查看挂载

可以看到已经挂载到网络共享文件夹中了

 这样环境就部署完成了

测试

 把192.168.1.211上的nginx给关掉后使用192.168.1.210访问,可以发现访问的还是192.168.1.211的界面 OK测试成功

 

 

 

 以上就是HAproxy 负载均衡的基本配置

如有错误欢迎各位大佬批评指正,我们共同进步


http://www.ppmy.cn/news/477142.html

相关文章

音频,音效,音乐网

http://sc.chinaz.com/yinxiao/

小米商城静态页面制做

dd效果图如下 huml 源码 <!DOCTYPE html> <html lang"en"><head><meta charset"UTF-8"><meta http-equiv"X-UA-Compatible" content"IEedge"><meta name"viewport" content"widthde…

audio speex 的应用

speex 是一个免费的开源库&#xff0c;主要用于音频的编解码和回声消除等功能&#xff0c;有着较高的压缩比率&#xff0c;是使用于做音频传输功能&#xff0c;回声消除可以降低使用过程中的噪音。 1.github 源码地址 https://github.com/xiph/speex 2.主要函数 int speex_…

audio播放语音

页面代码&#xff1a; <div id"videoDiv"></div> <audio controls"controls" [src]"ypurl" id"video1"> 您的浏览器不支持 audio 元素。 </audio> $("#videoDiv").html("");yyadoiu(atta…

audio音频使用

<audio ref"player" crossOrigin"anonymous" controls style"width:400px" controlsList"nodownload" /> 属性说明&#xff1a; 1、开始播放 this.$refs.player.play() 2、 暂停播放 this.$refs.player.pause() 3、设置播…

Audio Effect

Android&#xff1a;AudioEffect——音乐特效控制 https://blog.csdn.net/qq_42192693/article/details/105047003 AudioEffect构造流程跟踪 & 音效库实现&#xff08;native侧&#xff09; https://blog.csdn.net/wkw1125/article/details/65632960?utm_mediumdistrib…

利用在线词典批量查询英语单词

进来遇到很多英语生词&#xff0c;工具书上给的解释错误百出&#xff0c;而很多在线词典不但可以给出某个单词的解释&#xff0c;而且有大量的示例&#xff0c;因此猜想利用在线词典批量查询这些单词。怎么实现呢&#xff1f; 首要问题是如何自动获取某个单词的解释。搜索之后…

音频播放

今天闲来无事&#xff0c;花了点时间解读AVAudioPlayer头文件。如有解释不到位地方&#xff0c;望请大家指出。 属性&#xff1a; 1.property(readonly, getterisPlaying) BOOL playing; 判断音频文件是否在播放。 2.property(readonly) NSUInteger numberOfChannels; 音频播放…