你好,
我想知道就机器及其磁盘大小而言,AWS/MongoDB 的良好设置是什么。
当前设置
- 3 台微型计算机用于配置服务器、1 台 mongos 和仲裁器。几乎已达到 8Gb 的限制。(我使用 --nojournal 运行了仲裁器)
- 每个分片:2 台机器的副本集 m1.large,8Gb 用于系统 + 20Gb 用于数据
- 一切都在 EBS 上。
问题
- 20Gb 是太大还是太小?例如我应该选择 100Gb 吗?
- 我是否应该告知 mongodb 有关 20Gb(或其他)磁盘限制?
- 您是否发现了我没发现的错误?我对 mongodb 和 aws 还不熟悉,但我是一名经验丰富的 SWE
使用计划
我的数据库应允许 100 QPS(主要是写入),并应在未来 3 年内增长到 1Tb。计划是当我们看到数据库需要更多内存时,根据需要添加尽可能多的分片,或多或少手动(使用脚本)。
我们还将在此运行一些 mapreduce,并编写一些脚本,每 15 分钟对过去 15 分钟的数据进行汇总。
我们是一家非常小的公司,每个月在我们的服务器上花费几百美元是可以的,但我们不能在现金上花费太多。
我们希望不需要手动处理太多的机器故障,每月手动处理一次就可以了。
感谢您告诉我您对此的想法。
托马斯
答案1
首先您的具体问题:
20Gb 是太大还是太小?例如我应该选择 100Gb 吗?
这完全取决于您的数据要求以及您打算插入多少文档。如果您打算有 5GB 的文档,那么即使有复制开销(oplog 是可用空间的 5%)和存储开销(每个数据库始终有一个预分配的空文件),您也应该没问题。如果您计划有 10-12GB 的数据(请记住您还必须存储索引、日记、日志),那么我会选择更大的磁盘。
既然你说你计划在一年内增长到 1TB,那么你可能在一个月内就会超过 20GB,而且无论如何都需要增加磁盘空间,因此立即增加 100GB 可能更容易。假设一年增长 1TB,那么只能给你大约 1 个月的空间(每年 1TB ~= 每月 83GB)。
我是否应该告知 mongodb 有关 20Gb(或其他)磁盘限制?
没有,曾经有过改进但 MongoDB 目前只会使用所有可用空间,直到没有剩余空间为止 - 您需要独立监控您的磁盘空间。
您是否发现了我没发现的错误?我对 mongodb 和 aws 还不熟悉,但我是一名经验丰富的 SWE
切勿在生产环境中使用微型实例 - 尤其是不要将其用作配置服务器。配置服务器对于分片集群的运行至关重要。但不必相信我的话 - 请参阅更新了亚马逊白皮书:
不建议将 T1.micro 实例用于生产 MongoDB 部署,包括仲裁器、配置服务器和 mongos 分片管理器。
一般来说,我建议通读白皮书并遵循其中的指导方针 - 您会发现有关 Linux 设置(预读、大页面等)、存储、pIOPS 等的建议。同样值得一看的是生产说明- 有些重复,但更新频率比白皮书更高。
最后,了解一下你的工作集大小对于您的数据库(每个分片) - 这将决定您需要多少 RAM,这实际上是选择 EC2 上 MongoDB 实例大小的关键。 8GB 可能就足够了,但如果不够,您会看到磁盘占用对性能造成重大影响。