如何在rethinkdb代理中使用nginx负载均衡?

时间:2016-07-16 12:40:13

标签: nginx proxy rethinkdb

这个问题确实是从问题开始的,在进行研究时,我想出了针对多个rethinkdb代理的nginx平衡的这个设置。

我有3个rethinkdb代理服务器正在运行。为了便于讨论,我们可以打电话给他们:

proxy0
proxy1
proxy2

然后将所有连接( - join)连接到rethinkdb集群中的第一个db。 现在我已经像这样定义了nginx上游:

upstream proxy {
    server proxy0:6003;      # rethindb proxy instance 0
    server proxy1:6003;      # rethinkdb proxy instance 1
    server proxy2:6003;      # rethinkdb proxy instance 2
}

然后只是代理传递location /.

这一切看起来都很简单但不起作用。 我得到这样的python错误:

File "isDead.py", line 86, in <module>
    o = DeadLinksDelete(db="db", db_host="loadBalancerAddress", api_url=url, page=sys.argv[2])
  File "isDead.py", line 22, in __init__
    password="pass")
  File "/usr/local/lib/python2.7/dist-packages/rethinkdb/net.py", line 656, in connect
    return conn.reconnect(timeout=timeout)
  File "/usr/local/lib/python2.7/dist-packages/rethinkdb/net.py", line 567, in reconnect
    return self._instance.connect(timeout)
  File "/usr/local/lib/python2.7/dist-packages/rethinkdb/net.py", line 425, in connect
    self._socket = SocketWrapper(self, timeout)
  File "/usr/local/lib/python2.7/dist-packages/rethinkdb/net.py", line 325, in __init__
    raise ReqlDriverError(error)
rethinkdb.errors.ReqlDriverError: Connection is closed.

好的,我的第一个问题是我假设rethinkdb驱动程序通过http / https连接到代理,并且从我的示例中假设错误。

  1. 从源代码安装nginx以支持--with-sream,如下所示:
  2.   

    ./ configure --prefix = / opt / nginx --sbin-path = / usr / sbin / nginx   --conf-path = / opt / nginx / nginx.conf --pid-path = / var / run / nginx.pid --lock-path = / var / run / nginx.lock --with-threads --with -stream --with-http_slice_module --without-http_rewrite_module

    1. 编辑/opt/nginx/nginx.conf并添加(在http {}之后):
    2.   

      stream {

           

      服务器{       听6003;       proxy_pass db; }

           

      上游数据库{       server proxy0:6003;       server proxy1:6003;       server proxy2:6003; }

           

      }

      1. 仅使用nginx

      2. 启动nginx
      3. 将您应用中的数据库主机设置为您的nginx负载均衡器,就是这样。

      4. 此设置现在适用于我。

1 个答案:

答案 0 :(得分:0)

由于驱动程序无法通过HTTP进行通信,因此您可能最好使用主要用于代理TCP连接的HAProxy之类的东西。