nginx动态同步配置模块nginx-upsync-module

news2025/2/27 16:30:57

 

使用场景简介

nginx一般直接在配置文件里配置upstream即可实现负载均衡,但有些特定的环境下此种方式就显得有些局限性。比如后台动态调整节点的时候;调整节点后不想修改配置文件重启nginx。

可以将配置文件从nginx本地迁移到其他第三方服务上如etcd、consul上,然后通过nginx-upsync-module模块实时同步到配置文件中,实现上下线节点动态同步到upstream配置中,再结合ngx_healthcheck_module实现后端健康检测。

可以将配置文件从nginx本地迁移到其他第三方服务上如etcd、consul上,然后时候拉取配置到本地。本文采用nginx-upsync-module,主要支持consul、etcd,本文以etcd为例。

0.etcd介绍

etcd是使用Go语言开发的一个开源的、高可用的分布式key-value存储系统,可以用于配置共享和服务的注册和发现。在这些用于存放nginx中关于upstream的配置信息。

etcd使用的2个默认端口号:2379和2380
2379:用于客户端通信
2380:用于与集群中的Peer通信

官网地址

https://github.com/etcd-io/etcd/releases

1.安装etcd(单机版)

#VERSION=3.4.20
#tar -zxvf  etcd-v${VERSION}-linux-amd64.tar.gz
#mv etcd-v${VERSION}-linux-amd64  /usr/local/etcd/
#echo 'export PATH=${PATH}:/usr/local/etcd/' >>/etc/profile
#source /etc/profile
#etcd --version
etcd Version: 3.4.20
Git SHA: 1e26823
Go Version: go1.16.15
Go OS/Arch: linux/amd64

2.启动

nohup  /usr/local/etcd/etcd  \
--name='node1' \
--enable-v2='true' \
--data-dir='/usr/local/etcd/default.etcd' \
--listen-peer-urls='http://0.0.0.0:2380' \
--initial-advertise-peer-urls='http://0.0.0.0:2380' \
--advertise-client-urls='http://0.0.0.0:2379' \
--listen-client-urls='http://0.0.0.0:2379' > /usr/local/etcd/etcd.log  2>&1 &

3.生成脚本

cat >/usr/local/etcd/start.sh<<EOF ; chmod o+x /usr/local/etcd/start.sh
#!/bin/bash
nohup  /usr/local/etcd/etcd  \
--name='node1' \
--enable-v2='true' \
--data-dir='/usr/local/etcd/default.etcd' \
--listen-peer-urls='http://0.0.0.0:2380' \
--initial-advertise-peer-urls='http://0.0.0.0:2380' \
--advertise-client-urls='http://0.0.0.0:2379' \
--listen-client-urls='http://0.0.0.0:2379' > /usr/local/etcd/etcd.log  2>&1 &
EOF
cat >/usr/local/etcd/stop.sh<<EOF ; chmod o+x /usr/local/etcd/stop.sh
#!/bin/bash
ps aux | grep etcd | grep -v "grep" | awk '{print $2}' | xargs kill > /dev/null 2>&1
EOF

4.nginx安装

安装nginx,同时安装七层后端检测模块为例

安装七层后端检测模块
cd /root
git clone https://github.com/weibocom/nginx-upsync-module.git
git clone https://github.com/xiaokai-wang/nginx_upstream_check_module.git
rpm -qa | egrep "pcre|pcre-devel|openssl|openssl-devel|zlib|zlib-devel"
yum install  pcre pcre-devel  opessl  openssl-devel  zlib  zlib-devel -y
wget  http://nginx.org/download/nginx-1.16.0.tar.gz
tar xzvf nginx-1.16.0.tar.gz && cd nginx-1.16.0
#nginx安装补丁包
patch -p1 < /root/nginx_upstream_check_module-master/check_1.12.1+.patch
#nginx安装
./configure --prefix=/usr/local/nginx \
--with-http_stub_status_module \
--with-http_v2_module \
--with-http_ssl_module \
--with-http_gzip_static_module \
--with-http_realip_module \
--with-http_flv_module \
--with-http_mp4_module \
--with-stream_ssl_module \
--with-stream_realip_module \
--with-stream \
--add-module=/root/nginx_upstream_check_module-master \
--add-module=/root/nginx-upsync-module
make && make install

