在已安装的openresty上添加安装upstream模块报错的解决以及使用Consul服务发现时定时变更nginx的upstream的shell脚本

一、在已经安装好的openresty环境上添加安装upstream模块报错:

        在已经安装好的openresty环境上添加安装upstream模块报错:http upstream check module can not find any check server, make sure you ve added the check 的问题解决。

        服务器上已经安装好了openresty,并已搭建好了负载均衡的环境,但配置完后想查看后端的服务器的情况列表,发现没有好用的东西,之前一直使用nginx_upstream_check_module模块,非常好用: nginx模块nginx_upstream_check_module可检查后端服务器的健康情况及nginx安装时报错:Embed is required问题_checking for lua library ... not found-CSDN博客但又不能重装nginx,不然覆盖了我已经搭建好的这套环境,
    方法其实也很简单:就是安装的时候只要执行make不要执行make install。只需要在make编译完成之后将编译好的nginx二进制文件替换现在在用的nginx文件即可。当然要注意的是重新configure时要通过nginx -V将原来安装时的参数都带上。具体执行如下:

root@user19:/data01# cd /data01/downloads/; wget https://github.com/yaoweibin/nginx_upstream_check_module/archive/v0.3.0.tar.gz
root@user19:/data01/downloads# mv v0.3.0.tar.gz nginx_upstream_check_module.0.3.0.tar.gz
root@user19:/data01/downloads# tar zxvf nginx_upstream_check_module.0.3.0.tar.gz
#add-module添加已经准备好的第三方模块
root@user19:/data01/downloads# ./configure \
--user=www-data \
--group=www-data \
--prefix=/data01/openresty \
--with-pcre \
--with-luajit \
--with-poll_module \
--with-http_ssl_module \
--with-http_perl_module \
--with-http_stub_status_module \
--with-http_gzip_static_module \
--with-http_auth_request_module \
--add-module=/data01/downloads/nginx_upstream_check_module-0.3.0
root@user19:/data01/downloads# make
#make安装完之后,build/nginx-1.15.8/objs/目录下的nginx文件即是我们要用的文件
root@user19:/data01/downloads/openresty-1.15.8.2# ls -l  build/nginx-1.15.8/objs/
total 14280
drwxr-xr-x 5 root root     4096 Nov  7 11:36 addon
-rw-r--r-- 1 root root    20433 Nov  7 11:36 autoconf.err
-rw-r--r-- 1 root root   128121 Nov  7 11:36 Makefile
-rwxr-xr-x 1 root root 14358888 Nov  7 11:38 nginx
-rw-r--r-- 1 root root     5361 Nov  7 11:38 nginx.8
-rw-r--r-- 1 root root     9682 Nov  7 11:36 ngx_auto_config.h
-rw-r--r-- 1 root root      657 Nov  7 11:36 ngx_auto_headers.h
-rw-r--r-- 1 root root    10822 Nov  7 11:36 ngx_modules.c
-rw-r--r-- 1 root root    62448 Nov  7 11:38 ngx_modules.o
drwxr-xr-x 9 root root     4096 Nov  7 11:36 src
root@user19:/data01/downloads/openresty-1.15.8.2# mv /data01/nginx/sbin/nginx /data01/nginx/sbin/nginx_old
root@user19:/data01/downloads/openresty-1.15.8.2# cp build/nginx-1.15.8/objs/nginx /data01/nginx/sbin/nginx

    add-module添加已经准备好的第三方模块,make安装完之后,build/nginx-1.15.8/objs/目录下的nginx文件即是我们要用的文件,可以再使用nginx -V查看是否已经安装好需要的模块,替换nginx文件后杀掉nginx重启之后即可。

    重启后访问发现报错:

http upstream check module can not find any check server, make sure you've added the check root@user19, client: 102.95.21.113, server: test.kermit.com, request: "GET /tmu_upstream_status HTTP/1.1", host:

        找到原因是 Nginx_upstream_check_module doesn’t work with nginx > 1.7.6。相关文章

