• 请不要在回答技术问题时复制粘贴 AI 生成的内容
hokerlinux
V2EX  ›  程序员

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

  •  
  •   hokerlinux · Jan 10, 2017 · 6577 views
    This topic created in 3592 days ago, the information mentioned may be changed or developed.
    求助各路大神,想开发一个 nginx 模块动态从 zookeeper 获取配置参数,应该采用什么模块开发, upstream ? event ?有什么可以参考的模块程序例子
    31 replies  •  2017-01-11 14:43:14 +08:00
    Powered
    Powered
    Jan 10, 2017 via iPhone
    1
    给出一个自己的方案。

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

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

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

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

    我有一个 etcd 的你要不要试试
    djx339
    djx339
    Jan 10, 2017
    18
    推荐 confd, 写个配置文件和模板就能满足你的需求, 可以参考 https://github.com/kelseyhightower/confd/blob/master/docs/quick-start-guide.md#create-template-resources
    dndx
    dndx
    Jan 10, 2017 via iPhone
    19
    OpenResty + balancer_by_lua 基本可以达到你的要求。
    hokerlinux
    hokerlinux
    OP
    Jan 10, 2017
    20
    @rrfeng 主要是用于发现需要反向代理的 http API ,即 upstrem 的那些地址,这些后台也会注册自己的接口,如果方便,发一份 etcd 的实现到 [email protected] ,我参考一下,非常感谢 :)
    hokerlinux
    hokerlinux
    OP
    Jan 10, 2017
    21
    @djx339 @dndx 谢谢,我去了解一下
    hokerlinux
    hokerlinux
    OP
    Jan 10, 2017
    22
    @rrfeng 请问 upstrem 配置的后台地址可以动态修改吗?
    hokerlinux
    hokerlinux
    OP
    Jan 10, 2017
    23
    @rrfeng 哦,看懂了,你的意思是可以得
    mingyi0
    mingyi0
    Jan 10, 2017
    24
    可以看看 nginx upsync
    hokerlinux
    hokerlinux
    OP
    Jan 10, 2017
    25
    @mingyi0 好的,谢谢
    rrfeng
    rrfeng
    Jan 10, 2017❤️1
    26
    https://github.com/rrfeng/lua-resty-upstream-etcd

    在重写,所以这个目前还没用
    hokerlinux
    hokerlinux
    OP
    Jan 10, 2017
    27
    @rrfeng 嗯,主要是向高手学习 :)
    RealLiuSha
    RealLiuSha
    Jan 10, 2017
    28
    nginx 自己更新自己, 这个恐怕有点艰难, 可行性我还没有尝试过。

    我这边是外建一个 register 负责处理注册请求, 有点像 confd , 但有损耗, 需要 kill -HUB,

    不过我负责注册的请求时分布式的, 不影响业务, 目前也在想办法解决这样的问题。 关注。
    fengjianxinghun
    fengjianxinghun
    Jan 10, 2017
    29
    openresty
    hermer
    hermer
    Jan 10, 2017
    30
    同意 29 楼 ,用 lua
    hokerlinux
    hokerlinux
    OP
    Jan 11, 2017
    31
    @lgpqdwjh nginx 已经有模块实现这样的功能 nginx upsync module
    About   ·   Help   ·   Advertise   ·   Blog   ·   API   ·   FAQ   ·   Privacy   ·   Solana   ·   927 Online   Highest 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 44ms · UTC 19:35 · PVG 03:35 · LAX 11:35 · JFK 14:35
    ♥ Do have faith in what you're doing.