5.配置说明

server {
        listen 80;
        …………
        location / {
        …………
        proxy_pass http://tomcat-cluster;
        }   
}
upstream tomcat-cluster {
server 127.0.0.1:11111;
upsync 127.0.0.1:2379/v2/keys/upstreams/test upsync_timeout=6m upsync_interval=500ms 	upsync_type=etcd strong_dependency=off;
upsync_dump_path /usr/local/nginx/conf/upstream.conf;
include /usr/local/nginx/conf/upstream.conf;
    …………
}

语法参数

server 127.0.0.1:11111;本机upsync工作虚拟端口

127.0.0.1:2379/v2/keys/upstreams/test, etcd服务器同步路径

  • upsync_interval=6m;每隔一段时间从consul/etcd中拉出服务器
  • upsync_timeout=500ms,从consul/etcd请求中提取服务器超时。
  • upsync_type=etcd,从拉取服务器类型:consul,etcd。
  • strong_dependency=off,每次在nginx启动或重新加载时,nginx是否从consul/etcd中拉出配置,on,拉取

off,不拉取配置

  • upsync_dump_path /usr/local/nginx/conf/upstream.conf, 同步存储配置文件路径
  • include /usr/local/nginx/conf/upstream.conf, 加载配置文件路径

最终实际配置

http {
    server {
        listen 80;
        # status interface
        location /status {
        check_status;
        }
        # http front
        location / {
        proxy_set_header Host $host;
        proxy_set_header  X-Real-IP        $remote_addr;
        proxy_set_header  X-Forwarded-For  $proxy_add_x_forwarded_for;
        proxy_set_header X-NginX-Proxy true;
        proxy_pass http://tomcat-cluster;
       }   
    }
    upstream tomcat-cluster {
        server 127.0.0.1:11111;
        upsync 127.0.0.1:2379/v2/keys/upstreams/test upsync_timeout=6m upsync_interval=500ms upsync_type=etcd strong_dependency=off;
        upsync_dump_path /usr/local/nginx/conf/upstream.conf;
        include /usr/local/nginx/conf/upstream.conf;
        check interval=3000 rise=2 fall=5 timeout=5000 type=http;
        check_http_send "GET / HTTP/1.0\r\n\r\n";
        check_http_expect_alive http_2xx http_3xx;
    }
}

6.启动服务

/usr/local/nginx/sbin/nginx

7.后端服务添加配置

后端web服务上线后,需要向etcd中添加注册信息,添加成功以后,nginx反代自动从etcd中拉取配置,实现后端服务上线自动添加至配置中。

后端web服务新上线

1.增加服务器节点语法

curl -X PUT -d value="{"weight":1, "max_fails":2, "fail_timeout":10, "down":0, "backup":0}"
http://etcdip:etcdi​p:port/v2/keys/dir1/dir1/upstream_name/backendip:backendi​p:backend_port

curl -X PUT -d value="{"weight":1, "max_fails":2, "fail_timeout":10, "down":0, "backup":0}"  \
http://192.168.241.10:2379/v2/keys/upstreams/test/127.0.0.1:8080

后端web服务新下线

2.删除服务节点

curl -X DELETE http://etcdip:etcdi​p:port/v2/keys/upstreams/upstreamname/upstreamn​ame/backend_ip:$backend_port

curl -X DELETE http://192.168.241.10:2379/v2/keys/upstreams/test/127.0.0.1:8086

3.调整服务参数

curl -X PUT -d value="{"weight":2, "max_fails":2, "fail_timeout":10, "down":0, "backup":0}"  \
http://192.168.241.10:2379/v2/keys/upstreams/test/127.0.0.1:8082

4.检测

curl http://etcdip:etcdi​p:port/v2/keys/upstreams/$upstream_name

curl  http://192.168.241.10:2379/v2/keys/upstreams/test

5.查看nginx中的配置文件

cat /usr/local/nginx/conf/upstream.conf

千锋教育Java入门全套视频教程(java核心技术,适合java零基础,Java自学必备)

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/862431.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

