Nginx 动态负载均衡

2023-11-06

Nginx 负载均衡(动态实现)

1,概览

1,传统配置实现的负载均衡,在加减服务器的时候,会遇到下面的问题    
    1:配置文件是默认地址,则需要重载配置文件。nginx -s reload
        加载配置文件流程:
            1,主进程通知worker进程进行重启
            2,worker进程收到通知,等待现有请求处理完毕,然后进行重启
            3,重启过程中的请求无法处理,会堆积一些无法处理的请求
            4,重启完毕,先处理堆积的请求,然后处理后续的请求
    2:配置文件不是默认地址,需要关闭nginx,指定配置文件重启,用以加载新的配置文件。

    #注意:以上两种方法,测试环境当然不会有问题。如果是生成环境,正值请求高峰的话,这么做是绝对不允许的。

这样,就产生了实现动态负载均衡的方法。

动态负载均衡实现原理:
    1.配置方面,和静态配置一摸一样,用upstream模块。将多个后端服务器的配置独立出来,include引入。
    2.利用consul服务维护多个后端服务器的地址以及配置信息,可扩展,缩减,修改后端服务器
    2.利用nginx-upsync-module模块,动态读取consul维护的后端服务器信息,写入1中独立出来
      的后端服务器配置中,并且加载到运行中的nginx中,整个过程不需要重新加载nginx。

2,consul

1,简介

consul其实就是个服务发现、配置管理中心的服务软件。
    (具体安装配置等细节可自行google,介绍使用都很详细。这里只介绍几个和nginx负载均衡相关的命令)

2,启动命令:

consul agent -server  -bootstrap-expect 1 -data-dir /tmp/consul -node=abc -  bind=8.8.8.2 -ui -client=0.0.0.0 

    详解:
        consul agent
        -server                 #表示启动的是一个服务 
        -bootstrap-expect n     #表示有n个节点之后再启动,没特殊分布式部署,n=1即可
        -data-dir /tmp/consul   #数据存储目录 
        -node=ali               #当前服务节点的别名
        -bind=0.0.0.0           #当前作为consul服务器的ip
        -ui                     #启动默认ui界面
        -client=0.0.0.0         #绑定client的地址,0.0.0.0表示所有客户端都可以访问

    注意:
        1,http服务默认是8500端口,开启ui界面的话,host:8500可进行可视化管理

实例:
consul agent -server  -bootstrap-expect 1 -data-dir /tmp/consul -node=abc -bind=8.8.8.2 -ui -client=0.0.0.0 

4,常用命令:

    1,增加新配置
        curl -X PUT -d '{"weight":1, "max_fails":2, "fail_timeout":10}' http://$consul_ip:$consul_port/v1/kv/$dir1/$upstream_name/$server_ip:$server_port

        例如:
            curl -X PUT -d '{"weight":2, "max_fails":2, "fail_timeout":10}' http://8.8.8.2:8500/v1/kv/upstreams/syncTest/8.8.8.3:9001


    2,查看所有的配置
        curl http://127.0.0.1:8500/v1/kv/?recurse


    3,删除某个key
        consul kv delete key(key 可以在上面查询所有配置中拿到)

3,nginx配置

http{

    ……

    upstream syncTest{
        #先给定一个服务器
        server  8.8.8.3:9001;

        #upsync,                                    这里的配置用了nginx-upsync-module模块
        #127.0.0.1:8500/v1/kv/upstreams/syncTest    consule服务器地址
        #upsync_timeout=6m                          超时时间6min
        #upsync_interval=500ms                      配置从consul拉取上游服务器的间隔时间
        #upsync_type                                指定使用配置服务器的类型,当前是consul
        #strong_dependency                          启动时是否强制依赖配置服务器,如果配置为on,则拉取失败,nginx同样会启用失败
        upsync  127.0.0.1:8500/v1/kv/upstreams/syncTest upsync_timeout=6m upsync_interval=500ms  upsync_type=consul  strong_dependency=off strong_dependency=off;

        #指定从consul拉取的上游服务器后持久化到的位
        upsync_dump_path /data/www/learnNote/nginx/servers_test.conf;
        #引入备份文件
        include /data/www/learnNote/nginx/servers_test.conf;
    }
    ……

    server{

        ……

        location / {
            #负载均衡转发
            proxy_pass http://syncTest;
        }

        ……

    }

}


