热克隆活动的Linux服务


14

我们需要在Linux服务仍处于活动状态时对其进行热克隆,这不仅是因为我们无法重启或其他原因。这只是因为我们的特殊情况(是的,我已经阅读了这个答案,但是与我的Clone正常工作的Linux服务器有些不同)。

我们有一个计算节点,可以说是一个正在运行某些模型的NLP计算节点。当我们启动节点(当然有服务)时,计算将非常缓慢,直到我们多次喂入它为止。我们称它为热身。

不幸的是,热身工作要花很长时间等待我们(也许我们的计算在节点热身之前就完成了)。

因此,问题来了,有没有一种稳定的方法可以热克隆Linux服务器以使节点保持最佳性能,以便我们可以在更短的时间内克隆并使其联机?


将机器可视化并拍摄“热身”状态的快照会有用吗?
TripeHound

13
您了解为什么会发生这种热身吗?例如,这可能是文件缓存的副作用。但是对克隆机的一些答案会丢弃文件缓存,因为根据定义,缓存可以从底层原始文件中重建。
MSalters

fork()是一种在给定机器上创建更多进程,同时节省启动开销的方法。
另一个用户

谢谢@TripeHound的同事,我问了一个在VMWare工作的朋友,他说他们看起来不可能简单地快照“热身”状态,也没有任何镜像的东西。MSalters,我不确定100%在预热期间会发生什么,但是看起来在服务启动后,计算工作涉及到某些懒惰加载工作即可工作
chen steven

2
不了解您的后台设置,但这闻起来就像服务器永远都不会停机的情况。这表明您主机的内核可能是古老的,并且从未应用过更新。也许这表明需要考虑系统设计缺陷。
Criggie '19

Answers:


28

也许您不能“热克隆”整个服务器(可以,但仅当它是虚拟机时可以),但是可以使用criu,在用户空间中检查点/还原来冻结和还原单个进程。

这使您可以将程序的内部状态保存到磁盘并停止程序,然后再从保存的文件中将程序还原到该状态。

为了支持所需的操作,您可以将代表已保存程序的文件复制到另一台服务器,然后将其还原。

criu需要使用具有各种功能的最新内核,因此较旧的Linux发行版可能无法正常工作。您可以criu check在特定计算机上运行以确定criu的先决条件是否存在。


看起来很棒,我会对此做一些测试,谢谢兄弟
chen steven

根据您的经验,这在实践中效果如何?查看限制列表(这是我所期望的,这是一个很难的问题),我感到这不太可能与未考虑此用例设计的应用程序一起使用。
James_pic '19

@James_pic自从我认真使用它以来,已经有一年了,因为我目前没有使用它。对于仅接受连接并进行一些计算的守护进程(例如,OP的机器学习工作或Web服务器),它的工作原理非常好。
迈克尔·汉普顿

12

这可能超出当前环境的范围,但是实现此目的的行业标准方法是虚拟化服务器。许多虚拟化主机(VMware,virtualbox等)都允许保存服务器状态的“快照”,然后可以将其克隆到新实例中。这些新实例将具有与原始实例完全相同的状态,直到正在运行的进程为止。当然,您需要确保所运行的软件在虚拟环境中仍能正确运行(想到的是CUDA / GPU计算)。


除非软件(或其依赖项)需要更新,并且不提供优雅的重载机制,否则虚拟化是非常棒的。VM快照或实时迁移正在运行旧代码。
John Mahowald

在“真实”机器或虚拟化主机上运行项目对我来说都是可以接受的,并且我们可以采取多种方式来处理“旧”代码,例如A / B测试或滚动更新.etc。但是,您确定快照可以完全克隆我的工作节点的预热状态吗?
chen steven

3
当您“实时迁移”计算机时,需要暂停它。暂停时,将其内存1:1复制到群集中未暂停的另一台计算机上-完整无缺。这可能需要一些时间,具体取决于正在使用的内存量以及网络结构的速度。如果它调用的停机时间足够满足您的需求,则可以使用此方法。
后台打印程序

