マスターファイルシステムのクローン+差分として機能する仮想ファイルシステム

マスターファイルシステムのクローン+差分として機能する仮想ファイルシステム

私の会社では、約 10 人の開発者が Ubuntu 開発サーバーを共有しています。コード ディレクトリは別々ですが、データベースのサイズ (約 50 GB) が大きいため、開発者ごとに MySQL データベースをクローンすることは現実的ではありません。そのため、現在は全員が 1 つのデータベースを共有しています。ただし、これが可能かどうか疑問に思っています。

50 GB のデータベースを保存するマスター ファイルシステム (ext4) を作成します。このファイルシステムでは MySQL サーバーは実行されず、実質的には読み取り専用になります。各開発者用に、マスター ファイルシステムを参照し、それに対する各変更の差分を保存する仮想ファイルシステムを作成します。各仮想ファイルシステムで MySQL サーバーを実行します。その後、各開発者は自分のデータベースを取得して、50 GB のデータベースを不必要に複製することなく、好きなように使用できます。

私は、mysql がデータをディスク上にどのように保存するかについては調べていませんが、ディスク I/O を最小限に抑えたいという要望から、日常的なテストで行った小さな変更によって仮想ファイルシステムに大きな差異が生じることはないと考えています。

具体的には、次のような質問があります。

  • このアーキテクチャは可能ですか?
  • これが私の目標を達成する最も簡単な方法でしょうか?
  • そのような仮想ファイルシステムはすでに存在しますか?

答え1

ご質問にお答えします(次回は参照しやすいように番号を付けてください)。

  • 可能だろう
  • 最も簡単な方法とは思えない
  • はい、そのような仮想 FS は存在します。

あなたのアイデアは、オーバーレイ既存のデータベース FS を「下位」ファイルシステムとして使用し、開発者ごとの「diff」FS を「上位」ファイルシステムとして使用できます。Overlayfs では、ディレクトリを「上位」および「下位」として使用できるため、必ずしもデータベースを異なるディレクトリにマウントする必要はありません。

次に、開発者ごとに異なるデータディレクトリを使用するように MySQL インスタンスを構成する必要があります。

最も簡単な方法は、勇気を出して、サーバーに 1 TB 程度のハード ドライブを装備し、開発者ごとに必要な回数だけデータベースをクローンし、開発者ごとに MySQL インスタンスを実行するか、1 つのインスタンスですべてのデータベースを管理することです。ここで開発者にとっての違いは、異なるポートを指定するか、異なるデータベース名を指定するかです。私の意見では、MySQL インスタンスを 1 つだけ持つ方が、可動部分が少なくなるので簡単です。

ここで考慮すべき要素は、overlayfs ソリューションの開発にどのくらいの時間がかかるか、そして特定のサーバー ハードウェアで 1 TB のハード ドライブにどのくらいのコストがかかるかです。時間にはコストがかかります。たとえば、1 時間あたり 50 ドル (ここでは非常に控えめに見積もっています) で 3 日間作業して合計 1200 ドルかかるとすると、ハード ドライブ ソリューションでは 2 時間の作業に加えて、おそらく一晩のデータベース同期が必要で、それを実行したら忘れてしまうと、1 TB のハード ドライブに 1100 ドルの予算がかかります。さらに、大容量ディスク ソリューションは「ハック」やトリックがないためメンテナンスが簡単です。これは、巨大なハード ディスクを備えた DB サーバーにすぎません。

もちろん、Ubuntu サーバーがどこかのクラウドにある場合は、1 TB のストレージ スライスのコストは高くなる可能性があります。それでも、決定を下す際にはコストと利益の分析を考慮してください。長期的にはお金と時間を節約できるかもしれません :)

関連情報