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をデプロイするにはどうすればよいですか?各レプリカは異なるインスタンスで実行されていますか?
データベースをドッキングしないでください。 Dockerコンテナは一時的なものであり、データを保持するものではありません。これはデータベースには適していません。
特に、MongoDBクラスターをドッキングしないでください。レプリカセットのセットアップは非常にステートフルで複雑です。多くのコマンドを実行する必要があります順番に、一度だけ。コマンドを見逃した場合、またはノードがオフになった場合、クラスター全体がデッドロックする可能性があり、最初からやり直す必要があります。
Dockerには、アプリケーションの動作に関する独自の考え方があります。 Docker内でそれを機能させるのは本当に難しいでしょう。
3つのレプリカを持つクラスターが必要な場合は、3つのAWSインスタンスを取得し、インスタンスにMongoDBをセットアップする必要があります。検索する mongodb setting up a replica set on <OS>
Googleでは、最新のチュートリアルを提供します。
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にアクセスするだけです。