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