【发布时间】:2014-08-31 12:19:13
【问题描述】:
我们将亚马逊网络服务用于使用 node.js 服务器和 mongodb 作为数据库的业务应用程序。目前 node.js 服务器在 EC2 中型实例上运行。我们将 mongodb 数据库保存在一个单独的微实例中。现在我们想在我们的 mongodb 数据库中部署副本集,这样如果 mongodb 被锁定或不可用,我们仍然可以运行我们的数据库并从中获取数据。
所以我们试图将副本集的每个成员保存在单独的实例中,这样即使主成员的实例关闭,我们也可以从数据库中获取数据。
现在,我想在数据库中添加负载均衡器,这样数据库即使在一次巨大的流量负载下也能正常工作。在这种情况下,我可以通过在副本集中添加 slaveOK 配置来读取数据库平衡。但是如果数据库中写入操作的流量负载很大,它就不会对数据库进行负载均衡。
为了解决这个问题,到目前为止我有两个选择。
选项 1:我必须对数据库进行分片并将每个分片保存在单独的实例中。并且在每个分片下都会有一个副本集在同一个实例中。但是有一个问题,因为分片将数据库分成多个部分,所以每个分片不会在其中保存相同的数据。因此,如果一个实例关闭,我们将无法访问该实例内分片中的数据。
为了解决这个问题,我尝试将数据库划分为分片,每个分片在不同的实例中都有一个副本集。因此,即使一个实例关闭,我们也不会遇到任何问题。但是如果我们有 2 个分片并且每个分片在副本集中有 3 个成员,那么我需要 6 个 aws 实例。所以我认为这不是最佳解决方案。
选项 2:我们可以在 mongodb 中创建一个 master-master 配置,这意味着所有数据库都将是主数据库并且都将具有读/写访问权限,但我也希望它们彼此自动同步通常,所以它们最终都是彼此的克隆。所有这些主数据库都将位于单独的实例中。但是不知道mongodb是否支持这种结构。
对于这种情况,我没有任何 mongodb 文档/博客。所以,请建议我什么应该是这个问题的最佳解决方案。
【问题讨论】:
标签: mongodb amazon-web-services amazon-ec2 load-balancing database