题 为什么在主流版本的Red Hat和CentOS之间升级如此困难?


“我们可以将现有的生产EL5服务器升级到EL6吗?”

一个简单的请求来自两个客户 全然 不同的环境促使我通常的最佳实践回答“是的,但它需要协调 重建所有系统” ...

两个客户都认为完全重建他们的系统对于停机和资源原因来说是一个不可接受的选择......当被问到为什么有必要完全重新安装系统时,我没有得到更好的答案,“这就是它的方式......”

我不是要引出有关配置管理的回应(“Puppetize 一切并不总是适用)或客户应该如何更好地计划。这是一个在生产能力上不断发展壮大的环境的真实例子,但是没有看到转向下一版操作系统的干净路径。

环境A:
非营利组织 40 x Red Hat Enterprise Linux 5.4和5.5 Web,数据库服务器和邮件服务器,运行Java Web应用程序堆栈,软件负载平衡器和Postgres数据库。所有系统都在位于不同位置的两个VMWare vSphere群集上进行虚拟化,每个群集都有HA,DRS等。

环境B:
高频金融交易公司 200 x CentOS 5.x. 多个共址设施中的系统,负责生产交易操作,支持内部开发和后台功能。交易服务器运行在裸机商用服务器硬件上。他们有很多 sysctl.confrtctl,中断绑定和驱动程序调整,以降低消息传递延迟。有些具有自定义和/或实时内核。开发人员工作站也运行类似的CentOS版本。


在这两种情况下,环境都按原样运行。升级的愿望来自对EL6中可用的新应用程序或功能的需求。

  • 对于非营利性公司而言,它与Apache,内核以及一些能让开发人员满意的事情联系在一起。
  • 在交易公司,它是关于内核,网络堆栈和GLIBC的一些增强,这将使开发人员感到高兴。

两者都是不能轻易打包或更新的东西 彻底改变操作系统

作为系统工程师,我感谢Red Hat建议在主要版本发布之间移动时进行完全重建。一个干净的开始迫使你重构并注意沿途的配置。

由于对客户的业务需求很敏感,我想知道为什么需要这样做 繁重的任务。 RPM打包系统不仅能够处理就地升级,而且还有一些细节可以帮到您: /boot 需要更多空间,新的默认文件系统,RPM可能会破坏升级中期,已弃用和已解散的软件包......

这里的答案是什么?其他发行版(基于.deb,Arch和Gentoo)似乎具有这种能力或更好的路径。假设我们找到完成此任务的停机时间了  办法:

  • 当EL7发布并稳定时,这些客户应该怎么做才能避免同样的问题?
  • 或者这是一个人们需要每隔几年辞去全面重建的情况?
  • 随着企业Linux的发展,这似乎变得更糟......或者我只是在想象?
  • 这是否阻止了任何人使用Red Hat和衍生操作系统?

我认为存在配置管理角度,但我看到的大多数Puppet安装都没有很好地转换为具有高度自定义应用服务器的环境(环境B. 可以有一个服务器 ifconfig 产量 看起来像这样)。听听关于如何使用配置管理帮助组织克服RHEL主要版本的建议,我会很有趣。


70
2017-11-15 15:14




当我看到作者的名字和代表时,我打算将此标记为“不具有建设性”,并且出于尊重,我不会这样做。我仍然认为这是一个愚蠢的问题,因为答案是“红帽决定它应该如此”。通过DVD启动完全可以实现4-> 5次升级,并且有一些程序可以使用实时操作系统 yum,大部分时间都适合我。我唯一的希望是RH已经采取了 巨大 他们决定没有支持的升级路径5-> 6,他们的付费客户会痛苦地反击,并会重新考虑6-> 7。 - MadHatter
也就是说,你知道有一个工作不受支持的升级路径,通过DVD启动从C5-> C6使用 upgradeany 启动时参数,是吗?我已经测试了两次,一次是干净的C5安装,它工作正常;曾经在(一个)古老的“测试副本”“曾经是C4并且升级了”安装失败了。 - MadHatter
我很清楚升级的选项,并且肯定使用实时RPM方法强制安装(更改仓库, *-release files 和所有)。但本周客户提出的问题让我更多地考虑了环境在特定版本中的根深蒂固,并且没有任何出路。 - ewwhite


