debian nginx upsync consul 实现动态负载

1. consul 安装

wget -O- https://apt.releases.hashicorp.com/gpg | sudo gpg --dearmor -o /usr/share/keyrings/hashicorp-archive-keyring.gpg
echo "deb [signed-by=/usr/share/keyrings/hashicorp-archive-keyring.gpg] https://apt.releases.hashicorp.com $(lsb_release -cs) main" | sudo tee /etc/apt/sources.list.d/hashicorp.list
sudo apt update && sudo apt install consul

使用以上命令可直接安装consul。

网上找好了好多方法都安装不了,该方法在consul官网上找到

1.1. 测试consul

nohup consul agent -server -bootstrap-expect 1 -data-dir /data/consul -node=ali_1 -ui -client=0.0.0.0 -bind=0.0.0.0 &

执行代码运行consul,参数说明如下,

nohup consul agent -dev -ui -node=consul-dev -client=xxx.xxx.xxx.xx &用来启动Consul代理,命令各部分的含义如下:

nohup: 当用户退出终端时,使用nohup启动的程序仍会继续在后台运行。
consul agent: 启动Consul的代理进程,它是Consul服务的核心组件,负责服务发现、健康检查以及集群内部的通信和管理。
-dev: 标志表明 Consul 代理将以开发者模式启动。在该模式下,Consul将会在单节点内创建一个完整的Consul集群,数据存储在内存中,重启后数据将丢失,适用于快速测试和开发环境。
-ui: 开启内置的Web用户界面,这样可以通过浏览器访问Consul提供的管理界面,默认监听在本地8500端口的 /ui 路径下。
-node=consul-dev: 设置当前Consul代理节点的名称为consul-dev,用于标识集群中的唯一节点。
-client=xxx.xxx.xxx.xxx: 指定Consul代理监听客户端请求的IP地址为xxx.xxx.xxx.xxx,这意味着其他服务或者工具需要通过这个IP地址与Consul代理进行交互,比如注册服务、查询服务等。
&: 在命令末尾加上&符号表示让命令在后台运行,即以守护进程的方式启动Consul代理,不会阻塞

注意,需要重新开个终端验证

检测防火墙开放8500端口(本人这里使用阿里云,只需要云后台配置即可,网友可以自已百度)

使用以下命令测试服务是否有返回

curl http://ip:8500/v1/catalog/nodes

正常情况下有如下退回

2. 编释及安装nginx

nginx-upsync 是一个开源的 Nginx 扩展模块,用于实现动态的负载均衡和自动发现后端服务器。该模块的源码和相关文件可以在以下 GitHub 地址找到:https://github.com/weibocom/nginx-upsync。

2.1 下载nginx-upsync        

wget https://github.com/weibocom/nginx-upsync-module/archive/v2.1.0.tar.gz
tar -zxvf v2.1.0.tar.gz

下载upsync并解压到当前目录

2.2 下载nginx源码

wget http://nginx.org/download/nginx-1.20.1.tar.gz
tar -zxvf nginx-1.20.1.tar.gz

从nginx官网下载nginx源码并解压

2.3 安装编释所属的依赖

sudo apt update
sudo apt install build-essential libpcre3 libpcre3-dev zlib1g zlib1g-dev libssl-dev
 

2.4 配置nginx编释环境并将upsync模块增加到配置中

# 配置编译选项,添加nginx-upsync-module
./configure --add-module=/path/to/nginx-upsync-module

2.5 编译并安装 Nginx
 

make
sudo make install

安装完成后,nginx默认安装位置是 /usr/local/nginx

3. 测试站点

3.1 配置2个测试站点

分别创建两个目录(/var/www/web1,/var/www/web2)并在目录里放入index.html文件
文件内容可以自已定义,只要能区分是那个站即可,以下是本人的文件内容

<html>
<body>
hello word 111111
<body>
</html>

另一个文件内容是222222 请自行修改

3.2 修改nginx配置


