Dan*_*iel 10 connection cluster-computing mongodb
我的应用程序使用MongoDB作为数据库.我们期待与mongodb集群同时连接20K +.如果我想在20台服务器上运行mongodb并以20种方式对集群进行分片,我该如何配置服务器?
以下是我到目前为止所做的:在我的20台服务器中,我有一台mongos(路由器)在30000端口上运行,在3台服务器上我在端口20000上运行mongo配置服务器.然后在每台服务器上运行3 mongod的例子.其中一个是主要的.换句话说,我有20个mongos,3个mongo-config,60个mongod服务器(20个主要服务器和40个副本服务器).
然后在我的应用程序中(也在每个服务器上运行并连接到localhost:30000 mongos),我设置了mongoOptions,使得connectionsPerHost = 1000.
所有服务开始后10-15分钟,其中一些已不再是ssh-able.这些服务器仍然可以ping通.我怀疑连接太多,导致服务器死机.
我自己的分析如下:每个连接池1K连接意味着每个分片的主要,它将有1K*20(分片)= 20K同时连接打开.一些服务器可能会运行多个主服务器,这将使连接数增加一倍或三倍,达到60K.不知怎的,mongod无法处理这么多连接,虽然我改变了系统设置以允许每个进程打开更多文件.
core file size (blocks, -c) 0
data seg size (kbytes, -d) unlimited
scheduling priority (-e) 20
file size (blocks, -f) unlimited
pending signals (-i) 16382
max locked memory (kbytes, -l) 64000000
max memory size (kbytes, -m) unlimited
open files (-n) 320000
pipe size (512 bytes, -p) 8
POSIX message queues (bytes, -q) 819200
real-time priority (-r) 0
stack size (kbytes, -s) 8192
cpu time (seconds, -t) unlimited
max user processes (-u) unlimited
virtual memory (kbytes, -v) unlimited
file locks (-x) unlimited
Run Code Online (Sandbox Code Playgroud)
顺便说一句,我没有指定--maxConns当我启动mongod/mongos时,我也没有更改MONGO.POOLSIZE.
一个侧面问题:如果我的推理是正确的,那么同时连接要求的总数将在每个主要部分上提出,这对我来说似乎不对,这几乎意味着mongodb集群根本不可扩展.有人告诉我,我错了吗?
关于您的集群架构:
在同一台服务器上运行多个 mongod 实例通常不是一个好主意,您这样做有什么特殊原因吗?每个分片的主服务器会给你的服务器带来一些沉重的压力,复制也会增加 io 压力,所以混合它们对性能来说并不是很好。IMO,您应该拥有 6 个分片(1 个主分片 - 2 个辅助分片)并为每个实例提供自己的服务器。(Conf 和 arbiter 实例并不是很占用资源,因此可以将它们放在同一台服务器上)。
| 归档时间: |
|
| 查看次数: |
3720 次 |
| 最近记录: |