如何将 Linux 服务器迁移到新硬件

无论您是要升级到更强大的服务器、迁移到新区域还是添加新实例,通过实施正确的策略和了解正确的命令都可以使迁移 Linux 服务器变得更加容易。我们将讨论如何以最少的麻烦将您的服务器移动到新机器。
迁移策略
最简单、最有效的策略是蓝绿部署——让新服务器启动并运行,然后当它准备好生产时,将流量切换到它上面,并在确认没有问题后移除旧服务器。通过负载平衡,这个过程可以逐步发生,进一步减少可用性问题的可能性。
蓝绿部署涉及将旧服务器上的所有文件、包和代码复制到新服务器上。这可以像手动安装必要的包一样简单,例如 NGINX Web 服务器,然后从现有服务器复制配置。您还可以进行全盘备份,并从中创建新服务器。
当然,现在是考虑是否可以使用容器或自动缩放的最佳时机。通过复制底层数据卷(或使用 EFS 等共享数据存储),可以轻松停止、启动和迁移 Docker 容器。 Auto Scaling 因提供商而异,但如果您要添加服务器的新副本以满足不断增长的需求,它可能适合您的业务。您还可以在 AWS ECS 等许多平台上使用 Docker 容器进行自动缩放。
容器和自动缩放的设置需要你做很多与手动转移服务器相同的工作,例如自动安装包和你自己的代码,所以如果你计划在未来再次迁移,您现在应该考虑是否最好切换到容器或设置自动缩放。
如果您对容器感兴趣,可以阅读我们的 Docker 入门指南以了解更多信息,或者阅读我们的在 AWS 或 Google Cloud Platform 上使用自动缩放的指南。
安装包
如果您不太确定在旧服务器上安装了什么,最好的检查方法是获取所有已安装服务的列表。这将显示您需要安装的大部分主要内容:
service --status-all

首选列表服务的原因是因为已安装包的列表可能非常长,同时还安装了每个次要的依赖项。我的 Ubuntu 测试服务器安装了超过 72000 个软件包,因此考虑到在安装新服务器所需的主要服务时无论如何都会安装它们,所以它们的列表并不是很有用。
如果需要,您可以使用以下命令列出所有这些:
sudo apt list --installed
搜索特定包的包列表,您可以使用:
sudo apt -qq list program_name --installed
无论哪种方式,您都需要列出需要安装的软件包,并将它们安装在新服务器上。
使用 rsync 传输服务器的磁盘
您可以使用 tar
归档磁盘,但 tar
通常用于归档单个文件或目录,而不是整个磁盘。如果您要移动大量数据,您可能没有足够的空间在本地进行备份(也许这就是升级的原因!)。
在这种情况下,您需要使用 rsync
命令将数据直接上传到目标服务器。 rsync
将通过 SSH 连接并同步两个目录;在这种情况下,我们希望将本地目录推送到远程服务器,如下所示:
rsync -azAP /etc/nginx username@remote_host:/etc/nginx
这就是整个命令——您应该在传输时看到一个进度条(使用带有 -z
标志的压缩),完成后,您将在新服务器上的目标目录中看到文件.您可能必须多次运行此命令才能复制每个目录;您可以使用此在线 rsync
命令生成器为每次运行生成命令。
如果需要,您可以尝试将整个根文件系统复制到新服务器,但不包括一些系统文件:
sudo rsync -azAP / --exclude={"/dev/*","/proc/*","/sys/*","/tmp/*","/run/*","/mnt/*","/media/*","/lost+found"} username@remote_host:/
如果您只想备份几个目录,则可以使用简单的 tar
命令来生成单个文件存档:
tar -czvf nginxconfig.tar.gz /etc/nginx
这会输出一个文件,您可以使用 scp
或通过 FTP 将其传输到目标服务器。然后,将文件解压到目标目录:
tar -xzvf nginxconfig.tar.gz -C /etc/nginx
传输数据库
如果需要传输数据库,则需要备份并转储源数据库。对于 MySQL,这将是:
mysqldump -uUser -pPass -hHost --single-transaction database > backup.bak
对于 MongoDB,这将是:
mongodump --host=mongodb.example.net --port=27017
然后你需要在目标服务器上恢复数据库。对于 MySQL,这将是:
mysql -u [user] -p [database_name] < [filename].sql
对于 MongoDB,这将是:
mongorestore <options> <connection-string> <directory or file to restore>
对于其他数据库,你应该可以在网上找到相关的命令。
将 IP 切换到新系统
当然,您需要在继续之前验证一切是否按预期工作,但一旦完成,您将需要将流量切换到新服务器。
最简单的方法是更改您的 DNS 记录。更新后,客户端和服务将被发送到新服务器。不过这一切都是一次性发生的,因此如果您有负载均衡器,最好将流量缓慢转移到新实例。
如果您在 AWS 或具有弹性 IP 地址的类似提供商上,您可以交换地址以指向新服务器,这不需要 DNS 更新。在 EC2 控制台的弹性 IP 选项卡中,操作 > 关联弹性 IP 地址。

这将允许您修改关联,这将立即将流量交换到新实例。