求助各路大神,想开发一个 nginx 模块动态从 zookeeper 获取配置参数,应该采用什么模块

2017-01-10 08:49:38 +08:00
 hokerlinux
求助各路大神,想开发一个 nginx 模块动态从 zookeeper 获取配置参数,应该采用什么模块开发, upstream ? event ?有什么可以参考的模块程序例子
5188 次点击
所在节点    程序员
31 条回复
Powered
2017-01-10 08:57:18 +08:00
给出一个自己的方案。

java 先解析 nginx 的 conf ,监听 zookeeper ,动态修改 conf 文件。

也就是利用了 zookeeper 自带的通知功能,用 java 桥接了 zookeeper 和 nginx 配置文件。
gaodq
2017-01-10 09:05:38 +08:00
可以试一下 QConf , https://github.com/Qihoo360/Qconf ,一个分布式配置管理系统
hokerlinux
2017-01-10 09:06:51 +08:00
@Powered 感谢您的回复,但我还是想用最直接方式去做,不然我就用 bash shell 了,而且我只会 c 不会 java
hokerlinux
2017-01-10 09:12:06 +08:00
@gaodq 感谢回复,其实我是想实现 后台 http 的 API 注册, nginx 发现该 API ,并及时更新 upstrem ,是不是有点异想天开^^
gaodq
2017-01-10 09:15:07 +08:00
@hokerlinux 没太看明白 2333 , QConf 是从 zookeeper 动态获取配置,然后对外提供接口获取最新配置,感觉跟你需求有点像就推荐了:)
hokerlinux
2017-01-10 09:15:12 +08:00
主要是看到国外有人这么做,想挑战一下,提升技能,一直想了解 nginx 开发,再一个跟上级承诺了,囧
hokerlinux
2017-01-10 09:17:12 +08:00
@gaodq 仍然感谢
defunct9
2017-01-10 09:22:00 +08:00
有用 kazoo 、 java 的, c 写就比较重了,因为本身 zookeeper 是 Java 的。且这个场景不太适合,你写就明白了。得在 zookeeper 上挂钩子,还需要动态更新 nginx
bzzhou
2017-01-10 09:28:04 +08:00
赞同 @Powered 的方案,可以参考 consul2template ,非常简单可靠
直接在 nginx 内部实现,要考虑的细节就会多很多,从工程收益来说,不划算。
cloverstd
2017-01-10 09:30:01 +08:00
指个歪路,可以参考 bamboo
hokerlinux
2017-01-10 09:30:16 +08:00
@defunct9 感谢回复,我已经了解了一些, zookeeper 有 c 语言的客户端 API ,并写了简单的 c 的测试程序,利用它的这个 API , c 写起来也不是很麻烦,只是看怎么把这个客户端程序融合为 nginx 的模块
Allianzcortex
2017-01-10 09:31:01 +08:00
内部用 bash 来调自带的四字命令?
hokerlinux
2017-01-10 09:33:47 +08:00
@bzzhou @cloverstd 谢谢,我去了解一下
hokerlinux
2017-01-10 09:37:12 +08:00
janxin
2017-01-10 09:43:52 +08:00
nginx plus 提供微服务动态管理功能吧,这类肯定可以实现的
hokerlinux
2017-01-10 09:46:56 +08:00
@janxin 感谢回复,正是看到 nginx plus 可以实现又要收费,才想自己实现的,但自己又没做过 nginx 的开发
rrfeng
2017-01-10 09:55:33 +08:00
这个要看什么配置参数。

upstream 的话有一大把方案,但是基于 zk 的比较少。

很多其他配置并没有 Nginx API 可以修改所以不能动态。

我有一个 etcd 的你要不要试试
djx339
2017-01-10 10:02:41 +08:00
推荐 confd, 写个配置文件和模板就能满足你的需求, 可以参考 https://github.com/kelseyhightower/confd/blob/master/docs/quick-start-guide.md#create-template-resources
dndx
2017-01-10 10:04:41 +08:00
OpenResty + balancer_by_lua 基本可以达到你的要求。
hokerlinux
2017-01-10 10:06:47 +08:00
@rrfeng 主要是用于发现需要反向代理的 http API ,即 upstrem 的那些地址,这些后台也会注册自己的接口,如果方便,发一份 etcd 的实现到 hoker.linux@gmail.com ,我参考一下,非常感谢 :)

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/333490

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX