当前位置: 首页 > news >正文

37负载均衡介绍和nginx模块编译安装

为什么要使用负载均衡

        当我们的Web服务器直接面向用户,往往要承载大量并发请求,单台服务器难以负荷,我使用多台Web服务器组成集群,前端使用Nginx负载均衡,将请求分散的打到我们的后端服务器集群中,实现负载的分发。那么会大大提升系统的吞吐率、请求性能。

负载均衡简单介绍

        我们将负载均衡称为SLB(Server Load Balance),Nginx就是SLB的一种,负载均衡的叫法有很多,还可以叫负载、Load Balance、LB,公有云中叫SLB(阿里云负载均衡)、QLB(青云负载均衡)、CLB(腾讯云负载均衡)、ULB(ucloud负载均衡),常见的负载均衡软件有Nginx、Haproxy、LVS,Nginx是七层负载,可以造伪四层,Haproxy是七层负载、LVS是四层负载。

        负载均衡分七层和四层,七层从下到上分别是1.物理层、2.数据链路层、3.网络层、4.传输层、5.会话层、6.表示层、7.应用层,而四层负载均衡仅到传输层,所以说四层负载均衡速度更快,但是七层负载均衡更贴近于服务,http协议就是七层协议,我们可以用Nginx做会话保持、URL路径规则匹配、Head头改写等等,这些四层无法实现。本篇文章我们介绍Nginx的七层负载均衡。

