有没有办法在 Ubuntu 上镜像两个服务器?

Kyl*_*yle 8 ubuntu mirror

我想知道是否可以镜像两台服务器,就像您可以将文件上传到一台服务器,然后将它们推送到另一台服务器等。我对文件镜像更感兴趣,它不必镜像包管理和设置(但这也很酷!)

Luk*_*che 6

这在很大程度上取决于手头的工作。

为什么需要文件镜像。您是否想更新网站或内容存储库之类的内容,通常可以定期更新。或者您需要实时同步数据?

对于文件的定期异步镜像,通常有一个将所有数据上传到的暂存区就足够了。并从哪里将它分发到服务器。在您的情况下 - 使用两台服务器 - 您可以在 srv1 上创建一些暂存文件共享到您传输数据的位置(通过 FTP、NFS、DAV、SFTP 等),然后使用 cronjob rsync 将文件同步到srv1 和 srv2。在这种情况下,使用 rsync 的最简单方法是生成一个 ssh 密钥对,用于数据传输并且在集群中的所有服务器上都得到授权。

例子:

srv1:/data/staging/  <= is where you upload your data
srv1:/data/production/ <= is where your servers get their production data from
srv2:/data/production/

srv1$ cat /etc/cron.d/syncdata.cron
=====
*/5 * * * * syncuser rsync -a --delete /data/staging/ /data/production/
*/5 * * * * syncuser rsync -az --delete -e ssh /data/staging/ srv2:/data/production/
=====
Run Code Online (Sandbox Code Playgroud)

这应该给你一个基本的想法。当然,您可能希望将 rsync 调用包装在一些脚本中并实现适当的锁定,以便在同步时间超过 5 分钟等情况下它不会运行两次。此外,不用说,暂存区不是强制性的。您也可以直接将 srv1:production 同步到 srv2:production。只是 srv2 可能会显示比 srv1 早 5 分钟的数据。这可能是一个问题,这取决于您如何在两者之间取得平衡。

另一种异步分发文件的方法是将它们打包为 rpm 或 deb 文件。将它们放在一个中央存储库中,并通过诸如 cfengine、monkey 或一些基于 DIY 消息总线的解决方案来安装/更新它们。这具有部署数据版本控制的良好副作用,但仅适用于您自己生成和部署的少量数据(例如您自己的软件版本)。你不会想用这个分发 TB 的数据,而且它也不适合镜像以高频率变化的内容,就像每隔一分钟左右。

如果您需要近乎实时地复制数据但不一定是同步的,而不是经常调用 cron,您可以使用一些基于 inotify 的方法(如已经提到的 incron)来调用您的同步脚本。另一种可能性是使用 Gamin(如果内核中存在,它也使用 inotify)并编写您自己的小同步守护程序。最后但并非最不重要的是,如果所有文件都通过例如 SFTP 上传到一台服务器,您可以检查您的 SFTP 服务器是否允许您定义在某些事件后调用的钩子,例如文件上传。这样你就可以告诉你的服务器在上传新数据时触发你的同步脚本。

如果您需要数据的实时同步镜像,可能需要使用集群文件系统。DRDB 已经被命名。它非常适用于块级复制,通常用于高可用 MySQL 设置。您可能还想看看 GFS2、OCFS2、Lustre 和 GlusterFS。尽管 Lustre 和 GlusterFS 并不真正适合两台服务器设置。


jos*_*chi 5

基本上你有3种可能性:

  1. 让您的应用程序将文件推送到两台服务器。
  2. 异步复制,例如使用 cron 作业每 15 分钟(或更短时间)进行 rsync
  3. 文件系统(例如GlusterFS)或块设备级别(例如DRBD)上的同步复制。如果您在块设备级别使用复制,并且您希望同时从两台服务器对文件进行 r/w 访问,则需要一个支持分布式锁定的文件系统(例如OCFS2GFS2)。