我需要克隆一个正在运行的 Linux 服务器。我们无法关闭正在运行的服务器。有什么方法可以克隆它并将其部署到另一台服务器上吗?
答案1
复制磁盘、文件系统或文件的方法有很多。通常,复制文件系统可以为您提供一个良好的克隆,并且具有灵活性,即在目标系统上的大小可以略有不同。如果目标系统运行某种实时 Linux(knoppix、ubuntu live 等),从 cdrom 启动,您可以使用 fdisk 或您最喜欢的分区应用程序在磁盘上创建分区。假设您在源系统上运行了 SSH 服务器,请采取类似以下方法:
http://www.linuxfocus.org/English/March2005/article370.shtml
神奇的事情就发生在这个命令中:
ssh sourcePC 'dump -0 -f - /' | restore -r -f -
当使用任何特定方法在实时 Linux 环境中克隆磁盘时,您唯一关心的可能是数据库。备份和恢复数据库的最佳方法是使用其转储工具在文件系统转储之前制作数据库的 ascii 文件快照。对于 mysql,有:
mysqldump --all-databases > mysql_databases.sql
对于 postgresql,有:
pg_dumpall > pg_databases.sql
如果您在新系统上遇到任何类型的一致性错误,请恢复数据库。或者,一旦您关闭了源系统上的服务,请再次执行数据库转储,并在目标上恢复,这样您就不会错过任何最近修改的数据。
答案2
按照您的需要在新机器上构建磁盘布局。
使用 rsync 将磁盘内容传输过来。重复几次,直到完全跟上。
在新机器上试验一下您还需要做什么才能正确启动。例如,使用 Grub,并使其处于一致状态。
在您关闭旧机器之前,请定期进行 rsync 以使新磁盘接近旧磁盘。
然后将旧的置于维护模式,再次 rsync,然后启动新的,其行为应该与旧的一样。
答案3
我的同事对 System Imager 非常信赖:
http://wiki.systemimager.org/index.php/Main_Page
我不知道它对于“实时”系统的效果如何。
否则,我认为你只能手动做事:
- 验证存储库之外没有安装任何应用程序
- 转储已安装软件包列表并将其安装到新服务器上
- 复制配置文件
- 还原数据库
答案4
假设您可以使数据库在磁盘上处于一致状态,那么您可以简单地使用 DAR 复制所有内容,然后将其写回到新服务器。
将数据库同步到磁盘上的一致状态可能比较棘手,但只需拍摄快照,然后在恢复 DAR 映像后从该快照恢复即可。DAR 在运行时会影响服务器性能。
但是,一旦获得了图像,您就可以调整网络设置,并且应该能够毫无问题地恢复它。