![无需关闭即可升级过时的 Linux 生产服务器](https://linux22.com/image/745849/%E6%97%A0%E9%9C%80%E5%85%B3%E9%97%AD%E5%8D%B3%E5%8F%AF%E5%8D%87%E7%BA%A7%E8%BF%87%E6%97%B6%E7%9A%84%20Linux%20%E7%94%9F%E4%BA%A7%E6%9C%8D%E5%8A%A1%E5%99%A8.png)
我与一位想要设置监控基础设施的客户合作过。我遇到的问题是,很多服务器使用的内核版本非常老旧(大约 2012-2013 年),而我设置的监控系统需要较新的内核版本。
我知道有一个解决方案,可以安装内核并将其重新加载到内存中,但这仍然需要系统具有某种形式的重置。
这些服务器是生产服务器,我们不能让它们因任何原因在任何时间内停机。
此外,这些服务器大多数都是 CentOS6 和 7,还有少数 CentOS4 和 Debian8
我最好的前进路线是什么?其他大公司如何保持其生产服务器的最新状态?
答案1
100% 正常运行时间是无法实现的。他们的业务连续性计划并不完整或不切实际,即使他们认为如此。
定义他们实际上愿意为哪些可用性付费。尽可能少的停机时间意味着需要多个节点,例如负载平衡器或集群。滚动升级意味着即使一台主机重新启动,服务仍可用。这是很健康的做法,因为它可以测试主机是否可以重新启动并恢复。
为了减少 Linux 主机的重启次数,请实施实时修补。实施和维护实时修补需要大量的内核发布工程工作。此类内核更新在 CentOS 中不免费提供。查看 RHEL 或CloudLinux 的 KernelCare。
内核实时修补对所有程序使用的共享库没有帮助。尤其是 libc。升级 libc 后,您应该重新启动所有服务,此时最好重新启动。
实时修补也无助于终止发行版。CentOS 4 已死,重大升级是负责任的做法。
答案2
其他大公司如何保持其生产服务器的最新状态?
我们有允许我们重启服务器的环境,您想到的东西(可能是 ksplice)确实在某种程度上有效,但您需要一个已安装并运行的基本操作系统才能使用它。否则,您需要重启和/或重建。
答案3
Chopper3 告诉你的是正确的。KSplice 让你在某些操作系统上做到这一点,我认为是 Oracle Linux。对于像 RedHat 和 CentOS 这样的操作系统,该工具称为 KPatch.... 基于 Debian 的发行版可能有类似的,你必须搜索...
也就是说,您需要在内核更新之前安装它,所以就像 Josehp 所说的那样,无论如何您都需要重新启动。您可能需要查看 kpatch 或 ksplice 文档。
这是 RedHat 的 DOChttps://access.redhat.com/solutions/2206511 。
不过,我认为您的机器操作系统版本/内核太旧了……我想说,如果可能的话,您可以启动一些新的虚拟机或披萨盒,从头开始/迁移到这些新机器。除非您需要运行旧版应用程序,否则请保持内核和发行版为最新版本……不仅为了可用性,也为了安全性。
否则,您将需要重新启动...
此外,Chopperr3 提到的“他的环境允许他这样做”是指他的应用程序可能在集群或类似的环境中运行,允许他同时重新启动 1 台或多台机器,而不会影响或导致他的应用程序关闭......(我想).....