Consul+upsync+Nginx动态配置负载均衡

一、简介

Consul+upsync+Nginx 实现无需重启Nginx的动态负载均衡

各组件作用:

Consul Web:Consul的客户端可视化界面,管理负载均衡配置的信息

Consul Server:Consul服务端,用于存放负载均衡配置

Nginx:以间隔时间动态读取ConsulServer配置

Upsync:新浪微博开源的基于Nginx实现动态配置的三方模块。Nginx-Upsync-Module的功能是拉取Consul的后端server的列表,并动态更新Nginx的路由信息。此模块不依赖于任何第三方模块。Consul作为Nginx的DB,利用Consul的KV服务,每个Nginx Work进程独立的去拉取各个upstream的配置,并更新各自的路由。

二、环境搭建

1.配置Consul服务器

1.1 下载Consul

mkdir /usr/local/consul
cd /usr/local/consul
wget https://releases.hashicorp.com/consul/1.8.4/consul_1.8.4_linux_amd64.zip

1.2 解压consul.zip

unzip consul_1.8.4_linux_amd64.zip

1.3 安装consul

./consul

1.4 验证安装是否成功

./consul version

1.5 启动consul

nohup /usr/local/consul/consul agent -server -dev -ui -node=consul-dev -client=192.8.11.25 >> /usr/local/consul/consul.log 2>&1 &

1.6 浏览器查看consul

需将8500端口加入防火墙
http://192.168.11.25:8500/ui

1.7 关闭consul

/usr/local/consul/consul leave -rpc-addr=192.168.11.25:8500

2.配置Nginx服务器

2.1 安装nginx依赖环境

yum -y install gcc gcc-c++ wget pcre pcre-devel openssl openssl-devel zlib zlib-devel unzip

2.2 下载nginx压缩包与Upsync插件压缩包

mkdir /usr/local/nginx_upsync
cd /usr/local/nginx_upsync
wget http://nginx.org/download/nginx-1.10.2.tar.gz
wget https://github.com/weibocom/nginx-upsync-module/archive/master.zip

2.3 解压nginx压缩包与Upsync插件压缩包

tar -zxvf nginx-1.10.2.tar.gz
unzip nginx-upsync-module-master.zip
注:master的解压文件一定要与nginx的解压文件在同一个目录下

2.4 创建nginx用户

groupadd nginx
useradd -g nginx -s /sbin/nologin nginx

2.5 安装Nginx

mkdir -p /var/tmp/nginx/client/
mkdir -p /usr/local/nginx
cd nginx-1.10.2
编译:
./configure --prefix=/usr/local/nginx --user=nginx --group=nginx --with-http_ssl_module --with-http_flv_module --with-http_stub_status_module --with-http_gzip_static_module --with-http_realip_module --http-client-body-temp-path=/var/tmp/nginx/client/ --http-proxy-temp-path=/var/tmp/nginx/proxy/ --http-fastcgi-temp-path=/var/tmp/nginx/fcgi/ --http-uwsgi-temp-path=/var/tmp/nginx/uwsgi --http-scgi-temp-path=/var/tmp/nginx/scgi --with-pcre --add-module=…/nginx-upsync-module-master
安装
make && make install

2.6 配置nginx.conf

cd /usr/local/nginx/conf
vi nginx.conf
具体内容:
#动态去consul 获取注册的真实反向代理地址
upstream testweb{
    #自己虚拟出的 作为监听用的 端口号 固定死的
    server 127.0.0.1:11111;
    #连接consul server动态获取upstream配置负载均衡信息 间隔0.5秒读取一次
    upsync 192.168.11.25:8500/v1/kv/upstreams/test upsync_timeout=6m upsync_interval=500ms upsync_type=consul strong_dependency=off;
    #动态拉取consulServer相关负载均衡配置信息持久化到硬盘上
    upsync_dump_path /usr/local/nginx/conf/servers/servers_test.conf;
}

server {
    listen 8000;
    server_name localhost;

    location /test {
        #配置反向代理
        proxy_pass http://testweb/test;
        index index.html index.htm;
    }
}

2.7 创建配置文件servers_test.conf

由于我们需要动态获取consulServer相关负载均衡配置信息持久化在硬盘,所以需要创建servers_test.conf,名字可以自己定义但是必须要与配置文件中的文件名称相同。
创建文件夹servers
mkdir /usr/local/nginx/conf/servers
cd /usr/local/nginx/conf/servers
创建配置文件servers_test.conf
touch servers_test.conf

2.8 启动Nginx

cd /usr/local/nginx/sbin/
启动
./nginx
检查是否启动成功
ps -ef | grep nginx

3.动态添加路由

3.1 查看已创建的服务

http://192.168.11.25:8500/ui/dc1/services

3.2 添加路由

PUT请求:http://192.168.11.25:8500/v1/kv/upstreams/test/192.168.11.3:8503

可配置参数:{“weight”:1, “max_fails”:2, “fail_timeout”:10, “down”:0}
weight:权重
max_fails:最大失败访问次数,此时如果发现后端异常,在单位周期为fail_timeout设置的时间,中达到max_fails次数,这个周期次数内,如果后端同一个节点不可用,那么接将把节点标记为不可用,并等待下一个周期(同样时常为fail_timeout)再一次去请求,判断是否连接是否成功。如果成功,将恢复之前的轮询方式,如果不可用将在下一个周期(fail_timeout)再试一次
fail_timeout:连接超时时间,单位为秒
down:0:上线 1-下线

参考:
https://blog.csdn.net/gfk3009/article/details/100111186
https://blog.csdn.net/qq_38270106/article/details/83239756

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值