AskOverflow.Dev

AskOverflow.Dev Logo AskOverflow.Dev Logo

AskOverflow.Dev Navigation

  • 主页
  • 系统&网络
  • Ubuntu
  • Unix
  • DBA
  • Computer
  • Coding
  • LangChain

Mobile menu

Close
  • 主页
  • 系统&网络
    • 最新
    • 热门
    • 标签
  • Ubuntu
    • 最新
    • 热门
    • 标签
  • Unix
    • 最新
    • 标签
  • DBA
    • 最新
    • 标签
  • Computer
    • 最新
    • 标签
  • Coding
    • 最新
    • 标签
主页 / server / 问题 / 119961
Accepted
Kyle
Kyle
Asked: 2010-03-07 18:23:28 +0800 CST2010-03-07 18:23:28 +0800 CST 2010-03-07 18:23:28 +0800 CST

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

  • 772

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

ubuntu mirror
  • 8 8 个回答
  • 11536 Views

8 个回答

  • Voted
  1. Best Answer
    Lukas Loesche
    2010-03-07T22:49:04+08:002010-03-07T22:49:04+08:00

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

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

    对于文件的定期异步镜像,通常有一个将所有数据上传到的暂存区就足够了。并从您将其分发到服务器的位置。在您的情况下 - 使用两台服务器 - 您可以在 srv1 上创建一些暂存文件共享到您将数据传输到的位置(通过 FTP、NFS、DAV、SFTP 等),然后让 cronjob 将文件同步到“实时”目录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/
    =====
    

    这应该给你一个基本的想法。当然,您可能希望将 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 并不真正适合两个服务器设置。

    • 6
  2. joschi
    2010-03-07T22:40:22+08:002010-03-07T22:40:22+08:00

    基本上你有3种可能性:

    1. 让您的应用程序将文件推送到两台服务器。
    2. 异步复制,例如每 15 分钟(或更少)使用 cron 作业进行 rsync
    3. 文件系统(例如GlusterFS)或块设备级别(例如DRBD )上的同步复制。如果您在块设备级别使用复制,如果您希望同时对来自两个服务器的文件进行读/写访问,则需要一个支持分布式锁定的文件系统(例如OCFS2或GFS2 )。
    • 5
  3. Chris S
    2010-03-07T19:05:30+08:002010-03-07T19:05:30+08:00

    cron + rsync =镜像目录/文件

    • 2
  4. Keiran Holloway
    2010-03-07T19:17:22+08:002010-03-07T19:17:22+08:00

    根据您的具体用例 - 您可以使用类似于 DRBD http://www.drbd.org/的东西

    • 1
  5. Thingomy
    2010-03-08T08:26:47+08:002010-03-08T08:26:47+08:00

    如果您尝试在这里构建备份解决方案(我个人在几乎相同的设置中完成),请小心。您需要备份许多不同的东西,其中一个(可以说是最大的)是附带删除 - 任何实时复制系统都只会复制删除,并且不提供安全性。对于这种日常复制工作,但这是一个非常薄弱的​​答案。试试 RSnapshot。

    Unison 可能很适合你,但我没有个人经验。

    使用适当的标志在两个方向上运行 Rsync 可以工作,但它有一个相当棘手的问题,即如何处理已删除的文件,没有特殊的处理,它只是恢复文件,如果你从不删除像我这样的东西,这很好,但有点否则很差。如果移动文件,它也会做一些奇怪的事情。

    无论您在做什么,如果出现任何可以在两端同时编辑文件的情况,那么您就有问题了。unison 是我所知道的唯一可以处理这个甚至接近令人满意的解决方案。

    • 1
  6. chmeee
    2010-03-07T20:35:40+08:002010-03-07T20:35:40+08:00

    如果它是单向的(我的意思是,总是从一台服务器到另一台服务器,但不是相反),你可以使用incron. 它类似于 cron,但基于文件系统事件。

    每次创建或更改文件时,它都会触发 scp 或 rsync 到另一台服务器。

    双向存在循环问题:)。

    • 0
  7. bmaeser
    2010-03-09T08:35:23+08:002010-03-09T08:35:23+08:00

    这取决于您的需求.....我为集群网络服务器设置了一个非常“便宜且简单”的设置。

    我只有一个“文件服务器”(NFS),所有网络服务器都安装以下目录:

    /etc/apache/sites-enabled
    /etc/apache2/sites-avaliable
    /var/www
    

    死简单和工作

    • 0
  8. dream_liner2k2
    2012-06-16T04:24:37+08:002012-06-16T04:24:37+08:00

    clonezilla 还可以查看哪些使用 rsync

    • 0

相关问题

  • 如何在 Ubuntu 上设置简单的防火墙?

  • 设置没有密码的用户

  • 在 Ubuntu 上设置电子邮件服务器

  • 保护新的 Ubuntu 服务器 [关闭]

  • (软)Ubuntu 7.10 上的 RAID 6,我应该迁移到 8.10 吗?

Sidebar

Stats

  • 问题 205573
  • 回答 270741
  • 最佳答案 135370
  • 用户 68524
  • 热门
  • 回答
  • Marko Smith

    新安装后 postgres 的默认超级用户用户名/密码是什么?

    • 5 个回答
  • Marko Smith

    SFTP 使用什么端口?

    • 6 个回答
  • Marko Smith

    从 IP 地址解析主机名

    • 8 个回答
  • Marko Smith

    如何按大小对 du -h 输出进行排序

    • 30 个回答
  • Marko Smith

    命令行列出 Windows Active Directory 组中的用户?

    • 9 个回答
  • Marko Smith

    什么是 Pem 文件,它与其他 OpenSSL 生成的密钥文件格式有何不同?

    • 3 个回答
  • Marko Smith

    如何确定bash变量是否为空?

    • 15 个回答
  • Martin Hope
    MikeN 在 Nginx 中,如何在维护子域的同时将所有 http 请求重写为 https? 2009-09-22 06:04:43 +0800 CST
  • Martin Hope
    Tom Feiner 如何按大小对 du -h 输出进行排序 2009-02-26 05:42:42 +0800 CST
  • Martin Hope
    0x89 bash中的双方括号和单方括号有什么区别? 2009-08-10 13:11:51 +0800 CST
  • Martin Hope
    Kyle Brandt IPv4 子网如何工作? 2009-08-05 06:05:31 +0800 CST
  • Martin Hope
    Noah Goodrich 什么是 Pem 文件,它与其他 OpenSSL 生成的密钥文件格式有何不同? 2009-05-19 18:24:42 +0800 CST
  • Martin Hope
    Brent 如何确定bash变量是否为空? 2009-05-13 09:54:48 +0800 CST
  • Martin Hope
    cletus 您如何找到在 Windows 中打开文件的进程? 2009-05-01 16:47:16 +0800 CST

热门标签

linux nginx windows networking ubuntu domain-name-system amazon-web-services active-directory apache-2.4 ssh

Explore

  • 主页
  • 问题
    • 最新
    • 热门
  • 标签
  • 帮助

Footer

AskOverflow.Dev

关于我们

  • 关于我们
  • 联系我们

Legal Stuff

  • Privacy Policy

Language

  • Pt
  • Server
  • Unix

© 2023 AskOverflow.DEV All Rights Reserve