gpt4 book ai didi

mongodb - 我应该如何设置 mongodb 集群来处理 20K+ 同时处理

转载 作者:行者123 更新时间:2023-12-02 00:52:29 26 4
gpt4 key购买 nike

我的应用程序使用 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。这些服务器仍然可以 ping 通。我怀疑连接数太多,导致服务器死机。

我自己的分析如下:每个连接池 1K 个连接意味着对于每个分片的主分片,它将有 1K * 20(分片)= 20K 个同时打开的连接。一些服务器可能会运行多个主服务器,这将使连接数量增加一倍或三倍,达到 60K。尽管我更改了系统设置以允许每个进程打开更多文件,但 mongod 无法处理这么多连接。

以下是“ulimit -a”显示的内容:

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

顺便说一句,我在启动 mongod/mongos 时没有指定 --maxConns,也没有更改 MONGO.POOLSIZE。

一个附带问题:如果我的推理是正确的,那么每个主节点上都会提出同时连接要求的总数,这对我来说似乎不太正确,这几乎意味着 mongodb 集群根本不可扩展。有人告诉我我错了吗?

最佳答案

关于您的集群架构:

在同一台服务器上运行多个 mongod 实例通常不是一个好主意,您这样做有什么特殊原因吗?每个分片的主服务器会给你的服务器带来一些沉重的压力,复制也会增加 io 压力,所以混合它们对性能来说并不是很好。 IMO,您应该拥有 6 个分片(1 个主分片 - 2 个辅助分片)并为每个实例提供自己的服务器。 (Conf 和 arbiter 实例不是很占用资源,因此可以将它们保留在同一服务器上)。

关于mongodb - 我应该如何设置 mongodb 集群来处理 20K+ 同时处理,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7860429/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com