如何最大限度地减少 Linux 服务器重启

如何最大限度地减少 Linux 服务器重启

上周,关于slashdot 文章关于 Unix(或 Linux)机器是否需要重新启动。不少评论者提到,他们的机器正常运行时间长达数年。

据我所知,Linux 系统需要经常重启来应用内核补丁,尤其是安全相关的补丁(比如ac1db1tch3z 漏洞)。在“yum update kernel”之后运行 uname -r 似乎表明旧内核直到重新启动才会加载。

我的问题是,在这种情况下,这些设备如何实现多年的正常运行时间?我想到了一些可能的解决方案

  1. 这些机器并未投入生产或暴露给用户,因此安全补丁并不是什么大问题。
  2. 所有发帖者都使用实时修补服务,例如拼接
  3. 可以通过重新加载模块而不是整个内核来应用内核安全补丁。
  4. uname -r 在内核补丁之后反映了错误的信息,并且最终加载了更新的内核。

这些解释合理吗?还是我的理解有误?有没有其他方法可以最大程度地减少过去两年中需要的二十多次重启?

答案1

我认为唯一需要重启 Linux 机器的情况是更换内核。我有几台机器已经运行了 2 年多,但我根据“如果它没坏,就不要修理它”的原则来维护它们,这就是我实现正常运行时间的方法。当然,如果您的服务器暴露于外部威胁,您将需要定期应用安全修复程序,其中一些将需要新的内核。我不知道有什么方法可以在不重启机器的情况下可靠地做到这一点。这里可能有一些技巧,但很有可能您会在此过程中损害稳定性,并且您需要将机器置于单用户模式。从技术上讲,您将实现正常运行时间,但在此期间机器将无法供最终用户使用,那么有什么意义呢?

如果正常运行时间对您来说确实至关重要,那么您可能会对某种形式的 HA/集群解决方案感兴趣,因为您可以重新启动集群的一个节点而不会影响整个系统的可用性。否则只需重新启动即可。

答案2

一种解决方案是使用 ksplice。

如果您使用 Ubuntu 或 CentOS 内核,您可以订阅 ksplice.com 服务,只需支付少量费用,他们就会为您提供可用于修补正在运行的内核的特殊内核映像。大多数更新不需要重新启动。使用和设置相当简单。

如果您特别熟练,您可以使用 ksplice 补丁来构建您自己的启用内核,而无需订阅服务,或者用于非标准内核。

答案3

我拥有的服务器正常运行时间超过 1 年。这不是最佳实践,因为从安全角度来看,这些服务器...其中一些服务器是数据库主服务器,我们承受不起停机。

我认为安全应该是首要考虑的问题,但现实生活中也存在一些限制。如果你有条件,可以修补它,并在必要时重新启动。不要担心正常运行时间,安全总比后悔好。

我建议在重大升级后始终重新启动服务器以确保它能够重新启动,您不希望在意外重启后陷入困境。

答案4

尽量减少停机时间比尽量减少重启更重要。比如萨米尔说过,不及时更新内核补丁是一件坏事™。我有幸拥有负载平衡器(主要是因为我的雇主做的很多事情都在云端),所以我们进行滚动更新 — — 这让我可以更新 AppServer-1,将其从负载平衡器中拉出,重新启动,确保一切正常,告诉 LB,“好的伙计 AS-1 恢复了!”,然后继续处理其余的机器。

相关内容