我有一堆旧服务器(大约 30 台)运行未记录的代码,这些代码仍在 RHEL4 上运行。一些较新的服务器运行在 CentOS5 或 6 上,但大多数都是 RHEL4。经过安全审计,管理层最终同意需要采取一些措施,服务器需要迁移到本十年(或下个十年)的某个版本。这些服务器大多运行开源应用程序,如 cacti、mysql、php、apache、perl,其中一些具有 Oracle 绑定来查询此类数据库。
这当然意味着重新安装(在虚拟机上或者可能是容器化可以轻松完成的操作),但我还没有找到可以帮助我开始的计划/清单/自动化工具。
所以 - 我认为这大概需要完成:
- 目标操作系统 (CentOS8) 的全新安装 - 这可以在虚拟机中完成,转换为模板并根据需要进行部署
- 网络设置(ips、路由、iptables 规则、dns、ntp、snmp、ssh 主机密钥)需要移植。对于网络,我需要转换旧的 /etc/sysconfig/network-scripts/if-,路线-进入正确的 NetworkManager 配置。是否有工具可以自动执行此操作?
- 将旧用户及其主文件夹迁移到新服务器。我破解了一些东西,但需要测试(https://github.com/mad-ady/os-migration/blob/master/user-accounts-source.sh)。我还需要转移他们的 crontabs(本地邮件不重要)。
- 安装源上安装的缺少的软件包(我可以从 yum 历史记录中提取一些东西:https://github.com/mad-ady/os-migration/blob/master/yum-packages-source.sh,但 RHEL4 默认不使用 yum)。
- 从 /etc 中识别非默认配置,将其传输(并测试/调整)到新的 CentOS 版本。但不确定如何在原始主机上找到更改的配置...
- 转移旧应用程序、网站,进行逐步测试并根据需要进行更改(例如,旧版 mysql 的身份验证与新版不同)。尝试就地升级到新版软件(例如从 Cacti 0.8 -> 0.9 -> 1.0 等),同时保留旧数据、帐户等。
我正在考虑编写 ansible 剧本来完成所有这些工作,希望它能够使未来的升级更容易,但是编写剧本比实际进行一次性配置的开销更高,所以我不确定是否值得付出努力...
我确信我忘记了很多需要处理的事情,所以这是我的问题:
有没有推荐的方法来做这样的升级?有没有工具、脚本、程序可以帮助我减少麻烦?
谢谢您的任何建议!
答案1
看起来您是从未维护的 IT 环境中继承来的。
我认为,开发一个剧本来构建/配置新的 centos8 系统(包、网络 cfg、用户、ssh 密钥……)是值得的。
但是应用程序迁移必须手动完成,因为每种情况都不同。您必须了解应用程序如何启动(/etc/rc3.d 应该是一个很好的起点)、依赖项是什么(lib/packages)以及这些依赖项是如何安装的(tarball?package?)、是否有任何关联的 crontab、centos8 上有哪些新的 lib 版本、新库版本是否涉及任何应用程序代码更改、配置文件语法是否有任何更改。
尝试从旧生产构建应用程序矩阵,并为您确定的每个应用程序部署测试环境。一旦一切正常,您就可以考虑如何加快在新生产环境中的部署,以及处理数据迁移。
如果你一个人的话,这将是一项长期任务。我希望你的管理层愿意为得到帮助而付费。
祝你好运 !