https://www.ruby-forum.com/t/nginx-upstream-check-module-doesnt-work-with-nginx-1-7-6/241918

        也许有其它的办法的,比如这里有说过一些

https://github.com/yaoweibin/nginx_upstream_check_module/issues/77

        我也没有尝试,我这里也不着急解决,就先这样吧。

        不过最后在这个网址里看到好像有解决办法了:

http://mailman.nginx.org/pipermail/nginx/2012-September/035375.html

文章链接, 到了github上的一个patch修复链接

https://github.com/yaoweibin/nginx_upstream_check_module

        里面包含了对各个nginx版本做的处理比如:check_1.16.1+.patch,不过我用的是nginx1.17,我重新下载了这份文件安装,但是依然没有成功。或者需要等待1.17的patch吧。

二、使用Consul服务发现时定时变更nginx的upstream的shell脚本 

    这几年随着微服务架构的盛行,同时为了防止硬编码、容灾、水平扩缩容、提高运维效率等,后端服务越来越流行使用服务发现。

    什么是服务发现?服务发现是微服务框架体系中的一个重要模块。微服务化后,客户端需要调用服务端的模块更多,以前基本都是在配置文件中直接写IP地址,或者配置在数据库中。微服务化后就会出现难以维护的问题,因为服务的变化更多更频繁,麻烦!这时服务发现就来了,你只要向服务端说你要什么服务,然后服务器端给你返回一堆的IP地址和端口,调用这些地址就可以给你提供服务了。如下图:

    做服务发现的框架常用的有zookeeper,eureka,etcd,consul。其中有不少公司使用consul,consul是一个分布式的、高可用、横向扩展的提供服务发现的工具,可以通过DNS或HTTP接口提供服务注册和服务发现。架设起consul服务后只需要一个curl命令就可以列出后端的各个IP地址和端口,提取出这些IP端口更新到nginx的upstream后端IP中重启nginx即可。今天这里列出的就是这么一个shell代码,如下:

u07@t133:/opt/modules/nginx/sbin$ cat consul.sh 
#!/bin/bash
nowtime=`date +"%Y-%m-%d %H:%M:%S"`
path='/opt/modules/nginx/conf/vhosts/'
file='04007.com.conf'
sd lookup video.conapi | awk '{print "server "$1":"$2" weight=100;"}' > server.conf.new
linenum=`wc -l server.conf.new | awk '{print $1}'`
diff server.conf server.conf.new #> /dev/null
if [ $? == 0 ]; thenecho $nowtime":no need change" 
elseif [ $linenum -lt 50 ]; thenecho -n $nowtime":invalid data. linenum:"$linenumelseecho -n $nowtime":need change"cp -f $path$file $path$file.baksed '/server-list/r server.conf' $path$file.template > $path$file/opt/modules/nginx/sbin/nginx -t >/dev/null 2>&1if [ $? == 0 ]; then/opt/modules/nginx/sbin/nginx -s reload#rm -f server.conf#mv server.conf.new server.confecho -e "--reload nginx success.\n"echo ''elseecho -e "--nginx config error, give up.\n"fifi
fi
#将任务加到定时任务中去
u07@t133:/$ crontab -l
*/1 * * * * cd /opt/modules/nginx/sbin; ./consul.sh >> /opt/modules/nginx/logs/consul.log

    不过这种方法不是什么高大上的方法,不过在我这里够用了吧。资源足够可以使用dns动态解析,upstream直接配置成域名,通过内部DNS解析随时变换后端的服务IP地址,还有一个比较经济有效的方法,就是改造nginx,比如安装一些如dyups动态upstream的模块来实现。我这里暂时就不去尝试了。

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

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

相关文章

idea中java及java web项目的常见问题

