V2EX = way to explore
V2EX 是一个关于分享和探索的地方
Sign Up Now
For Existing Member  Sign In
• 请不要在回答技术问题时复制粘贴 AI 生成的内容
hokerlinux
V2EX  ›  程序员

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

  •  
  •   hokerlinux · Jan 10, 2017 · 5943 views
    This topic created in 3404 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
        1
    Powered  
       Jan 10, 2017 via iPhone
    给出一个自己的方案。

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

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

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

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

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

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

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

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