Hi,
动态加载upstream和ha这个问题, 可以这样来考虑:
1. 反向代理: 用nginx, haproxy等应该都能实现
2. 服务发现: 用ZK, Etcd等, 这里简称KV
3. 后端服务
后端服务启动时向zetcd注册自己的地址和负载能力等信息
反向代理服务监听KV上的事件, 据此添加或删除后端节点
这样可以做到动态加载, 服务发现, 后端也可以挂不同的服务.
这里的单点是角色1, 针对这个点做ha也很方便
balancer_by_lua指令听起来更简捷, 应该是复用了角色1和2, 等春哥释放出来时再确认一下.
Best regards
On Friday, July 31, 2015 at 5:32:27 PM UTC+8, Lucien Li wrote:
春哥求开源啊,这么强大的功能nginx+lua 实现 upstream的功能~ 求开源,求开源, 我这项目正好可以使用~
在 2015年7月31日星期五 UTC+8下午2:18:44,agentzh写道:
Hello!
2015-07-29 0:49 GMT+08:00 吕晓旭:
> 所以我们采用了openresty+泛域名作为marathon服务暴露的方案,使用lua从marahthon获取服务地址,再把请求proxy_pass到marathon启动的上游服务中。
> 但是,目前我们只处理了上游只有一个服务实例的状况。当有多个实例时,我们没有处理。
> 所以我的问题是:是否有方法动态加载upstream列表?满足负载均衡和ha的需要
我几个月前已经实现并测试通过了 balancer_by_lua 这个 ngx_lua 的新指令。届时你不仅可以在 Lua
里按请求级别动态生成后端 peer 的信息,还可以在 Lua
里面动态地为每个请求决定是否重试,如何重试,以及重试多少次等所有细节。简言之,你将可以用纯 Lua 编写 nginx upstream
模块的逻辑,而且更加灵活。
受公司开源策略的限制,这个特性的开源可能需要等到今年 9 月或者 10 月。
Regards,
-agentzh