我有一个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副本集,每个副本运行在不同的实例上?
不要dockerize数据库。 Docker容器意味着是短暂的,而不是保存数据。 这不适合数据库。
特别是,不要试图dockerize一个MongoDB集群 。 副本集的设置是非常有状态和复杂的。 你必须按顺序运行许多命令,而且只能运行一次 。 如果您错过了任何命令或节点closures,整个群集可能会死锁,您将被迫重新开始。
Docker对应用程序的行为有自己的想法。 在Docker里面做这个工作真的很困难。
如果您希望拥有3个副本的集群,则应该获得3个AWS实例并在实例上设置MongoDB。 在Google mongodb setting up a replica set on <OS>
searchmongodb setting up a replica set on <OS>
上mongodb setting up a replica set on <OS>
,这会给你一个最新的教程。
FireCamp做到了。 FireCamp可以非常容易地在AWS ECS上部署一个MongoDB副本集。 1)使用云构build模板部署ECS集群,2)通过一个命令部署MongoDB副本集。 查看FireCamp安装wiki获取详细信息。
为了安全起见,最好在另一个ECS集群中运行Node.js应用程序。 运行MongoDB的EC2实例不应该暴露给外部世界。
Node.js应用程序不需要Elastic Load Balancer来访问MongoDB ReplicaSet。 每个副本都有一个唯一的DNS名称。 Node.js应用程序可以简单地通过DNS名称访问MongoDB。