求助各路大神,想开发一个 nginx 模块动态从 zookeeper 获取配置参数,应该采用什么模块 - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
请不要在回答技术问题时复制粘贴 AI 生成的内容
hokerlinux
V2EX    程序员

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

  •  
  •   hokerlinux 2017-01-10 08:49:38 +08:00 5684 次点击
    这是一个创建于 3267 天前的主题,其中的信息可能已经有所发展或是发生改变。
    求助各路大神,想开发一个 nginx 模块动态从 zookeeper 获取配置参数,应该采用什么模块开发, upstream ? event ?有什么可以参考的模块程序例子
    31 条回复    2017-01-11 14:43:14 +08:00
    Powered
        1
    Powered  
       2017-01-10 08:57:18 +08:00 via iPhone
    给出一个自己的方案。

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

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

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

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

    我有一个 etcd 的你要不要试试
    djx339
        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
    dndx
        19
    dndx  
       2017-01-10 10:04:41 +08:00 via iPhone
    OpenResty + balancer_by_lua 基本可以达到你的要求。
    hokerlinux
        20
    hokerlinux  
    OP
       2017-01-10 10:06:47 +08:00
    @rrfeng 主要是用于发现需要反向代理的 http API ,即 upstrem 的那些地址,这些后台也会注册自己的接口,如果方便,发一份 etcd 的实现到 [email protected] ,我参考一下,非常感谢 :)
    hokerlinux
        21
    hokerlinux  
    OP
       2017-01-10 10:12:12 +08:00
    @djx339 @dndx 谢谢,我去了解一下
    hokerlinux
        22
    hokerlinux  
    OP
       2017-01-10 10:16:15 +08:00
    @rrfeng 请问 upstrem 配置的后台地址可以动态修改吗?
    hokerlinux
        23
    hokerlinux  
    OP
       2017-01-10 10:17:43 +08:00
    @rrfeng 哦,看懂了,你的意思是可以得
    mingyi0
        24
    mingyi0  
       2017-01-10 10:25:03 +08:00
    可以看看 nginx upsync
    hokerlinux
        25
    hokerlinux  
    OP
       2017-01-10 10:35:33 +08:00
    @mingyi0 好的,谢谢
    rrfeng
        26
    rrfeng  
       2017-01-10 14:31:38 +08:00   1
    https://github.com/rrfeng/lua-resty-upstream-etcd

    在重写,所以这个目前还没用
    hokerlinux
        27
    hokerlinux  
    OP
       2017-01-10 14:46:25 +08:00
    @rrfeng 嗯,主要是向高手学习 :)
    /table>
    RealLiuSha
        28
    RealLiuSha  
       2017-01-10 16:24:36 +08:00
    nginx 自己更新自己, 这个恐怕有点艰难, 可行性我还没有尝试过。

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

    不过我负责注册的请求时分布式的, 不影响业务, 目前也在想办法解决这样的问题。 关注。
    fengjianxinghun
        29
    fengjianxinghun  
       2017-01-10 16:30:09 +08:00
    openresty
    hermer
        30
    hermer  
       2017-01-10 17:35:55 +08:00
    同意 29 楼 ,用 lua
    hokerlinux
        31
    hokerlinux  
    OP
       2017-01-11 14:43:14 +08:00
    @lgpqdwjh nginx 已经有模块实现这样的功能 nginx upsync module
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     2270 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 25ms UTC 01:46 PVG 09:46 LAX 17:46 JFK 20:46
    Do have faith in what you're doing.
    ubao msn snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86