如何最小化Linux服务器重新启动

上周,关于是否需要重新启动Unix(或Linux)机器的Slashdot文章有一些评论。 超过几个评论者提到机器的正常运行时间为几年。

据我所知,linux盒子需要经常重新启动以应用内核补丁,特别是安全相关的补丁(比如ac1db1tch3z漏洞利用 )。 在“yum更新内核”之后运行uname -r似乎显示旧的内核直到重新启动才加载。

我的问题是,这些盒子如何实现多年正常运行? 我想到了一些可能的解决scheme

  1. 这些机器不是生产和/或暴露给用户的,所以安全补丁不是那么重要。
  2. 所有的海报都使用Ksplice等在线修补服务
  3. 内核安全补丁可以通过重新加载模块而不是整个内核来应用。
  4. uname -r在内核补丁之后反映错误的信息,并且更新的内核被加载。

这些解释中的任何一个是否合理,或者我的理解中是否存在某些东西? 还有另外一种方法可以将过去两年来所需的二十多次重启最小化吗?

我认为唯一需要重启Linux机器的是replace内核。 我有几台机器运行了2年以上,但是我维护它们是基于“如果没有损坏,不修复”的原则,那就是我如何达到正常运行时间。 当然,如果你的服务器面临外部威胁,你将需要定期应用安全修复,其中一些将需要新的内核。 我不知道有什么方法可靠地做到这一点,无需重新启动机器。 这里可能有一些技巧,但是很有可能在这个过程中会损害稳定性,并且需要把机器变成一个用户模式。 您将在技术上达到正常运行时间,但在此期间机器将无法提供给最终用户,那么有什么意义?

如果正常运行时间对您来说非常重要,那么您可能会对某种forms的HA /群集解决scheme感兴趣,以便在重新启动群集的一个节点时不影响整个系统的可用性。 否则就重新启动。

一个解决scheme是使用ksplice。

如果您使用Ubuntu或CentOS内核,您可以订阅ksplice.com服务,只需要很less的费用,他们就可以为您提供特殊的内核映像,用于修补正在运行的内核。 大多数更新都不需要重新启动。 非常容易使用和设置。

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

我有服务器有1年以上的正常运行时间。 不是最好的做法,因为从安全angular度来看服务器…其中一些服务器是数据库主人,我们不能承受停机时间。

我认为安全应该是主要关心的问题,但是现实世界有一些局限性。 如果你有奢侈的补丁,并根据需要重新启动它。 不要担心正常运行时间,比对不起更安全。

我build议在重大升级之后总是重新启动服务器,以确保服务器恢复正常,并且不希望在意外重新启动后出现这种情况。

我们的店有一个很好的补丁/重新启动的政策。 保持安全的重要性衡量正常运行时间统计。 我们有一个定期的打补丁程序,以确保我们不会陷入一个坏事情发生的情况。

我们向集群计算的转变有助于确保重要的事情保持不变,而进行设置的工作绝对是值得的。

如果正常运行时间对维护客户服务至关重要,那么您应该查看负载平衡和集群。 您可以保持安全和冗余的环境以及服务正常运行时间。

如果你为了维权而牺牲安全,你很可能会损害你的客户。

最大限度地减less停机时间比减less重新启动更重要。 Sameer说,不跟上内核补丁是A Bad Thing™。 我拥有负载平衡器的优点(主要是因为我的老板所做的很多事情都在云端),所以我们会进行滚动更新 – 这可以让我更新AppServer-1,将其从负载平衡器中取出,重新启动,使确定一切正常,告诉LB,“OK的兄弟AS-1回来了!”,然后继续其余的机器。

你安装的东西越less,你需要修补的东西越less。 最大限度地减less安装(或者我喜欢考虑它:攻击面),可以走很长的路。 这不仅适用于软件包,也适用于内核configuration。 现在大多数发行版都是用每个可能的模块来编译的,这是远远不够的。 自定义内核可能是一个难以维护的问题,但是它们也可以得到回报,因为您确切知道内部的内容,并进一步降低了需要修补的可能性。

(披露:我为Canonical工作)

对于Ubuntu专门来说,Canonical现在在16.04提供实时内核修补。

自从4.0发布以来,它在上游Linux内核中使用了实时修补技术。