2016-11-04 18 views
3

私はDocker Swarmで私の最初のステップを行い、redis、elasticsearch、またはデータベースなどの永続データを使用するサービスに対処する方法を知りました。Docker Swarm with data:共有ボリューム対クラスタリングvs単一インスタンス

私はdocker swarmでredis/elasticsearch/databaseクラスタを設定する方法について多くのチュートリアルを見つけましたが、共有ストレージを使用する方が簡単ですか?たとえば、私はAzureで作業するので、simpyはRedis/elasticsearch /データベースボリュームとして単一のAzureファイルストレージを使用し、すべてのノードがこのファイルストレージをマウントできるようにします。 これは許容されるアプローチですか、いくつかの重大な欠点があります(たとえば、2つ以上のデータベースインスタンスが同時にそのストレージに書き込もうとする場合など)。

ノードごとにのような "データ"サービスを使用することをお勧めしますか?あるいは、フロントエンドサービスのためだけにDocker Swarmを使用し、単一のredis/elasticsearch/databaseサービスを用意する必要がありますか?

答えて

1

複数のアプリケーションインスタンスからアクセスされる共有フォルダを使用する場合は、データ破損を避けるためにアプリケーション自体を設計する必要があります(複数のアプリケーションから同じファイルが同時に書き込まれることはありません)。

私が知っているすべてのデータベースは、この方法では設計されていないため、共有ストレージでは使用できません。

代わりに、通常はクラスタ内のすべてのデータベースに接続し、同期はソフトウェアレベルで行われます。

+0

ありがとうございました!今はステートレスではないさまざまなサービスを持つ複雑な集団を計画しています。 1.共有ボリュームの使用を避ける。2.サービスが提供する場合はクラスタ機能を使用する。3.復元力の理由により、サービスの単一インスタンス(プロダクション内)を使用しないようにする。私が巡ったもう一つの問題は、(例えば)クラスタ化されたデータベースの1つが死んでも、同じマシンのノードプロセスがどのように反応するのでしょうか?私の答え:マシン全体を「病気」とマークして、完全に到達できない、または再開する必要があります。 – Munchkin

+0

dbコンテナをサービスとしてデプロイする場合、healthchecksを使用できます。したがって、コンテナがドッカーよりも実際には死んでいる場合、swarmはそれを強制終了し、数秒のダウンタイムを意味する新しいものをスクロールします。 mysqlを使用している場合、非常に簡単なクラスタリングソリューションで、多くのインスタンスを展開することができます。ガラーラクラスタを使用してすべてを同期させるので、1つでも問題はありません。 まだ準備が整っていませんが、数週間で完了する可能性があります。 https://github.com/vipconsult/percona-docker/tree/master/pxc-57 –

関連する問題