
Ubuntu 14.04 マシンには 3 つのフォルダーがあり、各フォルダーには 2KB ~ 30KB のサイズの 250K の画像が含まれており、ディレクトリあたり 1M のファイルまで増加すると予想されます。
アプリケーションを複数のサーバーに拡張しようとしているときに、共有ストレージとして Glusterfs を検討しています。250K のファイルは ext4 では問題になりませんが、glusterfs では問題があるようです。ファイルをコピーしようとすると、マシン全体がクラッシュします。
ファイルを 2 つのレベルのディレクトリに分割しようと考えています。
mkdir -p {000..255}/{000..255}
/000/000/filename
/001/000/filename
/001/001/filename
...
これは実現可能な良い方法のように思えますか? 全体の構造には後で何百万ものファイルが含まれます。これにより、何百万ものファイルをホストしながら、glusterfs が優れたパフォーマンスで本番環境で信頼できるものになるでしょうか?
答え1
GlusterFS を使用して非常に小さなファイルを大量に保存およびアクセスすることは、多くの実装が直面する困難ですが、ファイルを別々のディレクトリに分割するという、この問題を解決するための良い方法がすでにあるようです。
このようなソリューションを実装できます。ディレクトリをいくつか作成し、各ディレクトリに格納できるファイル数の制限を選択し、ファイルを配置する場所が不足しないようにします。例では 65,000 を超えるディレクトリを作成しているので、すぐに問題が発生する可能性は低いです。
もう 1 つのオプションは、ファイルが作成された日付に基づいてディレクトリを作成することです。たとえば、ファイルがcust_logo_xad.png
今日作成された場合は、次の場所に保存されます。
/gluster/files/2015/08/24/cust_logo_xad.png
異なるエンティティ (顧客、部門など) のデータをホストしている場合は、所有権に基づいてファイルを分離し、エンティティに何らかの一意の ID を割り当てることができます。例:
/gluster/files/ry/ry7eg4k/cust_logo_xad.png
それ以外にも、小さなファイルをホストするためのストレージ クラスターを調整するための GlusterFS ドキュメント。 少なくとも次の点を確認してください:
- GlusterFSストレージサーバ上のファイルシステムには、十分な空きinodeがある(
mkfs
オプション) - GlusterFS ストレージ サーバー上のドライブは、大量の IOP を処理できます。
- タスクに適切なファイルシステム(ext4 または xfs)を使用します
- アプリケーション/スタッフは、小さなファイルが多数含まれるディレクトリを頻繁にスキャンしようとしません。
可能であれば (まだ作成していない場合)、常にファイルをスキャン (例ls
) または検索 (例) するのではなく、ファイルのインデックスとして機能するデータベースを作成することをお勧めします。find