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技术的应用,可能会出现丢失登陆状态等情况。

  • 4
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值