我有一个 Node.js 应用程序和一个在 AWS ECS 上运行的 MongoDB 数据库。我目前的设置由 2 个 ELB 和 2 个实例组成,每个实例都运行一个 Docker 容器及其指定的服务 (node/mongo):
Elastic Load Balancer -> Dockerized Node -> Elastic Load Balancer -> Dockerized MongoDB
我正在运行 MongoDB 的官方 Docker 镜像,可在此处获取:https://registry.hub.docker.com/_/mongo/
关于如何使用 Docker 和 ECS 为 MongoDB 部署副本集,每个副本在不同的实例上运行,有任何指示吗?
答案1
不要将数据库 docker 化。Docker 容器是临时的,不保存数据。这对于数据库来说并不合适。
特别是,不要尝试将 MongoDB 集群docker化。副本集的设置非常复杂。您必须运行许多命令按顺序且仅一次。如果您错过任何命令或者节点关闭,整个集群可能会死锁,您将被迫重新开始。
Docker 对于应用程序的行为方式有自己的想法。在 Docker 内部实现这一点非常困难。
如果您想要一个具有 3 个副本的集群,则应该获取 3 个 AWS 实例并在这些实例上设置 MongoDB。在 Google 上搜索mongodb setting up a replica set on <OS>
,您将获得最新的教程。
答案2
火营可以。FireCamp 可以非常轻松地在 AWS ECS 上部署 MongoDB ReplicaSet。1) 使用 cloudformation 模板部署 ECS 集群,2) 通过单个命令部署 MongoDB ReplicaSet。检查 FireCamp 安装 wiki了解详情。
为了安全起见,最好在另一个 ECS 集群中运行 Node.js 应用程序。运行 MongoDB 的 EC2 实例不应暴露给外部世界。
Node.js 应用程序无需 Elastic Load Balancer 即可访问 MongoDB ReplicaSet。每个副本都有一个唯一的 DNS 名称。Node.js 应用程序只需通过 DNS 名称即可访问 MongoDB。