1、乱码问题,主要有几处地方,需要检查。 ①确保文件编码,其实主要就是在idea启动文件中,增加了 -Dfile.encodingUTF-8的设置 ②编辑器默认编码,都改为UTF-8 ③Tomcat的运行配置,编码也改为UTF-8,同样使用…

SpringBoot3核心特性-核心原理

目录 传送门前言一、事件和监听器1、生命周期监听2、事件触发时机 二、自动配置原理1、入门理解1.1、自动配置流程1.2、SPI机制1.3、功能开关 2、进阶理解2.1、 SpringBootApplication2.2、 完整启动加载流程 三、自定义starter1、业务代码2、基本抽取3、使用EnableXxx机制4、完…

zynq的PS端mac与RTL8211F的连接要点

目录 1 VCCO_MIO12 PS_MIO_VREF3 PS的引脚4 RXDLY TXDLY5 ZYNQ的MAC可以调整延时吗 1 VCCO_MIO1 接1.8V 2 PS_MIO_VREF 接0.9V,可通过电阻分压 可通过电阻分压 3 PS的引脚 4 RXDLY TXDLY RXDLY RXD[0] TXDLY RXD[1] 与XC7Z020的PS端MAC连接,必须…

CVE-2024-2389 未经身份验证的命令注入

什么是 Progress Flowmon? Progress Flowmon 是一种网络监控和分析工具,可提供对网络流量、性能和安全性的全面洞察。Flowmon 将 Nette PHP 框架用于其 Web 应用程序。 未经身份验证的路由 我们开始在“AllowedModulesDecider.php”文件中枚举未经身份验证的端点,这是一个描…

1.pytest基础知识(默认的测试用例的规则以及基础应用)

一、pytest单元测试框架 1)什么是单元测试框架 单元测试是指再软件开发当中,针对软件的最小单位(函数,方法)进行正确性的检查测试。 2)单元测试框架 java:junit和testing python:un…

arcgisPro地理配准

1、添加图像 2、在【影像】选项卡中,点击【地理配准】 3、 点击添加控制点 4、选择影像左上角格点,然后右击填入目标点的投影坐标 5、依次输入四个格角点的坐标 6、点击【变换】按钮,选择【一阶多项式(仿射)】变换 7…

基于SpringBoot+定时任务实现地图上绘制车辆实时运动轨迹图

目录 1. 项目结构 2. Maven依赖配置 (pom.xml) 3. 实现后端服务 4. 配置文件 (application.properties) 5. 启动项目 6. 访问页面 实现基于北斗卫星的车辆定位和轨迹图的Maven工程(使用模拟数据),我们将使用以下技术: Spri…

使用c#制作一个小型桌面程序

封装dll 首先使用visual stdio 创建Dll新项目,然后属性管理器导入自己的工程属性表(如果没有可以参考visual stdio 如何配置opencv等其他环境) 创建完成后 系统会自动生成一些文件,其中 pch.cpp 先不要修改,pch.h中先导入自己需…

蓝牙模块—BLE-CC41-A

1. 蓝牙的特点 蓝牙模块采用的 TI 公司设计的 CC2541芯片,主要面向低功耗蓝牙通信方案,该模块的工作频段为 2.4Ghz,这个频段属于国际通用频段 注意:蓝牙集成了一个状态指示灯,LED灯如果均匀慢速闪烁,就表示…

【渗透测试】-vulnhub源码框架漏洞-Os-hackNos-1

vulnhub源码框架漏洞中的CVE-2018-7600-Drupal 7.57 文章目录  前言 1.靶场搭建: 2.信息搜集: 主机探测: 端口扫描: 目录扫描: 3.分析: 4.步骤: 1.下载CVE-2018-7600的exp 2.执行exp: 3.写入木…

Docker安装rabbitmq并配置延迟队列

