一、简介
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