答案:


(作者注:此答案涉及RHEL 6和之前的版本.RHEL 7现在具有RHEL 6完全支持的升级路径,其详细信息最后。)


首先,我应该注意到有 两种方式 进行就地升级:

  1. 放入安装DVD(或通过iLO / iDRAC使用DVD映像),从中启动并选择升级,例如, linux upgradeany
  2. 更新 redhat-release 手动RPM,运行 yum distro-sync (这有点过分简化了)并重新启动。

方法1仅是不受支持的。方法2适用于真正的牛仔队。除了推荐的全新安装,我还做了这两个......


我需要支持吗?

支持 在我们的世界中有两个互补的意义。第一个是产品具有给定的功能(例如“Postfix支持SMTP”)。第二是供应商会和你谈谈它。从上下文来看,哪个定义并不总是清楚的。

要完成一项任务,你显然需要第一种意义上的支持。供应商支持的来源是帮助您解决问题并向供应商提供有关哪些功能需要存在或需要改进的反馈。当许多网站拥有内部专业知识来解决可能出现的任何问题,比供应商更快,甚至更便宜时,许多网站都会为供应商提供支持。是否购买供应商支持最终是您必须做出的商业决策(或建议管理层)。


为什么不进行就地升级?

这是 红帽说的是什么

Red Hat不支持任何主要版本的Red Hat Enterprise Linux之间的就地升级。主要版本由整数版本更改表示。例如,Red Hat Enterprise Linux 5和Red Hat Enterprise Linux 6都是Red Hat Enterprise Linux的主要版本。

主要版本的就地升级不会保留所有系统设置,服务或自定义配置。因此,Red Hat强烈建议在从一个主要版本升级到另一个主要版本时进行全新安装

他们进一步警告:

但是,在选择升级系统之前,请注意以下限制:

  • 由于各种配置文件格式或布局的更改,单个程序包配置文件在执行升级后可能会或可能不会起作用。
  • 如果您安装了Red Hat的分层产品之一(例如Cluster Suite),则可能需要在Red Hat Enterprise Linux升级完成后手动升级。
  • 升级后,第三方或ISV应用程序可能无法正常运行。

当然,他们然后描述了如何通过方法1进行就地升级,以防万一你真的想要这样做。该功能存在且Red Hat将开发时间放入其中,因此支持该功能存在。但如果出现问题,Red Hat会告诉你安装新的;他们不会为因升级而中断的事情提供供应商支持。

为了记录,我从来没有真正遇到过RHEL / CentOS或Fedora系统的就地升级问题,我无法自行解决。典型的问题来自重命名的软件包,第三方存储库以及软件包的i386和x86_64架构之间偶尔的版本不匹配。安装程序在处理这些方面要好一些 yum, 我认为。


我该如何升级?

我一般警告人们应该这样做 计划 在每3-4年一次的维护窗口上,将RHEL系统从一个主要版本更新到下一个版本。虽然升级通常很顺利,但总会发生意外情况。

对于您的两个环境,我希望就地升级可行,但我强烈建议您先彻底测试它。 P2V是服务器的代表性示例,并在虚拟系统上运行就地升级,以查看您将遇到的问题。然后,您可以根据对将要发生的事情的更好了解来规划实际的生产升级。

对于像这里一样的大型部署,请考虑使用Limoncelli的“一对多”方法。升级一台机器,看看发生了什么问题,解决它们,然后使用升级小批量机器时学到的经验教训,重复学到的经验教训,然后当你相信你已经解决了所有问题时,升级大批量的机器。

在这样的时候,我还建议您仔细查看应用程序部署过程。如果它没有足够的自动化,你可以用一个命令启动它并且合理地确定应用程序将被正确部署,那么开发人员可能需要开始工作。拥有这样的部署过程可以更容易地重新安装新版本的EL,然后部署到它上面。


转换发行版会有帮助吗?

