文档章节

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

小运
 小运
发布于 2013/10/13 22:43
字数 1055
阅读 3576
收藏 1

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

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

本文转载自:http://www.ttlsa.com/html/3268.html

小运
粉丝 102
博文 761
码字总数 659803
作品 0
福州
系统管理员
私信 提问
ngx_http_dyups_module 模块sprintf问题

我在做一个nginx upstream 动态路由的功能,支持持久化,我的设想是通过rest方式直接更新nginx 内存,然后通过rest方式获取到所有upstream信息,然后回写文件保存,确保nginx reload后,之前...

dengxintao
2017/08/02
84
0
Nginx 动态发现方案与实践

本文主要介绍了适用于nginx的zk动态后端发现模块(nginx-upstream-reloader)及其使用方法。 1.背景 很多公司都有做动态调度系统,有些是基于mesos+docker,有些采用了google的K8s,或者是自...

高效运维
02/13
0
0
Tengine 2.1.2 发布,淘宝 Web 服务器

Tengine 2.1.2 发布,具体更新信息如下: Feature: 支持HTTP/2,支持向后兼容SPDY v3 [PeterDaveHello, cfsego] Feature: ngx_debug_pool模块协助分析内存状况 [chobits] Feature: 支持$upst...

淡漠悠然
2015/12/30
5K
18
Nginx学习之九:实践学习指南

Nginx基础 1. nginx安装 2. nginx 编译参数详解 3. nginx安装配置+清缓存模块安装 4. nginx+PHP 5.5 5. nginx配置虚拟主机 6. nginx location配置 7. nginx root&alias文件路径配置 8. ngxht...

boonya
2014/07/09
0
0
Tengine 2.2.0 发布,淘宝 Web 服务器

Tengine 2.2.0 发布了,更新如下: Tengine 2.2.0 [2016-11-29] * Security: 进程将特殊构造的请求体写到临时文件时会触发段错误 (CVE-2016-4450) [0x7E] * Feature: 增加force_exit指令 [a...

淡漠悠然
2016/12/01
5.6K
22

没有更多内容

加载失败,请刷新页面

加载更多

Hive(五)——Sqoop导入导出数据

一、

ittzg
43分钟前
3
0
抽象同步队列AQS——AbstractQueuedSynchronizer锁详解

AQS——锁的底层支持 谈到并发,不得不谈ReentrantLock;而谈到ReentrantLock,不得不谈AbstractQueuedSynchronizer(AQS)! 类如其名,抽象的队列式的同步器,AQS定义了一套多线程访问共享资...

须臾之余
今天
2
0
springboot配置百度UEditor 富文本详解

富文本简介 UEditor是由百度web前端研发部开发所见即所得富文本web编辑器,具有轻量,可定制,注重用户体验等特点,开源基于MIT协议,允许自由使用和修改代码... 准备工作 ueditor需要单独文...

wotrd
昨天
3
0
mysql 5.7之my.cnf配置大全

[client]port = 3306socket = /tmp/mysql.sock[mysqld]###############################基础设置######################################Mysql服务的唯一编号 每个mysql服务...

Online_Reus
昨天
2
0
MAVEN打包时引入外部链接的包

1.项目引入了ORACLE的jar包,MAVEN配置如下 2.打jar包的时候需要指定下main入口函数mainClass <dependency> <groupId>com.oracle</groupId> <artifactId>ojdbc6</artifactId> ......

Cobbage
昨天
2
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部