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

news2024/9/28 16:45:54

一、在已经安装好的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 ]; then
    echo $nowtime":no need change" 
else
    if [ $linenum -lt 50 ]; then
        echo -n $nowtime":invalid data. linenum:"$linenum
    else
        echo -n $nowtime":need change"
        cp -f $path$file $path$file.bak
        sed '/server-list/r server.conf' $path$file.template > $path$file
        /opt/modules/nginx/sbin/nginx -t >/dev/null 2>&1
        if [ $? == 0 ]; then
            /opt/modules/nginx/sbin/nginx -s reload
            #rm -f server.conf
            #mv server.conf.new server.conf
            echo -e "--reload nginx success.\n"
            echo ''
        else
            echo -e "--nginx config error, give up.\n"
        fi
    fi
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.coloradmin.cn/o/2174121.html

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

相关文章

Unity3D入门(四) : Android和Unity3D交互 - Unity调用Android

1. 前言 上篇文章,我们讲了如何通过Android调用Unity3D。这篇文章,我们来讲一下Unity3D怎么调用Android。 1.1 unity和Android的三种通信方式 Unity官方提供的接口 : 有一个弊端,它有一个传输内容量的一个限制,传输内容过大或过…

详解JavaScript中的数组

第7章 数组 JavaScript数组索引基于32位数值,以0开头,最大索引2^32-2,最大容纳4294967295,大约42亿个。 JavaScript数组是动态的,根据需要增长或缩减,可能是稀疏的,有length属性。 用数字索引…

Linux下的驱动开发一

设备驱动 设备驱动程序(Device Driver)是操作系统中的一种软件组件,负责管理和控制计算机硬件设备的工作。驱动程序通过提供操作系统和硬件设备之间的接口,使得操作系统和应用程序能够与硬件设备进行交互,而无需了解硬…

【智能大数据分析 | 实验二】Spark实验:部署Spark集群

【作者主页】Francek Chen 【专栏介绍】 ⌈ ⌈ ⌈智能大数据分析 ⌋ ⌋ ⌋ 智能大数据分析是指利用先进的技术和算法对大规模数据进行深入分析和挖掘,以提取有价值的信息和洞察。它结合了大数据技术、人工智能(AI)、机器学习(ML&a…

网易云多久更新一次ip属地

‌在数字化时代,网络成为了我们日常生活中不可或缺的一部分。无论是社交娱乐还是工作学习,IP地址作为网络身份的象征,都扮演着重要的角色。对于网易云音乐这样的热门应用来说,IP属地的显示不仅关乎用户体验,也涉及用户…

Supervisor进程管理工具安装

Supervisor进程管理工具安装 一、Supervisor概况及作用1.概况2.主要作用1)、进程管理(1). 启动与停止进程(2). 自动重启进程(3). 进程状态监控 2)、日志管理(1).集中化日志记录 3)、资源管理与优化(1). 控制进程资源使用 二.安装 Supervisor1…

小白学大模型RAG:十大步骤分析GraphRAG的工作原理

对于普通的RAG,也就是前面课程讲的RAG,它的原理是通过将文本进行切分和向量化,通过计算文本之间的向量相似度,从而得到两个文本之间的语义相似度,从知识库中找出跟问题语义相似的知识点,再送给LLM得出最终答…

学习Java (五)

1.学习封装 package com.msb.test07; //封装 public class Girl {private int age; // 赋值public void setAge(int age){if(age > 30){this.age 18;}else{this.age age;}} // 读取public int getAge(){return age;} }package com.msb.test07;public class Test {p…

【Linux 报错】“make: ‘xxxx‘ is up to date.” 解决办法

一、报错原因 我们使用 make 命令,想要将 text.c 文件编译形成 可执行文件 text 时,报错如下 make: test is up to date. 中文含义:test 文件已经达到最新状态 意思是: test.c 文件里面的 所有源代码都没有修改过,你…

c++11~c++20 numeric_limits

在c中应该尽量少使用宏&#xff0c;用模板取而代之是明知的选择。我们可以使用numeric_limits来获取最大值和最小值&#xff0c;例如 #include <iostream> #include <limits> #include <iostream> using namespace std;int main() {cout << "int…

