我已经阅读了所有关于在AWS上部署Mongo的推荐做法的MongoDB相关文档,但我不明白建议使用RAID-10 (pdf)在EBS上安装以避免数据丢失。
这似乎承认复制不起作用。为什么不应该使用短暂的驱动器和5个服务器集群进行复制来运行Mongo?
如果有备份和大型副本集,使用EBS可以防止什么?它几乎承认副本集不会保护你免受数据损失。 (暂时忽略写入已发送到辅助节点的竞争条件,并且在发送确认之前主节点发生故障)。
答案 0 :(得分:3)
为什么不应该使用短暂的驱动器和5个服务器进行复制来运行Mongo?
AWS并不完美,它可能会出现网络故障,从而导致整个设备停机。短暂记忆你会丢失所有数据。加上块设备可以在重启节点后继续使用。
这是一些事情,我相信还有更多。
如果服务器出现故障,EBS支持的商店无论如何都必须与副本重新同步。
只有在它消失之后,如果那是相当长的时间,那么可能更容易将目录从一个副本复制到另一个副本。
使用EBS可以实现更复杂的设置。如果要拍摄快照,则需要使用LVM或其他图层,因为EBS快照不能在RAID之间工作。
在AWS本身并不真正需要RAID,我的意思是他们对每个块设备进行RAID操作,而副本集就像丢弃设备一样好。每个节点可以使用一个块设备。
如果有备份和大型副本集,使用EBS可以防止什么?
它可以保护您的理智,恢复10个奇数成员的大量数据备份,并重置所有防火墙/用户权限和操作系统等等,可能......好......讨厌。
我的意思是想象每次重新启动它都需要重新设置操作系统。
嗯,你必须误读一些brecaue,而不是他们所保证的。确实,使用repilica集合丢失数据更加困难(如果设置正确),但它们实际上是为了提供高可用性(HA)而设计的。它几乎承认副本集不会保护你免受数据冲击。
备份和jornalling以及其他一致性方法旨在不丢失数据。
答案 1 :(得分:3)
那你在哪里看到在EBS上为mongodb运行RAID10的建议?他们的文档将其列为一个选项,但特别推荐仅使用EBS和预配置IOPS。
对于几乎所有部署,EBS将是更好的选择。对于生产系统,我们建议使用
- EBS优化的EC2实例
- 预配置IOPS(PIOPS)EBS卷
http://docs.mongodb.org/ecosystem/platforms/amazon-ec2/
我们在EC2上运行所有mongodb实例,并且所有实例都使用配置IO的生产实例使用EBS存储卷。原因如下:
对于某些高性能情况,我当然可以想象使用短暂存储(特别是SSD成本下降)的未来部署,但EBS对我们来说相当可靠和可靠。当然,您的经验和需求会有所不同,但对于我们来说,遵循MongoDB的建议对我们很有帮助。实际上它足够可靠,对于某些环境,我们已经转移到1个主要,1个辅助和仲裁,这有助于节省成本。如果没有简单的恢复和在主要和次要上使用EBS卷的整体可靠性,可能不会这样做。