配置nginx负载均衡

  location / {
    proxy_pass http://webs;      将收到的请求转发到webs组
    include proxy_params;        负载均衡调用的模块信息

[root@localhost conf.d]# cat default.conf 
upstream webs {server 192.168.74.7;server 192.168.74.8 down;
}server {listen 80;server_name www.admin.com;location / {proxy_pass http://webs;include proxy_params;location /check {check_status;}
}
}

next模块

Nginx负载均衡比较智能,如果一个服务器宕了,会自动访问下一个服务器,但是如果后台服务器没有宕而是返回错误,就需要我们增加一个负载均衡设置了,以保证如果出错能直接访问下一台,而不是返回错误。

  location / {proxy_pass http://webs;include proxy_params;proxy_next_upstream error timeout http_500 http_502 http_503 http_504;
} #这样如果报这些错误也会自动访问下一个服务器节点

Nginx负载均衡调度算法

Nginx 提供了多种负载均衡调度算法,用于决定如何将客户端请求分发到 upstream 定义的后端服务器集群中。选择合适的算法可以根据业务场景(如会话保持、服务器性能差异、负载均衡公平性等)优化服务性能和可用性。以下是五种常用的调度算法:

调度算法概述
rr轮询按时间顺序逐一分配到不同的后端服务器(默认算法)
weigth加权轮询,权重越高的服务器接收的请求越多
ip_hash根据客户端 IP 地址的哈希值分配请求,确保同一客户端的请求始终转发到同一台后端服务器,适用于需要 会话保持 的场景
url_hash根据请求 URL 的哈希值分配请求,确保相同 URL 的请求始终转发到同一台服务器,适用于静态资源缓存场景,需编译时添加模块

least_conn

最少连接数,哪个机器连接数少就分发哪个

Nginx负载均衡后端状态

状态概述
down当前的服务器不参与负载均衡,一般用于停机维护
backup预留的备份服务器,其他服务器全挂了启用备用服务器
max_fails允许请求失败的次数
fail_timeout经过max_fails失败后,服务器暂停时间
max_conns限制最大的接收连接数
upstream webs {server 172.16.1.7 max_fails=2 fail_timeout=10s;server 172.16.1.8;
}10 秒内如果对 172.16.1.7 的请求失败达到 2 次,Nginx 会将其标记为 “不可用”。
当服务器被标记为 “不可用” 后,Nginx 在接下来的 10 秒内不会再向其转发请求,直到超时后重新尝试检测。

Nginx负载均衡健康检查模块下载安装全流程

步骤 1:安装依赖工具

首先安装编译 Nginx 所需的依赖库:

yum install -y gcc gcc-c++ make zlib-devel pcre-devel openssl-devel wget --disablerepo=redis

步骤 2:下载 Nginx 源码和健康检查模块

2.1 下载 Nginx 源码
# 创建工作目录
mkdir -p /usr/local/src/nginx
cd /usr/local/src/nginx# 下载 Nginx 源码(可从官网 https://nginx.org/download/ 选择版本)
wget https://nginx.org/download/nginx-1.24.0.tar.gz
tar -zxvf nginx-1.24.0.tar.gz

2.2下载ngx_http_upstream_check_module 模块
现在windows下载压缩包,然后传给服务器
https://github.com/yaoweibin/nginx_upstream_check_modulecd /usr/local/src/nginx/
unzip nginx_upstream_check_module-master.zip 

步骤 3:为 Nginx 打模块补丁(关键步骤)

cd nginx-1.24.0patch -p1 < ../nginx_upstream_check_module-master/check_1.20.1+.patch

步骤 4:编译安装 Nginx(包含健康检查模块)

执行目录:必须在 Nginx 源码目录(如 nginx-1.24.0)中执行,否则会提示 ./configure: No such file or directory。路径检查:确保 --add-module 指定的路径(/usr/local/src/nginx/nginx_upstream_check_module-master)是你实际存放 ngx_http_upstream_check_module 模块的目录,路径错误会导致模块无法加载。使用--add-module格式添加第三方模块[root@localhost nginx]# cd nginx-1.24.0/
[root@localhost nginx-1.24.0]#./configure \
--prefix=/etc/nginx \
--sbin-path=/usr/sbin/nginx \
--modules-path=/usr/lib64/nginx/modules \
--conf-path=/etc/nginx/nginx.conf \
--error-log-path=/var/log/nginx/error.log \
--http-log-path=/var/log/nginx/access.log \
--pid-path=/var/run/nginx.pid \
--lock-path=/var/run/nginx.lock \
--http-client-body-temp-path=/var/cache/nginx/client_temp \
--http-proxy-temp-path=/var/cache/nginx/proxy_temp \
--http-fastcgi-temp-path=/var/cache/nginx/fastcgi_temp \
--http-uwsgi-temp-path=/var/cache/nginx/uwsgi_temp \
--http-scgi-temp-path=/var/cache/nginx/scgi_temp \
--user=nginx \
--group=nginx \
--with-compat \
--with-file-aio \
--with-threads \
--with-http_addition_module \
--with-http_auth_request_module \
--with-http_dav_module \
--with-http_flv_module \
--with-http_gunzip_module \
--with-http_gzip_static_module \
--with-http_mp4_module \
--with-http_random_index_module \
--with-http_realip_module \
--with-http_secure_link_module \
--with-http_slice_module \
--with-http_ssl_module \
--with-http_stub_status_module \
--with-http_sub_module \
--with-http_v2_module \
--with-mail \
--with-mail_ssl_module \
--with-stream \
--with-stream_realip_module \
--with-stream_ssl_module \
--with-stream_ssl_preread_module \
--add-module=/usr/local/src/nginx/nginx_upstream_check_module-master \
--with-cc-opt='-O2 -g -pipe -Wall -Wp,-D_FORTIFY_SOURCE=2 -fexceptions -fstack-protector-strong --param=ssp-buffer-size=4 -grecord-gcc-switches -m64 -mtune=generic -fPIC' \
--with-ld-opt='-Wl,-z,relro -Wl,-z,now -pie'#  --prefix  指定nginx 的安装目录
#  --sbin-path 运行命令
#  --add-module 添加模块的目录

步骤  5:编译并安装

[root@localhost nginx-1.24.0]# make && make install

步骤 6:测试模块是否可用

[root@localhost conf.d]# cat default.conf 
upstream webs {server 192.168.74.7;server 192.168.74.8 down;check interval=3000 rise=2 fall=3 timeout=1000 type=tcp;
}server {listen 80;server_name www.admin.com;location / {proxy_pass http://webs;include proxy_params;proxy_next_upstream error timeout http_500 http_502 http_503 http_504;
}location /check {check_status;
}
}

http://www.dtcms.com/a/596340.html

相关文章:

  • 网站开发成本都有哪几项北京app建设 网站开发公司
  • 01-总结
  • VR党建赛车模拟系统:让党史学习“开“出沉浸式新体验
  • Logstash 从 MySQL 同步数据到 Kafka
  • 通过 HelloWorld 深入剖析 JVM 启动过程
  • css-文字背景渐变色
  • Tailwind CSS的grid布局
  • LangGraph基础教程(4)---LangGraph的核心能力
  • 百度网站推广费用多少物流网站前端模板下载
  • Docker-镜像存储机制-网络
  • 线性代数 - 从方程组到行列式
  • 景德镇做网站公司中国邮政做特产的网站
  • 【Linux】进程间通信(三)System V 共享内存完全指南:原理、系统调用与 C++ 封装实现
  • 记一次cssd无法启动故障处理
  • 开源 Objective-C IOS 应用开发(一)macOS 的使用
  • ElasticSearch详解(篇一)
  • flash网站价格网站推广的特点
  • 【C++ 面试题】内存对齐
  • busybox:启动阶段的静态 IP 配置过程
  • k8s 中遇到Calico CrashLoopBackOff 的解决方法
  • zookeeper单机版安装
  • 【Excel导入】读取WPS格式嵌入单元格内的图片
  • 福清建设银行网站网红营销的作用
  • 34节点配电网牛顿-拉夫逊潮流计算 + 分布式电源(DG)多场景分析的 MATLAB
  • 分布式专题——53 ElasticSearch高可用集群架构实战
  • 电子商务网站建设与设计网站常州建设
  • 学习编程好么 | 编程的好处与学习路径分析
  • 从中间件的历史来看移动App开发的未来
  • Faster-Whisper:更快更好的开源Asr模型
  • ubuntu部署whisper+speaker_large+qwen【gradio界面版】