求助各路大神,想开发一个 nginx 模块动态从 zookeeper 获取配置参数,应该采用什么模块开发, upstream ? event ?有什么可以参考的模块程序例子
|
PoweredJan 10, 2017 via iPhone
1
给出一个自己的方案。
java 先解析 nginx 的 conf ,监听 zookeeper ,动态修改 conf 文件。 也就是利用了 zookeeper 自带的通知功能,用 java 桥接了 zookeeper 和 nginx 配置文件。 |
|
gaodqJan 10, 2017
2
可以试一下 QConf , https://github.com/Qihoo360/Qconf ,一个分布式配置管理系统
|
|
3
@Powered 感谢您的回复,但我还是想用最直接方式去做,不然我就用 bash shell 了,而且我只会 c 不会 java
|
|
4
@gaodq 感谢回复,其实我是想实现 后台 http 的 API 注册, nginx 发现该 API ,并及时更新 upstrem ,是不是有点异想天开^^
|
|
gaodqJan 10, 2017
5
@hokerlinux 没太看明白 2333 , QConf 是从 zookeeper 动态获取配置,然后对外提供接口获取最新配置,感觉跟你需求有点像就推荐了:)
|
|
6
主要是看到国外有人这么做,想挑战一下,提升技能,一直想了解 nginx 开发,再一个跟上级承诺了,囧
|
|
7
@gaodq 仍然感谢
|
|
defunct9Jan 10, 2017
8
有用 kazoo 、 java 的, c 写就比较重了,因为本身 zookeeper 是 Java 的。且这个场景不太适合,你写就明白了。得在 zookeeper 上挂钩子,还需要动态更新 nginx
|
|
bzzhouJan 10, 2017
9
赞同 @Powered 的方案,可以参考 consul2template ,非常简单可靠
直接在 nginx 内部实现,要考虑的细节就会多很多,从工程收益来说,不划算。 |
|
cloverstdJan 10, 2017 via iPhone
10
指个歪路,可以参考 bamboo
|
|
11
@defunct9 感谢回复,我已经了解了一些, zookeeper 有 c 语言的客户端 API ,并写了简单的 c 的测试程序,利用它的这个 API , c 写起来也不是很麻烦,只是看怎么把这个客户端程序融合为 nginx 的模块
|
|
AllianzcortexJan 10, 2017
12
内部用 bash 来调自带的四字命令?
|
|
13
|
|
14
@Allianzcortex 不懂
|
|
janxinJan 10, 2017
15
nginx plus 提供微服务动态管理功能吧,这类肯定可以实现的
|
|
16
@janxin 感谢回复,正是看到 nginx plus 可以实现又要收费,才想自己实现的,但自己又没做过 nginx 的开发
|
|
rrfengJan 10, 2017 via Android
17
这个要看什么配置参数。
upstream 的话有一大把方案,但是基于 zk 的比较少。 很多其他配置并没有 Nginx API 可以修改所以不能动态。 我有一个 etcd 的你要不要试试 |
|
djx339Jan 10, 2017
18
推荐 confd, 写个配置文件和模板就能满足你的需求, 可以参考 https://github.com/kelseyhightower/confd/blob/master/docs/quick-start-guide.md#create-template-resources
|
|
dndxJan 10, 2017 via iPhone
19
OpenResty + balancer_by_lua 基本可以达到你的要求。
|
|
20
@rrfeng 主要是用于发现需要反向代理的 http API ,即 upstrem 的那些地址,这些后台也会注册自己的接口,如果方便,发一份 etcd 的实现到 [email protected] ,我参考一下,非常感谢 :)
|
|
21
|
|
22
@rrfeng 请问 upstrem 配置的后台地址可以动态修改吗?
|
|
23
@rrfeng 哦,看懂了,你的意思是可以得
|
|
mingyi0Jan 10, 2017
24
可以看看 nginx upsync
|
|
25
@mingyi0 好的,谢谢
|
|
26
|
|
27
@rrfeng 嗯,主要是向高手学习 :)
|
|
RealLiuShaJan 10, 2017
28
nginx 自己更新自己, 这个恐怕有点艰难, 可行性我还没有尝试过。
我这边是外建一个 register 负责处理注册请求, 有点像 confd , 但有损耗, 需要 kill -HUB, 不过我负责注册的请求时分布式的, 不影响业务, 目前也在想办法解决这样的问题。 关注。 |
|
fengjianxinghunJan 10, 2017
29
openresty
|
|
hermerJan 10, 2017
30
同意 29 楼 ,用 lua
|
|
31
@lgpqdwjh nginx 已经有模块实现这样的功能 nginx upsync module
|