我正在寻找在一对 linux 服务器之间以高可用性方式共享单个文件的最简单方法。(版本和发行版并不重要,我正在寻找一个通用的解决方案。)
我有两台服务器,每台都有自己的本地磁盘和 NFS 共享以及它们之间的其他服务。我有一个两个服务器都需要访问的文件,但除了这些服务器之外没有其他需要访问它的文件。
如果任一服务器崩溃,我希望该文件的最新可能内容可用于其余服务器。(显然,其他服务器应该在恢复时获取更改。)
该文件是一个状态文件,一次可能只有一个服务器会写入它。状态文件大小未知,但很小。大概在1块到2M之间。状态文件的大小可能会根据停机时间的长短而增长。
在不添加外部硬件的情况下,像这样的高可用性文件共享有哪些选择?
有很多解决方案——对于一个文件,我可能会使用 GlusterFS——但我认为你应该有 3 台服务器用于仲裁,否则你将不得不在恢复时解决脑裂问题。您应该能够在每个流行的发行版上轻松安装它,并且配置它不超过一小时。
如果这对服务器以冷热方式运行(即,一次只有一个服务器访问文件),DRBD是一种快速而稳定的方式来实现您的目标。DRBD 的设计具有脑裂保护,因此它应该“足够好”。
来自 DRBD 网站的简短介绍:
由于这是块级复制,因此您需要一些额外的配置。例如,您必须在复制的设备上创建一个文件系统,并且您需要挂载该文件系统。默认的推荐配置只允许一台主机挂载文件系统(以避免出现脑裂情况),因此您一次只能访问一个节点上的数据。
整个过程都有很好的记录,并且还有一些简单的指南可用。
如果您更喜欢自动化,Pacemaker + DRBD是一个非常常见的组合,它甚至记录在Pacemaker 指南中,这也是 DRBD 本身的一个很好的介绍。
PS 有趣的是,我在上面链接的 DRBD 起搏器指南几乎完美地描述了您的问题。