我想知道是否有办法在运行操作系统(例如 Ubuntu 12.04)的服务器磁盘的第二个分区上安装较新版本的操作系统,比如说 14.04(当它推出时),然后更改 grub 启动顺序并重新启动到新系统(减少服务器停机时间)?
设想:
第一个分区 - Ubuntu 12.04 - 正常运行
第二个分区 - 空
全新 LTS 上市
第一个分区 - Ubuntu 12.04(服务器仍在运行) - 在第二个分区上安装 14.04
第二个分区 - 安装正在进行中
安装后重启
第一个分区 - 旧系统(即将被清除)
第二个分区 - 服务器现在在 14.04 上运行(停机时间减少为一次重启)
有什么想法可以实现这一点吗? Puppet 能够实现这种自动化吗?
谢谢!
答案1
你可能可以但在我讨论这个之前,先考虑一下传统的方法:
等待非工作时间。服务员很少需要全天候运行,并且通常具有故障转移系统,允许您一次升级一台服务器,而无需任何停机时间。如果计划停机时间不是一小时,您可以安排升级。
将磁盘备份到您的第二个磁盘上。但是您已经定期进行这些操作了,对吗?
执行标准的 LTS 到 LTS 升级。修复所有损坏的内容并继续。服务器上的服务将尽可能保持活动状态(MySQL 等将在升级时自行重启,但它们通常会直接恢复)。
实现您所要求的唯一方法是使用虚拟机。您可以尝试轻量级 LXC 或 schroot 方法,但我认为您可能更愿意使用 VirtualBox,因为它比较老而且有文档记录。
安装它,创建一个具有近乎物理的原始磁盘访问权限的 VM,安装 Ubuntu 并设置好一切。我承认,如果您需要在升级过程中更改任何内容,这将为您提供很大的灵活性来重新配置。
另一种且唯一真正的高可用性方法是热替换/故障转移方法。启动一台全新的服务器,安装 Ubuntu,对其进行配置,同步数据(理想情况下,通过 NFS 从 SAN 在所有服务器之间共享数据,这样可以实现一定的原子一致性)并启动并运行。轻按开关,在新的微秒内,新服务器将取代旧服务器。
一种更现代的方法是在所有金属上进行虚拟化,这样即使您只有一台物理主机服务器,您也可以为新服务器创建另一个虚拟机并进行简单的软切换。
我认为第一种传统方法可以为您提供最大的安全性,而不会通过虚拟机之类的东西使现有的生产设置变得复杂(假设它们尚未到位)。