![在 EC2 上托管 MongoDB 时选择正确的存储](https://linux22.com/image/672224/%E5%9C%A8%20EC2%20%E4%B8%8A%E6%89%98%E7%AE%A1%20MongoDB%20%E6%97%B6%E9%80%89%E6%8B%A9%E6%AD%A3%E7%A1%AE%E7%9A%84%E5%AD%98%E5%82%A8.png)
我正在 Amazon EC2 实例上设置 MongoDB 集群,文档说......
...为了获得最佳性能,我们建议为数据文件、日记和日志设置单独的卷。每个文件都有不同的写入行为,将它们放在单独的卷上可以减少 I/O 争用。
然后它跟进...
注意:使用不同的存储设备将影响您创建数据快照样式备份的能力,因为文件将位于不同的设备和卷上。
但它没有说明这会产生什么影响。
我猜测其影响是它完全消除了您在实例运行时执行快照样式备份的能力?
如果我停止 MongoD 服务,以便不再写入数据文件、日志和日志并对所有三个进行快照,我是否仍然可以获得安全的可恢复备份?
答案1
Mongo 给出的答案是:
刷新并锁定数据库
为了制作数据库文件的稳定副本,必须暂停对文件系统的写入。
在 MongoDB 2.0 版本之前,这是通过 MongoDB shell 使用 fsync 和 lock 实现的:
mongo shell> use admin
mongo shell> db.runCommand({fsync:1,lock:1});
{
"info" : "now locked against writes, use db.$cmd.sys.unlock.findOne() to unlock",
"ok" : 1
}
MongoDB 2.0 添加了 db.fsyncLock() 方法来锁定数据库并将写入刷新到磁盘,并添加了 db.fsyncUnlock() 方法来在快照完成后解锁数据库。
在数据库锁定期间,该数据库收到的任何写入请求都将被拒绝。任何应用程序代码都需要适当处理这些错误。
这里介绍了如何使用 EC2 设置 Mongo:https://docs.mongodb.org/ecosystem/platforms/amazon-ec2/