#归纳:
    当consul扩展或者缩减服务器的时候,相应服务器配置文件会自动更新
    归根结底,和静态配置唯一的不同就是用upsync模块定时自动拉去consul维护的服务器信息。
    再简单点,就是upstream配置中,再加两条upsync,upsync_dump_path两条配置

注意:

本文主要讲了动态负载均衡的原理,实现。
需要了解静态负载均衡配置的知识,才能了解本文的动态的配置,静态配置可以查看上一篇总结
地址:
    知乎:https://zhuanlan.zhihu.com/p/157213928
    csdn:https://blog.csdn.net/SiuKong_Ngau/article/details/107069817
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Nginx 动态负载均衡 的相关文章

  • 如何将 CORS(跨源策略)添加到 NGINX 中的所有域?

    我创建了一个文件夹 用于提供静态文件 CSS 图像 字体和 JS 等 我最终会将文件夹 CNAME 到子域中 以便在 CDN 上使用 以便与我的 Magento 2 设置一起使用 我想允许所有域通过 CORS 跨源策略进行所有访问 并且我也
  • 站点启用/中不允许使用 nginx“mail”和“stream”指令

    当我尝试在 nginx 中使用流或邮件指令时遇到问题 我正在使用 nginx 1 16 1 和 Ubuntu 18 04 4 LTS 这是我的 nginx conf user www data worker processes auto p
  • Amazon ECS - 在 Docker 入口点上使用 IAM 角色时权限被拒绝

    我正在寻找一种将机密 证书注入 Amazon ECS 容器的方法 就我而言 它是一个简单的 nginx 容器 我一直在使用 AWS Parameter Store 关注这篇文章 https aws amazon com blogs comp
  • 命名 Docker 卷以共享构建而不更新

    我工作的公司的开发人员要求我用 Docker 做一些不同的事情 然后我也被使用了 目标是拥有 2 个具有以下职责的容器 容器A 节点容器将构建前端 React 应用程序并将捆绑包放入名为的目录中app dist 完成后 容器将停止运行 容器
  • 比较 nginx+Apache+mod_wsgi 与 nginx+uWSGI?

    在生产中使用 nginx Apache mod wsgi 与 nginx uWSGI vurtualenv 有何优缺点 我在自 2007 年以来开发的 mod wsgi 中看到了第一个变体的优点 并且具有更稳定的版本和易于管理 第二种变体的
  • 如果我在不打算升级到 websocket 连接的 HTTP 请求中包含“Upgrade”和“Connection”标头,会发生什么情况?

    我有一个 Nginx 服务器块 用于代理对 node js 服务器的请求 该服务器同时提供 HTTP 内容和 WS websocket 内容 是否可以在不应升级到 Websocket 连接的请求上添加升级标头 即使用 Nginx 代理到服务
  • kubernetes 集群中 django 应用程序的 Nginx 配置

    我在为部署在 kubernetes 中的 django 应用程序创建 nginx 配置文件时遇到困难 Nginx 和 app 是同一集群中的两个独立容器 据我了解 容器可以通过 127 0 0 1 XX 和主机名相互通信 我为此使用 min
  • 使用 FastCGI 运行 Lua 脚本

    我目前正在尝试找出使用 FastCGI 与 lighttpd 或 Nginx 一起运行 Lua 脚本的方法 我唯一能挖到的是WSAPI http keplerproject github com wsapi 开普勒计划的一部分 但我想知道是
  • Nginx 中 uwsgi_pass 和 proxy_pass 的区别?

    我在 Nginx 后面运行 uWSGI 并一直在使用proxy pass让 Nginx 访问 uWSGI 切换到有什么好处吗uwsgi pass 如果是这样 那是什么 uwsgi pass使用一个uwsgi协议 proxy pass使用普通
  • Docker:Nginx 和 php5-fpm docker 不说话

    我想进行完全 Docker 化的 Drupal 安装 我的第一步是让容器与 Nginx 和 php5 fpm 一起运行 两者都基于 Debian 我在 CoreOS alpha 频道 使用 Digital Ocean 我的 Dockerfi
  • 使用 Nginx 或 Apache 来提供动态内容? [关闭]

    就目前情况而言 这个问题不太适合我们的问答形式 我们希望答案得到事实 参考资料或专业知识的支持 但这个问题可能会引发辩论 争论 民意调查或扩展讨论 如果您觉得这个问题可以改进并可能重新开放 访问帮助中心 help reopen questi
  • 我可以在 Nginx Conf 中添加多少个服务器块

    知道我可以在 Nginx 配置中添加多少个服务器块吗 我需要将它用于具有多个子域的反向代理 每个客户端一个子域 它能成功支持 10 000 个服务器块吗 有没有相关的基准研究 这实际上并不是一个你有多少人的问题can但你有多少 能够妥善处理
  • nginx 和 uwsgi 非常大的文件上传(>3Gb)

    也许有人知道该怎么做 我正在尝试上传大于 3Gb 的文件 没问题 如果我使用以下配置上传高达 2Gb 的文件 Nginx client max body size 5g client body in file only clean clie
  • 常规请求期间 Django AJAX 请求未通过

    我有一个带有登录网页的 Django 站点 当提交页面上的登录表单时 它会执行登录视图 该视图会在其中运行一个需要很长时间处理 30秒左右 的函数 因此 为了在登录期间向客户端显示进度 一旦提交表单 登录页面上的 JS 函数就会开始向服务器
  • NGINX 上的 SSL 终止

    我已经购买了 SSL 证书 并在验证模数时正确地将其捆绑在一起 即https kb wisc edu middleware 4064 https kb wisc edu middleware 4064 那么哈希值是相同的 我已将证书和密钥移
  • Openresty 中的并发模型是什么?

    我很难理解 openresty 或 nginx 的并发模型 我读了Lua变量作用域 http wiki nginx org HttpLuaModule Lua Variable Scope 它解释了变量的生命周期 但它没有说明对它们的并发访
  • 错误请求 400:nginx/gunicorn

    我已经遵循了这个教程 http blog wercker com 2013 11 25 django 16 part3 html http blog wercker com 2013 11 25 django 16 part3 html我现
  • Rails/Nginx 中的超时——最佳实践

    我正在开发一个应该在 Nginx 服务器上运行的 Rails 应用程序 根据输入 应用程序可能需要很长时间来处理请求 或者在出现错误时挂起 因此我想防止进程永远运行 除了确保客户端收到超时信号的 Nginx 配置之外 我想我可能仍然需要确保
  • 使用 DigitalOcean 在 Kubernetes 集群上为我的 Nginx-Ingress 生成通配符证书

    我遵循了这个 DigitalOcean 指南https www digitalocean com community tutorials how to set up an nginx ingress with cert manager on
  • NGinx $proxy_add_x_forwarded_for 和 real_ip_header

    我在 NGinx 下有一个 web 应用程序和另一个前端负载均衡器 如下所示 x x x x IP 地址 客户端 a a a a gt LB b b b b gt NGX c c c c gt WEBAPP d d d d 这是我的 NGi

