Docker Swarmモードを学習していて、WebアプリケーションとPostgreSQLデータベースを使用してローカルでSwarmを作成することができました。それらをスケーリングでき、Swarmがレプリカを作成しているのがわかります。
Docker Swarmがどのようにできるかを理解していると思います 通常のWebサーバーの負荷分散 しかし、データベースコンテナをそのまま使用するとどうなりますか?
Swarmコンテキストの外では、通常、データベースには、プラグインまたは MySQL cluster のような拡張製品の形式で、レプリケーションを処理するための 独自の方法 があります。 Cassandraのような他のデータベースでは、レプリケーションが製品に直接組み込まれています。Swarmコンテキストでは、これらのデータベースプラグインと機能に依存する必要がありますか?
データベースコンテナのレプリカ間のデータ整合性を処理するために期待されるパターンは何ですか?
私はそれが非常に自由形式の質問であることを知っていますが、Dockerのドキュメントも非常に自由形式であり、これに固有のものを見つけることができないようです。
そうではありません。
ここにSwarmサービスのかなり良い説明があります: サービスの仕組み(私の強調)
サービスをスウォームにデプロイすると、スウォームマネージャーはサービス定義をサービスの目的の状態として受け入れます。 次に、スウォーム内のノード上のサービスを1つ以上のレプリカタスクとしてスケジュールします。
Swarmは、タスクの内部に何があるのかわかりません。わかっているのは、インスタンスの数、それらのインスタンスがヘルスチェックに合格しているかどうか、指定したタスク定義を満たすのに十分なインスタンスがあるかどうかだけです。これとデータベースレプリカの間のWordの重複は少し残念ですが、それらは異なる概念です。
データレプリケーションの設定はあなた次第です。これらはおそらく他の場所と同じくらい良い出発点です
Docker swarmは現在、ステートレスアプリケーションに適しています。データベースレプリケーションの場合、すべてのデータベース独自のレプリケーションメカニズムに依存する必要があります。 Swarmはデータベースレプリケーションを管理できませんでした。ボリュームまたはファイルシステムレベルのレプリケーションは、単一インスタンスデータベースの保護を提供できますが、データベースレプリケーション/クラスターを認識しません。
PostgreSQLなどのデータベースの場合、追加の作業が必要です。いくつかのオプションがあります。
ホストのローカルディレクトリを使用します。レプリカごとに1つのサービスを作成し、constraint
を使用してコンテナを1つの特定のホストにスケジュールする必要があります。 。レプリカ間でpostgresqlレプリケーションを設定するには、カスタムpostgresqldockerイメージも必要になります。一方、1つのノードがダウンすると、1つのPostgreSQLレプリカがダウンします。別のレプリカを作成するために作業する必要があります。 crunchydataの例を参照 。
flocker 、 REX-Ray 。などのボリュームプラグインを使用します。レプリカごとに1つのサービスを作成し、1つのボリュームを1つのサービスにバインドします。同じオーバーレイネットワーク内にすべてのサービスを作成し、DNS名(レプリカのDockerサービス名)を介して相互に通信するようにPostgreSQLレプリカを構成する必要があります。レプリカ間でpostgresqlレプリケーションを設定する必要があります。