#user  nobody;
worker_processes  1;

events {
    worker_connections  1024;
}

http {
    include       mime.types;
    default_type  application/octet-stream;

    sendfile        on;

    keepalive_timeout  65;

    upstream demo {
		ip_hash;
        server 192.168.100.3:80; 
        #upsync 需要获取的consul地址
		upsync 127.0.0.1:8500/v1/kv/upstreams/skuprice upsync_timeout=6m upsync_interval=500ms upsync_type=consul strong_dependency=off;
        #获取后生成的文件名
		upsync_dump_path /var/www/server/servers_skuprice.conf;
        #引用生成的配置文件
		include /var/www/server/servers_skuprice.conf;
    }

    server {
        listen       8081;
        location / {
            proxy_pass         http://demo ; 
        }

    }

    server {
        listen       8000;
        root /var/www/web1;
		index index.php;
		location / {
			try_files $uri $uri/ /index.php?$args;
		}
		location ~ \.php$ {
			include fastcgi.conf;
			fastcgi_pass unix:/run/php/php8.2-fpm.sock;
			fastcgi_buffers 16 16k;
			fastcgi_buffer_size 32k;
		}
    }
	server {
        listen       8001;

        root /var/www/web2;
		index index.php;
		location / {
			try_files $uri $uri/ /index.php?$args;
		}
		location ~ \.php$ {
			include fastcgi.conf;
			fastcgi_pass unix:/run/php/php8.2-fpm.sock;
			fastcgi_buffers 16 16k;
			fastcgi_buffer_size 32k;
		}
    }

}

配置文件中增加了2个测试站点,和一个代理站点,其中测试站点端口为:8000,8001。代理站点端口:8010。

nginx启动里会提示找不到文件 /var/www/server/servers_skuprice.conf
所以需要事先创建一个空的文件到指定的目录下

3.3 配置consul数据

curl -X PUT -d '{"weight":1, "max_fails":2, "fail_timeout":10}' http://127.0.0.1:8500/v1/kv/upstreams/skuprice/127.0.0.1:8000
curl -X PUT -d '{"weight":1, "max_fails":2, "fail_timeout":10}' http://127.0.0.1:8500/v1/kv/upstreams/skuprice/127.0.0.1:8001

使用 curl命令,初始化两个KV信息。将设置服务器权重为1

3.3 启动nginx

sudo /usr/local/nginx/sbin/nginx

3.4 测试效果

访问ip:8010站点可以看到

3.5 迁换站点:

#迁换8001
curl -X PUT -d '{"weight":1, "max_fails":2, "fail_timeout":10}' http://127.0.0.1:8500/v1/kv/upstreams/skuprice/127.0.0.1:8000
curl -X PUT -d '{"weight":100, "max_fails":2, "fail_timeout":10}' http://127.0.0.1:8500/v1/kv/upstreams/skuprice/127.0.0.1:8001

通过更新站点的重权调整访问站点。

4. 总结:

        将方案适合对有稳定要求,不方便断线更新站点非常合适,配合DevOps工具,可以做到无感更新,最对于比较旧的应用,像使用session技术的应用,可能会出现丢失登陆状态等情况。

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

微信小程序使用input标签遇到的问题

场景1&#xff1a;多个input标签切换无法聚焦问题 解决方案1&#xff1a; 在网上搜的用官方给的always-embed属性&#xff0c;但是也明确标注了只有ios可用 解决方案2&#xff1a; 使用focus属性&#xff1a;每次点击input标签都重新设置 wxml: <input adjust-position…

【YOLOv5/v7改进系列】替换激活函数为SiLU、ReLU、LeakyReLU、FReLU、PReLU、Hardswish、Mish、ELU等

一、导言 激活函数在目标检测中的作用至关重要&#xff0c;它们主要服务于以下几个关键目的&#xff1a; 引入非线性&#xff1a;神经网络的基本构建块&#xff08;如卷积层、全连接层等&#xff09;本质上是线性变换&#xff0c;而激活函数通过引入非线性&#xff0c;使得网络…