随机推荐

  • Flutter之自动更新(自带源码 包看包会)

    Flutter做的App怎么自动更新呢 首先要用到两个依赖一个叫update app 另外一个叫package info 还有一个叫Dio 一个是用来下载App的 一个是用来获取当前App的版本信息的 一个是用来网络链接的 flutter
  • axure能做剪切蒙版吗_Axure图片裁切功能

    平时做原型时经常会用到一张图片的某些部分 这时候我们一般都会借助于其他图片处理工具先处理好 再导入到原型中 其实Axure有简单的图片裁切功能 基本可以满足我们大部分的需求 下面介绍一下 使用axure7 1 图片裁割 通过该功能可以把图片
  • C++ 中 enable_shared_from_this 的使用总结

    背景 enable shared from this 是 C 11 定义在头文件 include 中的一个模板类 其作用是在类的内部安全的得到 this 指针的 shared ptr 版本 获取 this 的 shared ptr 版本 概
  • 文件的blob、base64、File的转化

    前言 blob base64 File的互转 base64 File function toFile ndata ndata为base64格式地址 let arr ndata split mime arr 0 match 1 bstr at
  • DALL-E-2 论文水记

    DALL E 2 论文水记 模型示意图 虚线上面是 CLIP 的训练流程 虚线下面是文字生成图像的流程 我们有一个 prior 模型和一个 decode 模型 先把 text embeding 输入 prior 模型 得到 image em
  • How to run Android apps in tablet mode on your phone

    转自 http www littlegreenrobot co uk tutorials how to run android apps in tablet mode on your phone How to run Android app
  • 2.6内核的通用的编译步骤

    2 6内核的通用的编译步骤 1 下载源码并解压 虽然我们可以将内核源码存放在任何自己找得到的地方 但通常还是会将内核源码下载到 usr src目录并解压 cd usr src wget ftp kernel org pub linux ke
  • Android——AVD无法启动解决方法

    起因 最近安装了Android Studio开始瞎捣鼓 安装的时候配置的是自带的Android Virtual Device AVD 然后想在虚拟机上跑以下demo 发现虚拟机怎么都启动不了 起初我以为是系统找不到我的虚拟机的位置导致 因为
  • C# 说说lock

    一 MSDN的定义 lock 语句获取给定对象的互斥 lock 执行语句块 然后释放 lock 持有 lock 时 持有 lock 的线程可以再次获取并释放 lock 阻止任何其他线程获取 lock 并等待释放 lock lock 关键字可
  • 基于TF-IDF+Tensorflow+PyQt+孪生神经网络的智能聊天机器人(深度学习)含全部Python工程源码及模型+训练数据集

    目录 前言 总体设计 系统整体结构图 系统流程图 孪生神经网络结构图 运行环境 Python 环境 TensorFlow 环境 模块实现 1 数据预处理 2 创建模型并编译 3 模型训练及保存 4 模型应用 系统测试 1 训练准确率 2 测
  • 软件测试管理方法(十一)——软件评审

    0 基本概念 工作 产品指软生命周期中各种产出物 包括各种文档 代码等 1 目的 从多方角度检查和评估每个阶段工作产品的合格情况 确保每个阶段的产出都是符合既定要求的 从而减少软件开发周期 包括项目周期 的返工现象 静态地测试程序中可能存在
  • LInux 锂电池驱动分析

    锂电池的驱动程序要实现以 下五个功能 1 可以自动检测到当前给电 池充电的是USB还 是AC 2 组织过大的充电电流 3 坏电池检测 4 死亡温度的检测 5 电池电压的测量 当我们要写一个锂 电池的驱动程序 的时候 首先 要知道内核提 供给
  • SpringBoot+Shiro实现免密登录

    1 自定义登录认证规则 import org apache shiro authc UsernamePasswordToken public class EasyUsernameToken extends UsernamePasswordT
  • DM6446的视频前端VPFE驱动之ioctl控制(视频缓存区,CCDC,decoder)解析之一

    本文均属自己阅读源码的点滴总结 转账请注明出处谢谢 欢迎和大家交流 qq 1037701636 email 200803090209 zjut com gzzaigcn2012 gmail com 在这里分析驱动的ioctl的内容时 需要结
  • Feature Pyramid Networks for Object Detection 论文笔记

    论文地址 Feature Pyramid Networks for Object Detection 前言 这篇论文主要使用特征金字塔网络来融合多层特征 改进了CNN特征提取 论文在Fast Faster R CNN上进行了实验 在COCO
  • 本地jar包上传的maven仓库,引用jar包中的pom依赖无法下载

    新项目开发公共组件 上传到公司maven仓库 记一次本地项目打包 上传到公司maven仓库的坑 mvn deploy deploy file DgroupId com test 分组 DartifactId test jar名称 Dvers
  • 【cuda】——cuda,opencv混合编程

    思路来自 https www cnblogs com dwdxdy p 3528711 html 但是其cuda源码是有问题的 没有cmakelists txt 背景 采用cuda gpu交换opencv图像的 r b通道 0 代码 mai
  • 恒生ufx接口转变成CTP接口

    由于当初自己的程序是对接ctp接口 里面大量使用了ctp的东西 但最近又要对接恒生的系统 想着不改整个程序 把ufx接口封装成ctp的接口形式 这样上层的业务逻辑都不用改了 已实现的主要功能 ReqUserLogin ReqOrderIns
  • C++的mutable

    一 介绍 mutable的中文意思是 可变的 易变的 正好与const相反 在C 中 mutable也是为了突破const的限制而设置的 被mutable修饰的变量 将永远处于可变的状态 即使在一个const函数中 二 用法 如果类的成员函
  • Nginx 动态负载均衡

    Nginx 负载均衡 动态实现 1 概览 1 传统配置实现的负载均衡 在加减服务器的时候 会遇到下面的问题 1 配置文件是默认地址 则需要重载配置文件 nginx s reload 加载配置文件流程 1 主进程通知worker进程进行重启