我是 mongodb 和 amazon ec2 的新手。
在我看来,mongo 副本的存在是为了:1/ 避免数据丢失和 2/ 使读取和服务更快。
在亚马逊,他们有这个 EbS 东西。据我了解,它是一个全局持久存储,例如 Dropbox。
那么,如果亚马逊用 EBS 抽象出对它的需求,是否需要拥有副本?
提前感谢
托马斯
2 回答
让我澄清几件事。
如果您习惯使用现有技术,EBS 本质上就是一个 SAN 卷。它可以附加到一个实例,但它始终具有有限的 IO。使用 RAID 可以帮助最大化 IO,预置 IOPS 可以帮助您最大化吞吐量。
然而,理想情况下,对于 MongoDB,您希望拥有足够的内存,以便可以在内存中完全访问索引,如果需要命中磁盘,性能会下降。
Mongo 可以使用 Replicas,主要用于故障转移和复制(您可以将读取发送到从属设备,但所有写入都需要命中主服务器),以及用于拆分数据集以提高性能的分片。即使您使用 EBS 进行存储,您仍然需要做这些事情。
副本不仅用于存储冗余,还用于服务器冗余。如果您的 MongoDB 服务器(使用 EBS 卷)突然消失,例如,它所在的主机出现故障,会发生什么情况?您需要做很多事情,例如克隆一个新实例来替换它,将卷附加到该实例,将流量重新路由到它等等。Mongo 的副本集意味着您不必这样做。即使其中一个发生故障,它们也会继续工作,因此您的停机时间基本上为 0。
此外,它还有一层冗余。到目前为止,您只能信任 EBS - 如果 AWS 有一个错误会擦除您的卷或使其在不可接受的长时间内不可用怎么办?使用副本集,您甚至可以跨可用区复制数据,甚至复制到完全不同的云提供商。
副本集还允许您从多个节点进行读取,因此理论上,在您从一个实例中最大化 EBS 连接为您提供的内容之后,您可以增加读取吞吐量。