画图工具之PlantUML插件使用

文章目录 1 PlantUML插件1.1 引言1.2 什么是PlantUML1.3 PlantUML插件1.3.1 IntelliJ IDEA中插件1.3.2 VS Code中插件1.3.3 使用例子 1.4 PlantUML时序图语法1.4.1 声明参与者1.4.2 消息传递1.4.2.1 同步消息1.4.2.2 异步消息1.4.2.3 返回消息1.4.2.4 自调用 1.4.3 生命线&…

在Windows10中重命名文件和文件夹的6种方法,有你熟悉和不熟悉的

序言 你可以通过多种方式在Windows 10上重命名文件。如果每次你想更改文件名时仍右键单击并选择“重命名”,那么我们有一些技巧可以加快更改速度。 使用文件资源管理器重命名文件和文件夹 Windows 10的文件资源管理器是一个功能强大的工具。你知道吗,有四种不同的方法可以…

理解大语言模型(二)——从零开始实现GPT-2

相关说明 这篇文章的大部分内容参考自我的新书《解构大语言模型&#xff1a;从线性回归到通用人工智能》&#xff0c;欢迎有兴趣的读者多多支持。 本文涉及到的代码链接如下&#xff1a;regression2chatgpt/ch11_llm/char_gpt.ipynb1 本文将讨论如何利用PyTorch从零开始搭建G…

【Linux网络】端口及UDP

文章目录 1.再看四层2.端口号2.1引入linux端口号和进程pid的区别端口号是如何生成的传输层有了pid还设置端口号端口号划分 2.2问题2.3netstat 3.UDP协议3.0每学一个协议 都要讨论一下问题3.1UDP协议3.2谈udp/tcp实际上是在讨论什么&#xff1f; 1.再看四层 2.端口号 端口号(Po…

MyBatis-Plus介绍及Spring Boot 3集成指南

我们每个Java开发者都在使用springbootmybatis开发时&#xff0c;我们经常发现自己需要为每张数据库表单独编写XML文件&#xff0c;并且为每个表都需要编写一套增删改查的方法&#xff0c;较为繁琐。为了解决这一问题&#xff0c;MyBatis-Plus应运而生。在本文中&#xff0c;我…

【简单介绍下7-Zip,什么是7-Zip?】

&#x1f3a5;博主&#xff1a;程序员不想YY啊 &#x1f4ab;CSDN优质创作者&#xff0c;CSDN实力新星&#xff0c;CSDN博客专家 &#x1f917;点赞&#x1f388;收藏⭐再看&#x1f4ab;养成习惯 ✨希望本文对您有所裨益&#xff0c;如有不足之处&#xff0c;欢迎在评论区提出…

顶顶通实时质检系统新增一大功能:黑名单功能介绍

文章目录 前言联系我们功能介绍配置方案 前言 顶顶通实时质检系统新增黑名单一大功能。该功能可通过调用质检系统的黑名单接口&#xff0c;对被叫号码进行检测。如果被检测的号码符合所设定的拦截规则&#xff0c;就会对当前呼叫进行拦截&#xff0c;取消呼叫。 联系我们 有意…

网络拓扑—WEB-IIS服务搭建

文章目录 WEB-IIS服务搭建网络拓扑配置网络IISPC 安装IIS服务配置IIS服务&#xff08;默认站点&#xff09;PC机访问网页 配置IIS服务&#xff08;新建站点&#xff09;PC机访问网页 WEB-IIS服务搭建 网络拓扑 //交换机忽略不计 IIS服务IP&#xff1a;192.168.1.1 PC机IP&…

汇编:函数以及函数参数传递

汇编语言中的函数&#xff08;或过程&#xff09;是指一段可以被调用和执行的代码块&#xff1b;它们用于组织和重用代码&#xff0c;并使程序结构更加清晰&#xff1b;由于汇编语言没有高层次语言的语法糖&#xff0c;编写和调用函数涉及直接的堆栈操作和寄存器管理&#xff1…

