nginx修改upstream不重启的方法(ngx_http_dyups_module模块)

nginx很强大,第三方模块也很多,淘宝在nginx上很活跃,特别是章亦春,他参与的模块至少10+, 好了今天主角不是他,是一款动态配置upstream的模块,这个模块使用rest接口. 简单,方便,而且能够不须要重启nginx。可是有个问题比较明显,nginx重启以后,什么都没了. html

1. 安装
首先安装nginx动态upstream配置模块,若是你已经安装了nginx,那么轻参考ttlsa上的如何安装nginx第三方模块,会安装的请跳过. 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的接口 git

语法: dyups_read_msg_timeout time
默认: 1s
配置段: main
设置从共享内存中读取commands的超时时间,默认为1秒 github

语法: dyups_shm_zone_size size
默认: 2MB
配置段: main
设置存储commands的共享内存
This directive set the size of share memory which used to store the commands. shell

语法: dyups_upstream_conf path
默认: none
配置段: main
这个指令用来指定upstream配置文件的路径,他会在启动的时候加载 bash

语法: dyups_trylock on | off
默认: off
配置段: main
是否启用锁,若是启用了它,同一时刻有人在修改,那么将会返回409. 服务器

3. restful接口
GET
/detail 获取全部upstream名称以及upstream里面的servers信息
/list 获取upstream列表
/upstream/name 使用upstream名称获取upstream信息 restful

POST
/upstream/name 更新upstream
body 配置内容;
body server ip:port; 运维

DELETE
/upstream/name 删除upstream,name相应修改 curl

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:802

5.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:802

5.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

相关文章
相关标签/搜索