如何:在弹性容器服务上进行Dockerized MongoDB复制


10

我有一个Node.js应用程序以及在AWS ECS上运行的MongoDB数据库。我目前得到的设置是由2个ELB和2个实例组成的,每个实例运行一个带有其分配的服务(节点/ mongo)的Docker容器:

Elastic Load Balancer -> Dockerized Node -> Elastic Load Balancer -> Dockerized MongoDB

我正在运行MongoDB的官方Docker映像,可在此处访问:https : //registry.hub.docker.com/_/mongo/

关于如何能够使用Docker和ECS为MongoDB部署一个副本集的任何指示,每个副本都在不同的实例上运行?

Answers:


2

不要对数据库进行docker化。Docker容器是短暂的,不保存数据。这不适用于数据库。

特别是,请勿尝试对MongoDB集群进行docker化。副本集的设置非常有状态且非常复杂。您必须依次运行许多命令,而只需运行一次。如果您错过任何命令或节点关闭,则整个集群可能会死锁,您将被迫重新开始。

Docker对于应用程序的行为方式有自己的想法。要在Docker内部进行这项工作真的很难。

如果您想要一个具有3个副本的集群,则应获得3个AWS实例并在这些实例上设置MongoDB。搜索mongodb setting up a replica set on <OS>在谷歌,会给你一个最新的教程。


2

FireCamp做到了。FireCamp可以非常轻松地在AWS ECS上部署MongoDB ReplicaSet。1)使用cloudformation模板部署ECS集群,2)通过单个命令部署MongoDB ReplicaSet。有关详细信息,请查看 FireCamp安装Wiki

为了安全起见,最好在另一个ECS群集中运行Node.js应用程序。运行MongoDB的EC2实例不应暴露给外部世界。

Node.js应用程序不需要弹性负载均衡器即可访问MongoDB ReplicaSet。每个副本都有一个唯一的dns名称。Node.js应用程序可以简单地通过dns名称访问MongoDB。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.