我在 Linux 下为大型(~10GB)闭源服务在每台机器上运行多个实例。有没有办法让安装之间的公共文件不占用太多空间?(几乎所有安装都是所有安装的公共文件)。我考虑过制作一个大的硬链接树,但每个安装都运行自己的自动更新程序,因此最终可能会出现不一致的情况。
答案1
听起来你需要一个支持重复数据删除的文件系统。
如果没有支持重复数据删除的本机文件系统,您可以考虑通过 NFS 托管您的数据并将其放在 ZFS 上,这样每个新副本就不会占用太多额外的空间。
答案2
这几乎完全取决于您的软件架构。假设您有权访问源代码和程序背后的程序员,您可以与开发人员交谈,看看是否有办法共享通用数据。但如果每个程序都使用自己的数据库或类似的东西,那么您就没那么幸运了。
否则,您可以将数据存储在某种 NAS 或 SAN 上,并将公共信息保存在公共位置。
但是,如果程序不是为此设计的,我绝对不会冒险。你会破坏事物并给自己带来更多问题。
答案3
我有一个认为可能类似的应用程序。
我运行了某个特定应用程序的约 30 个实例,每个实例都在 vsphere 下自己的 VM 上运行。每台服务器共享相同的 vmdk 文件,用于应用程序数据存储(约 12 GB),该文件配置为独立/非持久性(这导致数据仅在重新启动后才持久,而不是关闭)。符号链接已到位,将应用程序指向非持久卷上的数据文件。应用程序状态和我们需要持久的数据被写入另一个单独的卷。
当数据集发布更新时,假设我们无法关闭虚拟机(或没有维护窗口),我们只需将更新推送到非持久性存储,因为更改是非持久性的且特定于虚拟机的(至少在下次关闭之前)。然后在下一个可用的更改窗口期间,我们最终可以更新支持 vmdk。
在开发过程中,我们已经多次通过热移除/热添加磁盘进行实时操作,而虚拟机从未关闭,但这可能不是我们在生产中可以做的事情。
显然,只有当您有某种方式虚拟化您的应用程序,并且有某种方式控制您的应用程序的更新方式时,这才有效。