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

news/2024/11/24 12:30:33/

 

使用场景简介

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 interfacelocation /status {check_status;}# http frontlocation / {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.ppmy.cn/news/1024097.html

相关文章

OpenHarmony社区运营报告(2023年7月)

本月快讯 • 2023年7月28日-29日&#xff0c;全球软件质量&效能大会&#xff08;简称“QECon”&#xff09;圆满举行&#xff0c;OpenAtom OpenHarmony&#xff08;简称“OpenHarmony”&#xff09;以“优质高效测试助力OpenHarmony北向应用生态赋能”为主题&#xff0c;以…

10个AI绘图生成器让绘画更简单

AI不仅影响商业和医疗保健等行业&#xff0c;还在创意产业中发挥着越来越大的作用&#xff0c;开创了AI绘画生成器新时代。在绘画领域当然也是如此&#xff0c;与传统的绘画工具不同&#xff0c;AI人工智能时代的绘画工具是全自动的、智能的&#xff0c;甚至可以说是“傻瓜式”…

ATFX汇评:美7月通胀率数据基本符合预期,美指仍无法站稳103关口

ATFX汇评&#xff1a;据美劳工部&#xff0c;美国7月未季调CPI年率&#xff0c;最新值3.2&#xff0c;高于前值3%&#xff0c;低于预期值3.3%&#xff0c;这标志着连续12个月的下降已经停止&#xff1b;7月未季调核心CPI年率&#xff0c;最新值4.7%&#xff0c;低于前值4.8%&am…

R语言初学者书籍推荐

Home | Bookdown 这个网站上有很多R语言的书籍&#xff0c;并且一直在更新&#xff0c;阅读起来没有难度。 今天搜索材料的时候&#xff0c;检索到下面这本书&#xff1a; 有输入&#xff0c;才会有输出。

ChatGPT告诉你:非科班如何成功转码?

非科班如何丝滑转码&#xff1f;这是一个很常见的问题&#xff0c;也是很多人感兴趣的话题。转码的原因和目的可能因人而异&#xff0c;有的是为了追求更好的职业发展&#xff0c;有的是为了满足自己的兴趣和爱好&#xff0c;有的是为了适应时代的变化和需求。无论出于什么原因…

【福建事业单位-数学运算】01代入-倍数-方程

【福建事业单位-资料分析】01 一、代入排除法1.什么时候使用——2.怎么用例题 总结 二、倍数特性&#xff08;福建爱考&#xff09;_a余数型_b倍数型2.1余数型例题——平均分组有剩余2.2 比例型总结 3.方程法3.1 普通方程3.2 不定方程倍数特性奇偶特性尾数特性总结例题 3.3不定…

最小生成树——prim算法

prim算法详解 prim算法简介prim算法步骤prim复杂度prim样例题目公路修建题目描述输入格式输出格式样例样例输入样例输出 提示 prim样例代码 prim算法简介 P r i m Prim Prim算法是一种用于解决最小生成树问题的贪心算法。最小生成树是一个连通图的生成树&#xff0c;它的所有边…

tabBar的使用

参考Api&#xff1a;全局配置 | 微信开放文档 (qq.com) 1.使用说明 2.使用详情 3.使用案例 在全局配置的app.json中 "tabBar": {"color": "#333","selectedColor": "#d43c33","backgroundColor": "#fff&qu…