在我的公司,大约有 10 名开发人员共享一个 ubuntu 开发服务器。我们有单独的代码目录,但由于我们的数据库大小(约 50 GB),为每个开发人员克隆 mysql 数据库是不切实际的。所以现在,我们都共享一个数据库。但是,我想知道这是否可行:
创建一个存储 50 GB 数据库的主文件系统 (ext4)。此文件系统上不会运行 mysql 服务器,并且实际上为只读。为每个开发人员创建一个虚拟文件系统,该虚拟文件系统引用主文件系统并存储每个更改的差异。在每个虚拟文件系统上运行一个 mysql 服务器。然后,每个开发人员都可以使用自己的数据库来做任何他们想做的事情,而无需不必要地复制 50 GB 数据库。
我还没有研究过 mysql 如何在磁盘上存储其数据,但是由于希望尽量减少磁盘 i/o,我怀疑我们在例行测试中所做的小改动不会在虚拟文件系统中产生巨大的差异。
具体来说,我的问题是:
- 这种架构可能吗?
- 这是实现我的目标最简单的方法吗?
- 这样的虚拟文件系统是否已经存在?
答案1
回答您的问题(下次,请对问题进行编号,以便于参考):
- 应该可以
- 听起来不是最简单的方法
- 是的,这样的虚拟FS确实存在。
你的想法听起来像是覆盖文件系统。您可以将现有数据库 FS 用作“下层”文件系统,将每个开发人员的“diff”FS 用作“上层”文件系统。Overlayfs 允许使用目录作为“上层”和“下层”,因此您不必将数据库挂载到不同的目录中。
然后您需要配置每个开发人员的 MySQL 实例以使用不同的数据目录。
到目前为止,最简单的方法是硬着头皮上,为你的服务器配备一个 1 TB 的硬盘,为每个开发人员克隆数据库,然后为每个开发人员运行一个 MySQL 实例,或者让一个实例管理所有数据库。这里对开发人员的不同之处在于指定不同的端口和不同的数据库名称。在我看来,只有一个 MySQL 实例会更简单,因为这意味着更少的移动部件。
这里要考虑的因素是开发 overlayfs 解决方案需要多长时间,以及 1 TB 硬盘对于您的特定服务器硬件的成本是多少。您的时间是有成本的;如果您打算以每小时 50 美元(这里非常保守)的价格工作 3 天,总共 1200 美元,而硬盘解决方案意味着 2 小时的工作加上可能是一个您可以一劳永逸的夜间数据库同步,那么您将有 1100 美元的预算用于 1 TB 硬盘。此外,大磁盘解决方案的维护更容易,因为没有“黑客”或诡计;它只是一个带有巨大硬盘的 DB 服务器。
当然,如果您的 Ubuntu 服务器位于云中,那么 1TB 存储切片的成本可能会更高。不过,请考虑成本/收益分析以做出决定;从长远来看,您最终可能会节省金钱和时间 :)