Go基础学习04-变量重声明;类型转换;类型断言;Unicode代码点;类型别名;潜在类型

目录 变量重声明 类型断言 类型转换 类型转换注意事项 Unicode代码点 类型别名、潜在类型 类型别名的意义 变量重声明 编写代码&#xff1a; package mainimport "fmt"var container []string{"Beijing", "Shanghai"}func main() {fmt.Pr…

Qt开发技巧(八)自带对话框的美化,内置快捷代码段,巧用匿名槽函数,另类动态换肤,资源动态加载

继续讲一些Qt开发中的技巧操作&#xff1a; 1.自带对话框的美化 Qt中有一些自带的对话框&#xff0c;比如文件选择对话框&#xff0c;颜色选择对话框等等&#xff0c;这些对话框看着跟系统的对话框没太大差别&#xff0c;实际这是Qt有意为之&#xff0c;为的是跟系统保持一致。…

欺诈文本分类检测(十七):支持分类原因训练

1. 引言 前文数据校正与增强进行了数据增强&#xff0c;本文将使用增强后的数据对模型进行进一步训练&#xff0c;以便得到能同时预测出分类标签、欺诈者、分类原因多个信息的模型。 为此&#xff0c;我们需要对整个训练过程进行调整&#xff0c;包括&#xff1a; 交叉训练逻…

苹果端侧AI布局深度分析

苹果 - 国际巨头的端侧 AI布局 深度分析 1.1.1 苹果AI&#xff1a;模型侧&#xff1a;MM1 3月&#xff0c;苹果发布多模态大模型MM1&#xff0c;拥有高达300亿参数。MM1融合密集模型与MoE变体&#xff0c;涵盖300亿、70亿、30亿参数版。MM1预训练指标领先&#xff0c;在多个多…

ubuntu 安装k8s

#关闭 Swap 内存&#xff0c;配置完成建议重启一下 nano /etc/fstab #注释下面相似的一行 #/swapfile none swap sw 0 0 #重启 reboot#部属k8s apt update && apt install -y apt-transport-https 下载 gpg 密钥 curl https://mi…

基于SpringBoot+Vue的高校实习管理系统

作者&#xff1a;计算机学姐 开发技术&#xff1a;SpringBoot、SSM、Vue、MySQL、JSP、ElementUI、Python、小程序等&#xff0c;“文末源码”。 专栏推荐&#xff1a;前后端分离项目源码、SpringBoot项目源码、Vue项目源码、SSM项目源码 精品专栏&#xff1a;Java精选实战项目…

一次眼睛受损然后恢复的过程

由于多年没有社交比较宅,多年长期盯着电脑和手机,没有保护好眼睛 之前早上醒来有一段时间我眼睛老是分泌各种乱起八遭的东西,导致我眼睛看不清, 2023年3月有天的早上,我又不小心眼睛揉出血了,出门上班路上的时候才知道有这个问题,第二天早上就挂了去了眼科,医生给我开了如下的药…

单细胞转录组|scATAC-seq 数据整合

引言 本文在此展示了如何将多个源自人类外周血单核细胞的单细胞染色质数据集进行整合。其中一个数据集是通过10x Genomics的多组学技术获得的&#xff0c;它涵盖了每个细胞的DNA可及性和基因表达数据。另一个数据集则是通过10x Genomics的单细胞ATAC测序(scATAC-seq)技术得到的…

Mybatis-Plus自动填充时间的配置类

引言&#xff1a;在现代软件开发中&#xff0c;数据库操作是不可或缺的一部分。为了确保数据的准确性和完整性&#xff0c;我们常常需要在数据库记录中添加时间戳&#xff0c;例如创建时间和更新时间。MyBatis-Plus作为一个流行的持久层框架&#xff0c;提供了灵活的机制来实现…

官方权威解读|CNAS-CL01计量溯源性部分解读,供CNAS软件测试实验室参考

CNAS-CL01《检测和校准实验室能力认可准则》是软件测试实验室申请CNAS资质&#xff0c;建设符合CNAS要求的实验室质量管理体系时必须要参考的一部强制性准则。CNAS-CL01一共分为五大核心部分&#xff1a;通用要求、结构要求、资源要求、过程要求和管理体系要求。前面的文章中我…