web-dev-qa-db-ja.com

方法:エラスティックコンテナーサービスでのDockerized MongoDBレプリケーション

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のreplicaSetをデプロイするにはどうすればよいですか?各レプリカは異なるインスタンスで実行されていますか?

10
Claudiu S

データベースをドッキングしないでください。 Dockerコンテナは一時的なものであり、データを保持するものではありません。これはデータベースには適していません。

特に、MongoDBクラスターをドッキングしないでください。レプリカセットのセットアップは非常にステートフルで複雑です。多くのコマンドを実行する必要があります順番に、一度だけ。コマンドを見逃した場合、またはノードがオフになった場合、クラスター全体がデッドロックする可能性があり、最初からやり直す必要があります。

Dockerには、アプリケーションの動作に関する独自の考え方があります。 Docker内でそれを機能させるのは本当に難しいでしょう。

3つのレプリカを持つクラスターが必要な場合は、3つのAWSインスタンスを取得し、インスタンスにMongoDBをセットアップする必要があります。検索する mongodb setting up a replica set on <OS> Googleでは、最新のチュートリアルを提供します。

2
user5994461

FireCamp します。 FireCampは、MongoDBレプリカセットをAWS ECSに非常に簡単にデプロイできます。 1)cloudformationテンプレートを使用してECSクラスターをデプロイします。2)単一のコマンドでMongoDBレプリカセットをデプロイします。詳細は FireCampインストールwiki を確認してください。

セキュリティのために、Node.jsアプリを別のECSクラスターで実行することをお勧めします。 MongoDBを実行するEC2インスタンスを外部に公開しないでください。

Node.jsアプリがMongoDBレプリカセットにアクセスするためにElastic Load Balancerは必要ありません。すべてのレプリカは一意のDNS名を取得します。 Node.jsアプリは、dns名でMongoDBにアクセスするだけです。

2
CloudStax