下载rabbitmq镜像 docker pull rabbitmq:management 运行rabbitmq镜像 docker run -id --namerabbitmq -p 5671:5671 -p 5672:5672 -p 4369:4369 -p 15671:15671 -p 15672:15672 -p 25672:25672 -e RABBITMQ_DEFAULT_USERtom -e RABBITMQ_DEFAULT_PASStom rabbitmq:management …

idea上传jar包到nexus

注意&#xff1a;确保idea中项目为maven项目&#xff0c;并且在nexus中已经创建了maven私服。 1、配置pom.xml中推送代码配置 <distributionManagement> <repository> <id>releases</id> <url>http://127.0.0.1:8001/repository/myRelease/<…

Mybatis自定义TypeHandler,直接存储枚举类对象

在这篇文章中&#xff0c;我们已经知道如何使用枚举类直接接受前端的数字类型参数&#xff0c;省去了麻烦的转换。如果数据库需要保存枚举类的code&#xff0c;一般做法也是代码中手动转换&#xff0c;那么能不能通过某种机制&#xff0c;省去转换&#xff0c;达到代码中直接保…

【Unity-UGUI组件拓展】| Image 组件拓展,支持FIlled和Slice功能并存

🎬【Unity-UGUI组件拓展】| Image 组件拓展,支持FIlled和Slice功能并存一、组件介绍二、组件拓展方法三、完整代码💯总结🎬 博客主页:https://xiaoy.blog.csdn.net 🎥 本文由 呆呆敲代码的小Y 原创,首发于 CSDN🙉 🎄 学习专栏推荐:Unity系统学习专栏 🌲 游戏…

博睿谷IT认证-订阅试学习

在这个信息爆炸的时代&#xff0c;拥有一张IT认证证书&#xff0c;就像拿到了职场晋升的通行证。博睿谷&#xff0c;作为IT认证培训的佼佼者&#xff0c;帮你轻松拿下华为、Oracle等热门认证。下面&#xff0c;让我们一起看看博睿谷如何助你一臂之力。 学习时间&#xff0c;你说…

将阮一峰老师的《ES6入门教程》的源码拷贝本地运行和发布

你好同学&#xff0c;我是沐爸&#xff0c;欢迎点赞、收藏、评论和关注。 阮一峰老师的《ES6入门教程》应该是很多同学学习 ES6 知识的重要参考吧&#xff0c;应该也有很多同学在看该文档的时候&#xff0c;想知道这个教程的前端源码是怎么实现的&#xff0c;也可能有同学下载…

移动技术开发:ListView水果列表

1 实验名称 ListView水果列表 2 实验目的 掌握自定义ListView控件的实现方法 3 实验源代码 布局文件代码&#xff1a; activity_main.xml: <?xml version"1.0" encoding"utf-8"?> <LinearLayout xmlns:android"http://schemas.androi…

远程连接MySQL并操作

配置MySQL开发环境 如果你使用的是基于Debian的系统&#xff08;如Ubuntu&#xff09;&#xff0c;可以在终端通过如下步骤安装MySQL开发包。 更新软件包列表 运行以下命令以确保你拥有最新的软件包列表。 sudo apt-get update安装libmysqlclient-dev开发包 执行以下命令以…

【Java注解】

Java注解&#xff08;Annotation&#xff09;让其他程序根据注解信息来决定怎么执行该程序。 是Java 5中引入的一种特殊类型的注释&#xff0c;它可以被用来为代码添加元数据&#xff0c;即关于代码的数据。 注解不会改变程序的逻辑&#xff0c;但它们可以被其他程序使用&…

Datawhale X 南瓜书 task02学习笔记

算法原理引入 样本点通常应该在模型的2侧&#xff0c;原因&#xff1a;在实际中&#xff0c;因为某种不可控的因素&#xff0c;测出来的样本点肯定是有误差的。如果样本数据点都在模型上&#xff0c;则说明在建立模型时&#xff0c;把误差也考虑进去了&#xff0c;这就是我们说…