Dim*_*ima 19 configuration reverse-proxy nginx apache-zookeeper
假设我们有几个相同的节点,它们是某些n层服务的应用服务器.假设我们使用Apache ZooKeeper来保留我们分布式应用程序的所有配置.另外,我们在此应用程序前面有一个nginx作为负载均衡器和反向代理.
因此,假设我们执行仅在node1上更改数据的命令,并且在某段时间内,node2与node1不同.我们希望代理将所有特殊请求(需要特定数据)重定向到node1,直到所有信息都迁移到node2并且node2与node1具有相同的数据.
有没有办法让nginx(或其他代理)从Apache ZooKeeper读取其配置?或更广泛的:有没有办法有效地切换代理配置?当然,它应该在没有(或最小)整个系统的停机时间内完成 - 因此重新启动nginx不是选项.
请尝试Nginx-Clojure.我们可以使用clojure/java/groovy重写处理程序来访问zookeeper,然后更新一些nginx变量以动态更改代理目标.例如
在nginx.conf中
set $mytarget "";
location / {
rewrite_handler_type java;
## We will change $mytarget in MyRewriteHandler
rewrite_handler_name my.MyRewriteHandler;
proxy_pass $mytarget;
}
Run Code Online (Sandbox Code Playgroud)
在MyRewriteHandler.java中
public static class MyRewriteHandler implements NginxJavaRingHandler {
@Override
public Object[] invoke(Map<String, Object> request) {
//access zookeeper
...............
//change nginx variable mytarget
((NginxJavaRequest)request).setVaraible("mytarget", "http://some-host-or-url");
}
Run Code Online (Sandbox Code Playgroud)