我在AWS EKS集群上部署了一个自托管MongoDB,版本为1.24
。
每次我在集群上放置一些工作负载时,MongoDB碎片都会消耗节点的大部分RAM。我在t3.medium
示例上运行,每个碎片使用大约2GB。由于每个节点上有多个碎片,它只会填充内存,节点变得不可用。
我尝试将WiredTiger
缓存大小限制为0.25GB,但似乎不起作用。
我也尝试过用db.collection.getPlanCache().clear
手动清除该高速缓存,但它什么也没做。db.collection.getPlanCache().list()
返回空数组。
我也试过检查存储引擎,但是在mongoshell中db.serverStatus().wiredTiger
和db.serverStatus().storageEngine
都是undefined
。
我使用的是bitnami mongodb-sharded
chart,当前值为:
mongodb-sharded:
shards: 8
shardsvr:
persistence:
resourcePolicy: "keep"
enabled: true
size: 100Gi
configsvr:
replicaCount: 2
mongos:
replicaCount: 2
configCM: mongos-configmap
mongos的配置图是这样的
apiVersion: v1
kind: ConfigMap
metadata:
name: mongos-configmap
data:
mongo.conf: |
storage:
wiredTiger:
engineConfig:
cacheSizeGB: 0.25
inMemory:
engineConfig:
inMemorySizeGB: 0.25
1条答案
按热度按时间mpgws1up1#
解决了各种问题:
1.我在
ConfigMap
-〉mongo.conf
而不是mongos.conf
中有错别字,这意味着它正在创建一个不同的未使用的配置文件。mongos
不是带有存储引擎的:它位于mongod
(碎片)上,因此配置应该放在shardsvr.dataNode.configCM
中1.设置自定义配置意味着我将覆盖bitnami部署的默认配置-〉您需要复制所有配置,然后根据需要进行修改。
在我的示例中,这就是我如何设置
values.yaml
另一个注意事项:
db.serverStatus().storageEngine
和db.serverStatus().wiredTiger
之所以是undefined
,是因为我运行的是MongoDBCompass中的mongosh
,它实际上连接到mongos
(没有存储引擎)相反,如果您将shell转换到其中一个碎片中,并运行
mongosh
(在我的例子中,它位于/opt/bitnami/monogdb/bin/
),则命令可以正常工作。