基于 N-Gram 文本分类的语言检测器(附详细实现源码)

基于 N-Gram 文本分类的语言检测器 文本分类是文档处理的一项基本任务&#xff0c;可以自动处理大量的电子文档流。处理某些类别文档的一个困难是存在不同类型的文本错误&#xff0c;例如电子邮件中的拼写和语法错误&#xff0c;以及通过 OCR 处理的文档中的字符识别错误。文本…

NebulaGraph

文章目录 关于 NebulaGraph客户端支持安装 NebulaGraph关于 nGQLnGQL 可以做什么2500 条 nGQL 示例原生 nGQL 和 openCypher 的关系 Backup&Restore功能 导入导出导入工具导出工具 NebulaGraph ImporterNebulaGraph ExchangeNebulaGraph Spark ConnectorNebulaGraph Flink …

2024-5-24 石群电路-15

2024-5-24&#xff0c;星期五&#xff0c;22:15&#xff0c;天气&#xff1a;晴&#xff0c;心情&#xff1a;晴。今天最后一天上班&#xff0c;终于要放返校假啦&#xff0c;开心&#xff01;&#xff01;&#xff01;&#xff01;&#xff01;&#xff01;不过放假也不能耽误…

青少年 CTF 练习平台:Misc(一)

前言 当然&#xff0c;我可以更详细地介绍一下青少年CTF练习平台。 青少年CTF练习平台是一个专为青少年设计的网络安全竞赛和训练平台。该平台由思而听&#xff08;山东&#xff09;网络科技有限公司与克拉玛依市思而听网络科技有限公司共同建设&#xff0c;自2018年创建以来…

[笔试训练](三十二)094:素数回文095:活动安排096:合唱团

目录 094:素数回文 095:活动安排 096:合唱团 094:素数回文 题目链接:素数回文_牛客题霸_牛客网 (nowcoder.com) 题目&#xff1a; 题解&#xff1a; 模拟题&#xff1a; 1.构造回文数 2.检测是否为素数 #include <iostream> #include <string> #include <c…

8个实用网站和软件,收藏起来一定不后悔~

整理了8个日常生活中经常能用得到的网站和软件&#xff0c;收藏起来一定不会后悔~ 1.ZLibrary zh.zlibrary-be.se/这个网站收录了超千万的书籍和文章资源&#xff0c;国内外的各种电子书资源都可以在这里搜索&#xff0c;98%以上都可以在网站内找到&#xff0c;并且支持免费下…

「51媒体」广西媒体资源,南宁活动媒体邀约

传媒如春雨&#xff0c;润物细无声&#xff0c;大家好&#xff0c;我是51媒体网胡老师。 广西地区拥有丰富的媒体资源&#xff0c;在广西做活动&#xff0c;参加展览可以邀请他们到场采访报道。 央媒驻站&#xff1a;广西新华 广西人民 广西光明 广西央广 广西国际在线 广西中…

在Spring Boot项目中通过自定义注解实现多数据源以及主备数据库切换

在现代的企业应用开发中&#xff0c;使用多数据源是一个常见的需求。尤其在关键应用中&#xff0c;设置主备数据库可以提高系统的可靠性和可用性。在这篇博客中&#xff0c;我将展示如何在Spring Boot项目中通过自定义注解实现多数据源以及主备数据库切换。 在此说明&#xff…

ICLR 2024现场精彩回顾 机器学习大牛们的“踩高跷秀”嗨翻全场

会议之眼 快讯 2024年5月7-11日&#xff0c;第12届ICLR(International Conference on Learning Representations)即国际学习表征会议已经在奥地利维也纳展览中心圆满结束&#xff01;国际学习表征会议&#xff08;ICLR&#xff09;作为机器学习领域的顶级会议之一&#xff0c;…