3

現在、Docker Swarm クラスターを構築しています。マネージャー 3 名と作業員 3 名で構成されています。このセットアップでデプロイするアプリは、スケーラビリティのために複数のコンテナーでコードを必要とする laravel バックエンドで構成されています。ボリュームの共有ストレージとして Ceph バックエンドを使用して、GlusterFS ボリュームと rex-ray を既に試しました。GlusterFS は信頼性が低く、私の場合、Ceph は少し過剰で難しすぎます :)

現在の編成はこんな感じ。Docker の外部に Percona クラスターがあり、これらのサーバーで GlusterFS を実行し、それらを Docker ワーカーにマウントするだけです。

                                                Docker Managers
+-------------------------------------------------------------+
|                                                             |
|   +---------+   +---------+   +---------+    +---------+    |
|   |         |   |         |   |         |    |         |    |
|   | HAproxy +---+ HAproxy +---+ HAproxy +----+   SSL   |    |
|   |         |   |         |   |         |    | Manager |    |
|   +----+----+   +----+----+   +----+----+    +---------+    |
|        |             |             |                        |
+-------------------------------------------------------------+
         |             |             |
         |             |             |           Docker Workers
+-------------------------------------------------------------+
|        |             |             |                        |
|   +----+-------------+-------------+--------------------+   |
|   |                                                     |   |
|   |                      Applicaties                    |   |
|   |                                                     |   |
|   +---+--------------+---------------+--------------+---+   |
|       |              |               |              |       |
|       |              |               |              |       |
|   +---+----+     +---+----+     +----+---+     +----+---+   |
|   | Mysql  |     | Mysql  |     | Mysql  |     | Mysql  |   |
|   |   LB   +-----+   LB   +-----+   LB   +-----+   LB   |   |
|   +---+----+     +----+---+     +----+---+     +----+---+   |
|       |               |              |              |       |
|       +---------------+-------+------+--------------+       |
|       |                       |                     |       |
+-------------------------------------------------------------+
        |                       |                     |
        |                       |                     |
        |                       |                     |
+-------+--------+     +--------+-------+    +--------+-------+
|                |     |                |    |                |
|    MySQL01     |     |    MySQL02     |    |    MySQL03     |
|    Gluster01   +-----+    Gluster02   +----+    Gluster03   |
|                |     |                |    |                |
+----------------+     +----------------+    +----------------+

次に、これらを次のように php コンテナーにマウントします。

--mount type=bind,source=/mnt/client-data,target=/var/www/html/

これは機能しますが、非常に遅いです。ページの読み込み時間は約 10 秒です。ファイルがマウントされていない (コンテナーに存在する) 場合、ページの読み込み時間は約 2 ~ 3 秒です。

私は Flocker について調べましたが、これは非常に興味深いように思えますが、flocker ボリュームは 1 つのコンテナーにしかマウントできないと思います。これは本当ですか?

私が現在試しているもう 1 つの解決策は、新しいコンテナーが作成されるたびにコードが git からプルされるというものです。これは実際には良い解決策ですが、コードをプルして composer を実行するのに約 5 分かかり、更新をプッシュするときはすべてのコンテナーを再起動する必要があります。

複数のホスト上の異なるコンテナー間でコードを共有するための最適なソリューションは何ですか? (またはデータセンターでさえ)現在、多くの異なるストレージバックエンド(Ceph、NFS、gluster)にアクセスでき、新しいものを作成することは問題ありません.

編集: この場合、gluster が信頼できないのはなぜですか? 上で間違って言ったかもしれません...ボリュームドライバープラグインを使用して、Glusterでdockerボリュームを使用すると、Glusterは信頼できません。ほとんどの場合、サービスの作成時にボリュームが適切にマウントされますが、swarm で再スケジュールが発生した場合、ボリュームが再びマウントされることはめったにありません。後でこれを調べて何が問題なのかを判断しますが、現時点では自由な時間があまりありません。実際、Gluster はしっかりしています。この場合だけではありません。

4

2 に答える 2

3

私が最終的にやったのは、CephFSを使用して、これをドッカーホストにマウントすることです。書き込み速度は問題なく、glusterfs と比較すると優れているかもしれません。CephFS での読み取りは非常に高速で、GlusterFS の場合も同様でした。

このセットアップは私のニーズに合っていますが、ホスト間で共有 Docker ボリュームを使用できません。マウントされたファイルシステムを docker コンテナーにバインドする必要があります。これは世界の終わりではありませんが、群れ内のすべてのホストにボリュームを配置するための便利で迅速な方法を探しています。

現在、要件を満たすために、CephFS 用の Docker ボリューム プラグインを構築しようとしています。誰かが興味を持っている場合に備えて、これを更新し続けます。

于 2017-03-21T09:36:47.240 に答える