如何使用nginx 负载均衡和rethinkdb 代理?
How to use nginx load balancing with rethinkdb proxy?
这个问题确实是从问题开始的,在进行研究时,我想出了这个用于多个 rethinkdb 代理的 nginx 平衡设置。
我有 3 个 rethinkdb 代理服务器 运行。为了便于讨论,我们称他们为:
proxy0
proxy1
proxy2
然后所有连接(--加入)到 rethinkdb 集群中的第一个数据库。
现在我已经像这样在上游定义了 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 连接到代理,并且从我的示例来看,假设是错误的。
- 像这样从源安装 nginx 以支持 --with-sream:
./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
- 编辑 /opt/nginx/nginx.conf 并添加(在 http{} 之后):
stream {
server {
listen 6003;
proxy_pass db; }
upstream db {
server proxy0:6003;
server proxy1:6003;
server proxy2:6003; }
}
只用nginx
启动nginx
将您应用程序中的数据库主机设置为您的 nginx 负载均衡器,就是这样。
此设置现在对我有效。
由于驱动程序不通过 HTTP 进行通信,您最好使用 HAProxy 之类的东西,它主要设计用于代理 TCP 连接。
这个问题确实是从问题开始的,在进行研究时,我想出了这个用于多个 rethinkdb 代理的 nginx 平衡设置。
我有 3 个 rethinkdb 代理服务器 运行。为了便于讨论,我们称他们为:
proxy0
proxy1
proxy2
然后所有连接(--加入)到 rethinkdb 集群中的第一个数据库。 现在我已经像这样在上游定义了 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 连接到代理,并且从我的示例来看,假设是错误的。
- 像这样从源安装 nginx 以支持 --with-sream:
./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
- 编辑 /opt/nginx/nginx.conf 并添加(在 http{} 之后):
stream {
server { listen 6003; proxy_pass db; }
upstream db { server proxy0:6003; server proxy1:6003; server proxy2:6003; }
}
只用
nginx
启动nginx
将您应用程序中的数据库主机设置为您的 nginx 负载均衡器,就是这样。
此设置现在对我有效。
由于驱动程序不通过 HTTP 进行通信,您最好使用 HAProxy 之类的东西,它主要设计用于代理 TCP 连接。