@chensteven我最近来自virtualbox环境。那是前一段时间,但是据我所记得,正在运行的快照包含了拍摄快照时虚拟机的确切状态,包括正在运行的进程和内存内容。然后可以将此快照克隆到新的虚拟机,使两台计算机处于完全相同的状态。
cawwot

3

您提到的问题是指向http://www.linuxfocus.org/English/March2005/article370.shtml的链接,该链接描述了我想象中的处理请求的所有方式。

那里的选项并不意味着服务器上正在运行的东西很多。您必须考虑到,在克隆过程中可能更改的所有文件在目标计算机上可能都是不一致的文件。在那篇文章中,您提供给他们讨论数据库的问题,并且像这样克隆数据库并不能保证数据的完整性。

您不清楚“直到我们多次喂食它”的意思

但是,如果我理解您的要求,则必须考虑到要克隆系统,它需要时间来复制和计算资源。

要执行“ ON / OF”或更好的称为活动/备份环境,必须在群集中正确配置服务器。

很抱歉,如果不是您期望的答案,那么您可以选择的就是这些。


让您在这里有点困惑是我的错,“提要”的东西意味着,在我的服务启动之后,我们需要多次调用计算任务,以确保节点被“热身”以达到最佳性能。因此,这里的问题就像是动态克隆或扩展我们的现有工作,好像有大量请求到达我们的系统一样,我们没有足够的时间来建立新的计算节点(预热需要太多时间)处理它们,你知道,就像波浪袭来
陈史蒂芬

1

您尝试做的事情有很多潜在的问题,当然,正如您所知道的那样,最好使服务器脱机并克隆它,同时不动态存储任何数据。

但是,正如我之前所做的那样,您寻求做的事情完全是合理的。如果使用dd,则可以将整个服务器在块级别克隆到另一个驱动器或另一个服务器。但是,这将需要在新服务器上进行一些其他设置,并且您可能无法简单地关闭另一个服务器并打开新服务器。为了使我们理解这一点,我们需要了解有关服务器硬件和软件的一些知识。

首先,为了确定最佳数据策略,了解定期更新的内容将很有帮助。您是否具有动态更新但具有静态内容的SQL Server?另外,您是否有像git这样的颠覆系统开发人员团队向您的内容发送持续的数据更新?根据更新内容,确定最佳的完整操作过程。

例如,如果仅SQL定期更新,则可以通过以下方式迁移到新服务器,同时该服务器处于活动状态:

  • dd 将所有数据克隆到新服务器。
  • 开始设置新服务器,可能需要一些工作,尤其是在使用不同硬件的情况下,但仍可能比从头开始安装要快。
  • 这可能还需要进行一些DNS更改,因为如果需要在第一台服务器仍处于活动状态的第二台服务器上运行,则不能在另一台服务器上使用同一DNS。
  • 新服务器完成并独立运行之后,对原始服务器上的sql服务器进行最终备份,然后将其导入新服务器。

您可能需要暂时使原始服务器脱机,以确保不会丢失任何数据。或者,要使停机时间为零,您可以使第二个停机时间生效,将dns指向新服务器,然后在新服务器上手动更新任何dns条目,因此实际上停机时间为零。尽管要备份sql并将其还原到新服务器,这比几分钟的停机时间更为麻烦,但是对于停机时间来说可能是必要的。

当然,这只是一个用例示例,根据您的配置和几个变量,您可能需要根据具体情况为迁移创建自己的策略。

另一个问题与服务器硬件配置有关。新服务器的硬件与旧服务器是否100%相同?如果是这样,则设置会更容易。但是,如果另一方面,它是一个完全不同的硬件配置,则您可能需要实施不同的策略,该策略是简单地提前设置第二台服务器,然后将所有数据和sql数据库备份到第一台服务器并手动迁移它们,并根据需要更改配置。

服务器迁移绝非易事,要想成功迁移,您需要对服务器或拥有相同服务器的人员有深入的了解。无论如何,强烈建议您立即进行一次完整备份,并将其存储在第三个源上,甚至存储在本地计算机上,这样,如果发生最坏的情况(两个服务器都崩溃并且无法修复地死掉),您仍然还有另一个数据副本以重建服务器。

希望这对您有所帮助,并祝您服务器迁移顺利!

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.