如何创建系统镜像?

如何创建系统镜像?

我在一台机器上设置了一个数据库和 Web 服务器,我想将系统镜像到另一台机器上。原始数据库运行的是 ubuntu 9.1,新系统安装了 ubuntu 11.04(但可以清除,这是一个全新的系统)。我设想将两个系统都插入路由器,让它们以某种方式相互识别,然后数据就会神奇地从一个系统移动到另一个系统。我该怎么做才能开始这个过程?

编辑:我认为我使用“镜像”一词有误。我想要做的是将工作系统复制到新系统上。然后,我想定期来回复制数据以确保两者保持同步。定期复制是次要的;最初,我只想将数据从一个系统移动到另一个系统(包括 mysql 数据库、网站、所有补丁等)。以后再考虑后续的复制。

编辑2为了更清楚起见,我想对我想要做的事情最好的描述是制作一台机器的时间机器备份,然后恢复到另一台机器。理想情况下,我会跳过转到外部硬盘的中间步骤。

答案1

要直接镜像位,请使用 dd。它是一个位流复制器。相当标准的东西。

以下是一些可帮助您入门的更多信息:

http://thetechshop.org/showthread.php?177-使用-dd-and-netcat-克隆镜像驱动器
http://wiki.linuxquestions.org/wiki/Some_dd_examples
http://www.linuxquestions.org/questions/linux-newbie-8/learn-the-dd-command-362506/
http://www.codecoffee.com/tipsforlinux/articles/036.html

保持同步是另一回事。如果能满足您的需求,您可以时不时地重做初始副本。或者您可以结合使用 rsync 来保持 webroot 同步,然后使用许多可用的方法之一进行 mysql 同步。这是一个完全不同的问题,您需要独立研究。我敢肯定,关于服务器故障已经存在一些关于此的老问题。

更新

根据您的评论和更新,您应该专注于让一个盒子完全正常工作。将 mysql 转储和 web 根文件移动到 ubuntu 11 盒子,然后对其进行配置以使其功能相同,使其处于稳定的工作状态。要获取这些文件,请使用 SCP,它允许您通过 SSH 轻松传输文件。或者您可以尝试让 ubuntu 9 盒子完全正常工作。

然后,当您选择的服务器处于良好位置时,您可以使用 DD 和 netcat、ssh 或任何方式直接逐位镜像复制到另一台机器。

然后...对于将来的同步,您可以使用 rsync 来处理 webroot 和配置文件。并为 mysql 选择您自己的方法,您可以编写脚本转储、scp 传输和导入,或者您可以选择更复杂的方法,这实际上取决于您的需求。

答案2

您可以做到这一点,尽管我并不相信您必须这样做才能完全对您有用。这主要取决于您对网络中 DNS 的掌握程度,现在您想使用一切。

我实际上一直在考虑为自己建立一些类似的东西。

需要了解的关键事情是,一旦您将两个框配置得足够相似(所有必要的 Apache 模块等),那么您就需要保持几件事情一致,以使这一切正常工作:

  1. Web 根目录 - 您有一些文件,Apache 的配置将它们称为您的 DocumentRoot - 这是您网站上托管的文件的存储位置。您需要同步此目录。默认情况下,这应该是 /var/www/(但如果您进入虚拟主机,则必须提供其他位置,我将我的放在 /www/[域名]/ 中。

  2. 数据库 - 您说您有一个数据库。显然,您需要相应地复制它。如果您使用的是 MySQL,则可以使用 mysqldump 来获取数据库。在 Google 上搜索以了解如何使用 mysqldump 进行备份和恢复。

  3. 配置文件 - 如果您的情况非常简单,那么您可能只需要执行一次。您的网站通过配置文件(可能有几个,视情况而定)在您的 Web 服务器软件(我假设是 Apache)中配置。如果您在 Apache 2.x 上使用虚拟主机,那么您在该服务器上托管的每个站点都可能有一个配置文件。您可能需要/想要同步该文件。请记住,在机器上替换 Apache 配置后,至少必须“重新加载”它。

因此,我认为这个过程需要使用类似 rsync 的东西来复制文件。您可以进行 ssh 调用来执行某些操作并终止您也需要的操作(可能在接收端调用一些脚本来执行您可能需要的其他操作)。

现在,正如我所解释的那样,运行副本的机器将完全只是一个镜像,如果有人更改了其中的任何数据,那么在下一次同步时,这些数据就会被破坏。如果您希望拥有多个服务器来托管同一个站点以实现负载平衡,那么我认为您需要拥有一个单独的数据库服务器,您的 Web 服务器可以与之通信,并且您需要使用 NFS 之类的东西为服务器提供 Web 根目录的单个副本。然后,您可以研究配置反向代理,以透明地为您平衡服务器负载。“pound” 是一个相当简单的反向代理,您可以使用它。

答案3

对于初始镜像:

  1. Apahce 和 MySql 的配置文件 - 很可能你需要手动执行此操作,因为版本之间的结构可能会发生一些变化
  2. 网站 - 只需复制目录/文件结构
  3. 数据库 - 取决于引擎,但如果是 MySql - mysqldump 然后导入新的

对于定期更新:

  1. 配置文件 - 同样,可能需要手动完成。但通常不会频繁更改配置文件,即使更改,更改也很小
  2. 网站 - 我会花些力气把所有的文件放在某个源代码控制系统中 - 比如说 svn,然后从中更新两个服务器,而不是直接在 server1 上更新,然后再复制到 server2
  3. 数据库 - 再次执行 mysqldump,然后在 server2 上恢复,或者设置一些主/从配置,这样数据始终保持同步。

相关内容