基于Debian的发行版确实有一个支持的就地升级方法,它主要起作用,但它不能免于问题。很多事情都为人们所打破 从Ubuntu 10.04 LTS升级到12.04 LTS 例如,通过支持的方法。目前尚不清楚Debian或Canonical是否正在为“支持”这一功能投入足够的开发时间,即确保其有效。如果您希望有人握住您的手,您实际上仍然需要为此分发购买供应商支持。所以我怀疑你转换到这样的发行版会获得多少收益。

您可以通过切换到Gentoo或Arch等滚动发布版本来获益。但是,这也不会让你对问题免疫;它只是意味着您必须在服务器的整个生命周期中不断处理升级问题(例如,无论何时您或开发人员决定在系统上更新某些内容),而不是在计划良好的分发升级时间内立即处理。您也没有供应商提供支持。


未来该何去何从?

Fedora项目正在开发一种改进就地升级的工具。他们有一个名为的工具 preupgrade 被遗弃了 并替换为一个名为的新工具 美联储从Fedora 18开始。这已添加到RHEL7和现在 就地升级得到全力支持, 至少 从RHEL 6到RHEL 7。根据我自己的经验,我可以说 fedup 还有一些问题,它正在成为一个非常有用的工具。

CentOS也正在试验 滚动释放类型的存储库,但它仅适用于次要版本(例如6.3-6.4)。


41
2017-11-15 17:09



调用新的Fedora升级工具 忍无可忍。对于主要的升级,三到四年对我来说听起来很激进,必须安装我在RHEL的10年生命周期中看到更多,所以我鼓励更多的定期小升级。 - Dominic Cleal
对于持续需要新功能的人来说,3 - 4年太长了。 - Michael Hampton♦
简单的事情,如PHP,Apache,内核修订和GLIBC ......人们倾向于更频繁地想要这些更改。 - ewwhite
Debian / Ubuntu的升级过程并不完美,但事实上它是首选的升级机制,Red Hat没有官方支持的升级机制,这对我来说很有说服力。 - Paul Gear
现场升级不是很明显,就像他们显然那样,但是相应的供应商是否为他们提供支持。 - Michael Hampton♦


我对你最后一段的看法:

我认为有配置管理角度,但我看到的大多数Puppet安装都没有很好地转换为具有高度自定义应用服务器的环境(环境B可能有一个服务器,其ifconfig输出如下所示)。听听关于如何使用配置管理帮助组织克服RHEL主要版本的建议,我会很有趣。

我认为配置管理系统的真正价值,特别是在环境B的环境中,它们提供了独立于运行它的服务器构建服务的工具。如果CMS不用于创建现有服务,那么它可能无助于重新创建服务。

我知道这并不能解决您当前的问题,但对我来说,这源于组织在服务器而不是服务方面的思考。在以服务为中心的思维中,只要服务继续运行,就不需要维护单个服务器的个性。如果以规范的方式使用CMS来构建整个服务,那么将该服务移动到另一个系统应该相对简单,因为所有机器的个性都将由CMS构建。

附:我不确定在这种情况下ifconfig输出有什么重要意义 - 它是由配置文件和一些脚本产生的(否则它不会在启动时出现),如果需要,可以由CMS管理。


5
2017-11-20 22:28



一般意义上说服务与服务器是对的。环境B具有一些与上游提供程序接口的专用服务器硬件(10GbE NIC,卸载库)。这是无法在没有停机的情况下进行负载平衡或轻松移动的东西。非财务示例可能类似于作为某些相关生产机器的控制器附加的服务器。特殊情况,可能使用专用PCIe接口卡。非常多的服务器独有的一次性设置。在Puppet中,您是否会说:“这是这个主机/角色的配置”并与之共存? - ewwhite
同意,有些事情并不容易适合一般情况,特别是如果你有一个具有特定硬件要求的环境。有了木偶,尽可能多地推动这个角色是有道理的。但最终它必须工作,所以如果不太优雅的东西使它工作,那么我只是生活在它不优雅。很多时候,我们不得不忍受那些不优雅的东西,因为我们没有时间让它们“正确”。 - Paul Gear