[C++ 网络协议] 套接字和地址族、数据序列

目录 1. 套接字 1.1 在Linux平台下构建套接字 1.1.1 用于接听的套接字(服务器端套接字) 1.1.2 用于发送请求的套接字(客户端套接字) 1.2 在Windows平台下构建套接字 1.2.1 Winsock的初始化 1.2.2 用于接听的套接字(服务器端套接字) 1.2.3 用于发送请求的套接字(客户端套…

申请流量卡的时候,你了解过坑吗?

和营业厅办理的手机卡不同&#xff0c;在网上办理流量卡时要考虑的因素很多&#xff0c;比如合约期&#xff0c;优惠期等等&#xff0c;如果如果这几个方面不注意很容易买到套路卡哟。 ​ 所以&#xff0c;我们在办理流量卡是时&#xff0c;不要只看重资费&#xff0c;这几样重…

手机里视频太大怎么压缩?压缩教程分享

现在视频文件的体积越来越大了&#xff0c;动不动就是几个GB起步&#xff0c;如果后期再剪辑处理一下&#xff0c;更是会占据更多的设备空间了&#xff0c;还会导致我们传输受到限制&#xff0c;这时候就需要我们对视频进行压缩处理&#xff0c;下面给大家分享几个简单的方法&a…

Zorin OS 16.3 发布:无缝升级和卓越改进!

导读Zorin OS 团队自豪地宣布了备受期待的 Zorin OS 16.3 版本的发布&#xff0c;这是这个受欢迎的 Linux 发行版的一个里程碑版本。自首次发布以来不到两年时间&#xff0c;Zorin OS 已经获得了庞大的用户群体&#xff0c;截至目前已经有 530 万次下载&#xff0c;而 16.3 版本…

一步步教你实现JWT认证和授权

一步步教你实现JWT认证和授权 前言一、引入二、Token认证与JWT认证的关系三、什么是JWT认证&#xff1f;四、JWT的组成1、头部&#xff08;Header&#xff09;2、载荷&#xff08;Payload&#xff09;3、签名&#xff08;Signature&#xff09; 五、JWT认证的工作流程六、代码举…

Matplotlib 多个子图使用一个图例

1 所有子图的图例相同 **利用函数fig.axe.get_legend_handles_labels()得到图的line和label import matplotlib.pyplot as pltfig plt.figure() axes fig.subplots(nrows2, ncols2)for ax in fig.axes:ax.plot([0, 10], [0, 10], labellinear) # 使用最后一个子图的图例 li…

5V升压到12V2A芯片方案

5V升压到12V2A芯片方案&#xff0c;采用了一款2.7V-18V输入&#xff0c;4.5V-18V输出的峰值10A同步升压芯片&#xff0c;内置了MOS&#xff0c;封装为QFN13。 在电子设备中&#xff0c;经常会遇到需要将低电压提升到较高电压的情况。例如&#xff0c;对于一些需要12V电压供电的…

CAD转kml插件acad2kml分享下载

KML&#xff08;Keyhole Markup Language&#xff09;是一种用于描述地理数据的格式&#xff0c;它由Google公司开发并在2008年成为开放标准。KML使用XML语法&#xff0c;可以用于表示地理点、线、多边形、图像覆盖物以及相关属性信息。 KML是一种用于描述地理数据的开放格式&…

多维时序 | MATLAB实现CNN-BiGRU-Attention多变量时间序列预测

多维时序 | MATLAB实现CNN-BiGRU-Attention多变量时间序列预测 目录 多维时序 | MATLAB实现CNN-BiGRU-Attention多变量时间序列预测预测效果基本介绍模型描述程序设计参考资料 预测效果 基本介绍 MATLAB实现CNN-BiGRU-Attention多变量时间序列预测&#xff0c;CNN-BiGRU-Attent…

如何高效解决“字符串相乘“问题?

&#x1f388;个人主页:&#x1f388; :✨✨✨初阶牛✨✨✨ >&#x1f43b;推荐专栏1: &#x1f354;&#x1f35f;&#x1f32f;C语言初阶 &#x1f43b;推荐专栏2: &#x1f354;&#x1f35f;&#x1f32f;C语言进阶 &#x1f511;个人信条: &#x1f335;知行合一 金句分…

rv1126设置静态ip

开发板配网--------------------------------------------------------------------------------------------- 刚拿到的开发板里面的网络配置大多不可用&#xff0c;此时是无法ping通的&#xff0c;这个时候需要重新修改相关的配置文件&#xff1b; Vi /etc/profile 最后面…

如何将苹果彻底删除视频找回?试试这3种方法

如今是短视频时代&#xff0c;大家通常会使用苹果手机来拍摄视频&#xff0c;以此记录生活中的美好日常。但是大家都知道视频是十分占空间的&#xff0c;这也经常会出现iPhone内存不足&#xff0c;磁盘崩溃的问题。 当遇到iPhone内存不足的情况时&#xff0c;大家往往会选择清…

Failed to execute goal org.apache.maven.plugins

原因&#xff1a; 这个文件D:\java\maven\com\ruoyi\pg-student\maven-metadata-local.xml出了问题 解决&#xff1a; 最简单的直接删除D:\java\maven\com\ruoyi\pg-student\maven-metadata-local.xml重新打包 或者把D:\java\maven\com\ruoyi\pg-student这个目录下所有文件…

【QPSK信号生成】生成正交相移键控信号研究(Matlab代码实现)

&#x1f4a5;&#x1f4a5;&#x1f49e;&#x1f49e;欢迎来到本博客❤️❤️&#x1f4a5;&#x1f4a5; &#x1f3c6;博主优势&#xff1a;&#x1f31e;&#x1f31e;&#x1f31e;博客内容尽量做到思维缜密&#xff0c;逻辑清晰&#xff0c;为了方便读者。 ⛳️座右铭&a…

闪马智能又上榜!

近日&#xff0c;上海市经济和信息化委员会公布了2023年度上半年&#xff08;第30批&#xff09;市级企业技术中心拟认定企业名单。凭借在技术创新方面的突出成就&#xff0c;闪马智能上榜其中。 本次认定由上海市经济和信息化委员会组织开展&#xff0c;综合企业的地位和作用、…

Kubernetes Service 工作原理

本文介绍了 Kubernetes Service 的概念、原理和具体使用。 作者&#xff1a;沈亚军 爱可生研发团队成员&#xff0c;负责公司 DMP 产品的后端开发&#xff0c;爱好太广&#xff0c;三天三夜都说不完&#xff0c;低调低调… 本文来源&#xff1a;原创投稿 爱可生开源社区出品&am…

MAUI+Blazor 如何开启浏览器调试工具

文章目录 前言如何开启调试模式输入快捷键打开浏览器有什么意义&#xff1f; 前言 MAUIBlazor其实就是浏览器套壳&#xff0c;我觉得很有意义&#xff0c;因为现在性能已经不是主要的限制了&#xff0c;很多时候讲究的快速开发。而且MAUIBlazor跨平台的未来感觉实在是太香了。…

基于Gradio的GPT聊天程序

网上很多别人写的&#xff0c;要用账号也不放心。就自己写了一个基于gradio的聊天界面&#xff0c;部署后可以本地运行。 特点&#xff1a; 可以用openai的&#xff0c;也可以用api2d&#xff0c;其他api可以自己测试一下。使用了langchain的库 可以更改模型&#xff0c;会的…

Semantic Kernel 入门系列: Planner 规划器

Semantic Kernel 的一个核心能力就是实现“目标导向”的AI应用。 目标导向 “目标导向”听起来是一个比较高大的词&#xff0c;但是却是实际生活中我们处理问题的基本方法和原则。 顾名思义&#xff0c;这种方法的核心就是先确定目标&#xff0c;然后再寻找实现目标的方法和…

基于R做宏基因组结果的PCoA分析

写在前面 因为公司给的PCA结果效果不佳&#xff0c;决定从中重新挑选部分样本进行再分析 步骤 表格结果预处理 在属水平genus参考原本结果已有的PCA图&#xff0c;尽可能挑选距离较远且聚团的样本 选取不同样本属水平的丰度数据&#xff0c;整理成逗号分隔的csv文件 代码…