2017-02-26 17 views
3

現在、私はDocker Swarmクラスタを構築中です。 3人のマネージャーと3人の労働者で構成されています。このセットアップで展開するアプリケーションは、スケーラビリティのために複数のコンテナにコードが必要なラーベルバックエンドで構成されています。私は既に、GlusterFSボリュームとRex-rayをCephバックエンドで共有し、ボリュームの共有ストレージとして試しました。 GlusterFSは信頼できず、私の場合、Cephはちょっと残忍すぎて難しいです。:)Docker Swarm共有ボリューム

現在の設定は次のようになります。私はドッカーの外にペルコナクラスターを持っており、これらのサーバーでGlusterFSを実行し、Docker Workersにそれらを単にマウントします。

           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つのコンテナにしか搭載できないと思います。これは本当ですか?

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

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

EDIT:このケースでは、glusterは信頼性が低いのはなぜですか? Gluster上でドッカーボリュームを使用する場合、ボリュームドライバプラグインを使用すると、Glusterは信頼できません。ボリュームはサービスを作成するときにほとんどの時間にうまくマウントされますが、スケジュールで再スケジュールが発生した場合、ボリュームはほとんどマウントされません。私は何がうまくいかないかを判断するためにこれを後で調べますが、私は現時点で多くの自由時間を持っていません。 Glusterは実際には固いです。この場合ではない。

+0

GlusterFSがどのように信頼できないのか読者が理解することは興味深いでしょう。 – user239558

+0

私はこの日の後半では信頼できない理由を説明します。まずは自分の仕事を終わらせなければなりません:)しかし、それはGlusterでドッカーボリュームを作成することと関係があります。 –

答えて

0

私は以下のことを試していません。

あなたのコードはほとんどが読み取り専用なので、ファイルシステムのキャッシュが必要なのは私だけのようです。たとえばNFS上で実行されているCacheFS。

GlusterFSはNFSとしてマウントできるので、2つを組み合わせることができます。

3

私が最終的にやったのは、CephFSを使ってドッキングホストにマウントすることでした。書き込み速度はOKです。おそらくglusterfsと比較して優れています。 CephFSでは読み込みが非常に高速ですが、GlusterFSの場合もそうでした。

この設定は私のニーズに合っていますが、ホスト全体で共有ドッカーボリュームを使用することはできません。マウントされたファイルシステムをドッカーのコンテナにバインドする必要があります。これは世界の終わりではありませんが、私はまだ集団のすべてのホストにボリュームを持たせる便利で速い方法を探しています。

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

関連する問題