nginx修改upstream不重启的方法(ngx_http_dyups_module模块)
2014-03-23 00:00
309 查看
nginx很强大,第三方模块也不少,淘宝在nginx上很活跃,特别是章亦春,他参与的模块至少10+, 好了今天主角不是他,是一款动态配置upstream的模块,这个模块使用rest接口. 简单,方便,并且可以不需要重启nginx。但是有个问题比较明显,nginx重启之后,什么都没了.
1. 安装 首先安装nginx动态upstream配置模块,如果你已经安装了nginx,那么轻参考ttlsa上的如何安装nginx第三方模块,会安装的请跳过.
2. 指令(Directives) 语法: dyups_interface 默认: none 配置段: location 启用配置upstream的接口 语法: dyups_read_msg_timeout time 默认: 1s 配置段: main 设置从共享内存中读取commands的超时时间,默认为1秒 语法: dyups_shm_zone_size size 默认: 2MB 配置段: main 设置存储commands的共享内存 This directive set the size of share memory which used to store the commands. 语法: dyups_upstream_conf path 默认: none 配置段: main 这个指令用来指定upstream配置文件的路径,他会在启动的时候加载 语法: dyups_trylock on | off 默认: off 配置段: main 是否启用锁,如果启用了它,同一时刻有人在修改,那么将会返回409.
3. restful接口 GET /detail 获取所有upstream名称以及upstream里面的servers信息 /list 获取upstream列表 /upstream/name 使用upstream名称获取upstream信息 POST /upstream/name 更新upstream body 配置内容; body server ip:port; DELETE /upstream/name 删除upstream,name相应修改 3.1 调用接口响应http状态码 500: 需要reload nginx 409: 重新调用一次接口,上个请求被锁了. 204:调用list或者detail时出现,表示没有响应内容 其他:你的命令错误,请修改 注意:你需要第三方模块来生成新的配置文件到nginx配置目录. 作者也没有说什么第三方模块,这个插件很好,不能生成配置文件,让他显得尤为不足.
4. nginx配置 备注:以下配置有安装echo模块.
5. 使用方法演示 5.1 添加upstream
6. 注意事项 本模块不能和nginx_upstream_check_module一起使用,接下来的版本会支持。或者可以使用tenengine。淘宝真是不遗余力在推广他们的tenengine.
7. 结束语 ngx_http_dyups_module带的功能我很喜欢,但是最大的不足就是不能生成配置文件,所有内容都保存在内存中,希望以后的版本能够支持。有这个模块,shell脚本也可以修改upstream,不在需要重启nginx。 转载请注明来至运维生存时间:http://www.ttlsa.com/html/3268.html
1. 安装 首先安装nginx动态upstream配置模块,如果你已经安装了nginx,那么轻参考ttlsa上的如何安装nginx第三方模块,会安装的请跳过.
# cd /usr/local/src/ # wget https://github.com/yzprofile/ngx_http_dyups_module/archive/master.zip \ -O ngx_http_dyups_module-master.zip # unzip ngx_http_dyups_module-master.zip # wget http://nginx.org/download/nginx-1.4.2.tar.gz # tar -xzvf nginx-1.4.2.tar.gz # cd nginx-1.4.2 # ./configure --prefix=/usr/local/nginx-1.4.2 --with-http_stub_status_module \--add-module=../ngx_http_dyups_module-master/ # make # make install
2. 指令(Directives) 语法: dyups_interface 默认: none 配置段: location 启用配置upstream的接口 语法: dyups_read_msg_timeout time 默认: 1s 配置段: main 设置从共享内存中读取commands的超时时间,默认为1秒 语法: dyups_shm_zone_size size 默认: 2MB 配置段: main 设置存储commands的共享内存 This directive set the size of share memory which used to store the commands. 语法: dyups_upstream_conf path 默认: none 配置段: main 这个指令用来指定upstream配置文件的路径,他会在启动的时候加载 语法: dyups_trylock on | off 默认: off 配置段: main 是否启用锁,如果启用了它,同一时刻有人在修改,那么将会返回409.
3. restful接口 GET /detail 获取所有upstream名称以及upstream里面的servers信息 /list 获取upstream列表 /upstream/name 使用upstream名称获取upstream信息 POST /upstream/name 更新upstream body 配置内容; body server ip:port; DELETE /upstream/name 删除upstream,name相应修改 3.1 调用接口响应http状态码 500: 需要reload nginx 409: 重新调用一次接口,上个请求被锁了. 204:调用list或者detail时出现,表示没有响应内容 其他:你的命令错误,请修改 注意:你需要第三方模块来生成新的配置文件到nginx配置目录. 作者也没有说什么第三方模块,这个插件很好,不能生成配置文件,让他显得尤为不足.
4. nginx配置 备注:以下配置有安装echo模块.
http { # 从upstream读取初始upstream配置 dyups_upstream_conf conf/upstream.conf; include conf/upstream.conf; # 默认主机 server { listen 80; location / { proxy_pass http://$host; } } # 动态配置upstream的接口站点 server { listen 81; location / { dyups_interface; # 这个指令表示这边是接口站点 } } # upstream后面的realserver,2台801,,82 server { listen 801; location / { echo 801; } } server { listen 802; location / { echo 802; } } }upstream.conf配置
upstream ttlsa1 { server 127.0.0.1:801; } upstream ttlsa12 { server 127.0.0.1:802; }
5. 使用方法演示 5.1 添加upstream
# curl -d "server 127.0.0.1:801;server 127.0.0.1:802;" 127.0.0.1:81/upstream/ttlsa3 success测试
# curl -H "host: ttlsa3" 127.0.0.1 801 # curl -H "host: ttlsa3" 127.0.0.1 802可以看到通过host的ttlsa3可以访问到upstream配置的两台服务器。如果你发现curl几次都是一样的,那么轻多试几次。 5.2 查看upstream详细信息
# curl 127.0.0.1:81/detail ttlsa1 server 127.0.0.1:801 ttlsa2 server 127.0.0.1:802 ttlsa3 server 127.0.0.1:801 server 127.0.0.1:8025.3 删除upstream
# curl -i -X DELETE 127.0.0.1:81/upstream/ttlsa1 success # curl 127.0.0.1:81/detail ttlsa2 server 127.0.0.1:802 ttlsa3 server 127.0.0.1:801 server 127.0.0.1:8025.4 增加带ip_hash的upstream
# curl -d "ip_hash;server 127.0.0.1:801;server 127.0.0.1:802;" 127.0.0.1:81/upstream/ttlsa4 success # curl 127.0.0.1:81/upstream/ttlsa4 server 127.0.0.1:801 server 127.0.0.1:802为什么没有带ip_hash的信息,本身就无法显示,那我们在看看weight会不会显示出来 5.5 增加带weight的upstream
# curl -d "server 127.0.0.1:801;server 127.0.0.1:802 weight=2;" 127.0.0.1:81/upstream/ttlsa5 success # curl 127.0.0.1:81/upstream/ttlsa5 server 127.0.0.1:801 server 127.0.0.1:801还是不显示,虽然没显示,但是效果还是有的,大家自己去测试吧.
6. 注意事项 本模块不能和nginx_upstream_check_module一起使用,接下来的版本会支持。或者可以使用tenengine。淘宝真是不遗余力在推广他们的tenengine.
7. 结束语 ngx_http_dyups_module带的功能我很喜欢,但是最大的不足就是不能生成配置文件,所有内容都保存在内存中,希望以后的版本能够支持。有这个模块,shell脚本也可以修改upstream,不在需要重启nginx。 转载请注明来至运维生存时间:http://www.ttlsa.com/html/3268.html
相关文章推荐
- nginx修改upstream不重启的方法(ngx_http_dyups_module模块)
- nginx修改upstream不重启的方法(ngx_http_dyups_module模块)
- Nginx密码验证 ngx_http_auth_basic_module模块
- nginx 负载均衡之 ngx_http_upstream_hash_module
- Nginx 负载均衡模块 ngx_http_upstream_module 详述
- nginx向响应内容中追加内容(ngx_http_addition_module模块)
- Nginx 负载均衡模块 ngx_http_upstream_module 详述
- nginx下后端realserver健康检测模块ngx_http_upstream_check_module
- 022_nginx常用模块之ngx_http_upstream_check_module
- Nginx 负载均衡模块 ngx_http_upstream_module 详述
- Nginx 的ngx_http_core_module模块
- nginx快速绘制圆形图(ngx_http_circle_gif_module模块)
- nginx限制连接数ngx_http_limit_conn_module模块
- Nginx 负载均衡模块 ngx_http_upstream_module 详述
- Nginx 负载均衡模块 ngx_http_upstream_module 详述
- nginx 负载均衡之 ngx_http_upstream_hash_module
- 详细解释:nginx中ngx_http_headers_module模块配置及各个参数含义
- 反向代理、ngx_http_upstream_module模块
- nginx 负载均衡之 ngx_http_upstream_hash_module
- 详细解释:nginx中ngx_http_headers_module模块配置及各个参数含义