: jank : : 3847 : 2019-06-30 17:28 linux
nginx + etcd + upsync module 实现七层动态负载均衡(无重启)
一、提前安装etcd
二、下载upsync 模块
> cd /usr/local/src
> git clone https://github.com/weibocom/nginx-upsync-module.git
三、编译安装nginx
下载: > wget http://nginx.org/download/nginx-1.16.0.tar.gz
安装: > tar -zxvf nginx-1.16.0.tar.gz
> cd nginx-1.16.0
> ./configure --prefix=/usr/local/nginx --add-dynamic-module=../nginx-upsync-module
> make && make install
nginx 编译安装完后,有目录/usr/local/nginx,且 在 /usr/local/nginx/modules/ 下有一个so文件:ngx_http_upsync_module.so
四、配置nginx
> cd /usr/local/nginx
> vim conf/nginx.conf
输入如下配置信息:
user jank; worker_processes 1; #启动进程,和cpu数相等 load_module /usr/local/nginx/modules/ngx_http_upsync_module.so; #引入unsync 模块 error_log logs/error.log debug; pid logs/nginx.pid; events { worker_connections 1024; #最大并发连接数 } http { include mime.types; default_type application/octet-stream; sendfile on; upstream etcd { upsync 127.0.0.1:2379/v2/keys/upstreams/pool upsync_timeout=6m upsync_interval=500ms upsync_type=etcd strong_dependency=off; upsync_dump_path /usr/local/nginx/conf/server_list.conf; include /usr/local/nginx/conf/server_list.conf; } server { listen 8090; location /v1 { proxy_pass http://etcd; } #show all upstream location /upstream_show { upstream_show; } } }
在conf 下 创建一个server_list.conf 文件,并记录一条upstream配置信息,以备初次启动nginx时使用/nginx 配置动态更新时会刷新该配置信息
server 127.0.0.1:8081 weight=1 max_fails=2 fail_timeout=10s;
测试:
1.往etcd 中put 几条信息,由于 upsync 目前支持etcd v2版 http 接口,则调用如下所示:
curl -X PUT http://localhost:2379/v2/keys/upstreams/pool/127.0.0.1:8081 -d value='{"weight":1, "max_fails":2, "fail_timeout":10}'
curl -X PUT http://localhost:2379/v2/keys/upstreams/pool/127.0.0.1:8082 -d value='{"weight":1, "max_fails":2, "fail_timeout":10}'
curl -X PUT http://localhost:2379/v2/keys/upstreams/pool/127.0.0.1:8083 -d value='{"weight":1, "max_fails":2, "fail_timeout":10}'
2. 访问 localhost/upstream_show 展示如下,同时server_list.conf 中也将出现三条配置信息
,说明配置成功
Upstream name: etcd; Backend server count: 3 server 127.0.0.1:8081 weight=1 max_fails=2 fail_timeout=10s; server 127.0.0.1:8082 weight=1 max_fails=2 fail_timeout=10s; server 127.0.0.1:8083 weight=1 max_fails=2 fail_timeout=10s;
至此整个配置过程完成。