即使删除了文件,如何保持负载平衡的服务器同步?

DTe*_*est 3 synchronization rsync load-balancing

我最近为我们的网站设置了负载平衡解决方案。我们托管了大约 200 个站点,大多数运行我们的自定义应用程序,但有些运行 wordpress 博客(可以上传/删除其中的文件)。设置是基本的:

          |-------------------> Apache1
          |
 HAProxy -|
          |
          |-------------------> Apache2
Run Code Online (Sandbox Code Playgroud)

我已设置Apache1为“主”,因此Apache2使用以下命令对它所做的大部分更改都会每分钟同步一次:

rsync -av --delete apache1:/var/www/html/ /var/www/html/
Run Code Online (Sandbox Code Playgroud)

问题是,如前所述,在某些情况下,文件是在Apache2. 到目前为止,我想出的唯一解决方案是将Apache1某些目录(例如 wp-content)中的所有文件同步到自身(而不是删除),然后将所有内容推回Apache2.

这有它的缺陷,主要是:

  • 两台服务器最终会得到已被删除的额外文件 Apache2
  • 随着我添加更多服务器,rsync 脚本将需要更长的时间才能完成。

考虑到两台服务器都可以添加、更新和删除文件,是否有任何方法可以保持 2 个以上的 Web 服务器同步?

qua*_*nta 11

我将OCFS2 与 DRBD 一起使用

DRBD 资源/etc/drbd.d/r0.res

resource r0 {
    syncer { rate 1000M; }
    net {
        allow-two-primaries;
        after-sb-0pri discard-zero-changes;
        after-sb-1pri discard-secondary;
        after-sb-2pri disconnect;
    }
    startup { become-primary-on both; }

    on s1 {
        device      /dev/drbd1;
        disk        /dev/sdc;
        address     ip1:7789;
        meta-disk   internal;
    }
    on s2 {
        device      /dev/drbd1;
        disk        /dev/xvdb2;
        address     ip2:7789;
        meta-disk   internal;
    }
}
Run Code Online (Sandbox Code Playgroud)

/dev/drbd1 被格式化为 ocfs2 文件系统:

/dev/drbd1   ocfs2   100660180   7427076  93233104   8% /data/webroot
Run Code Online (Sandbox Code Playgroud)

无 Pacemaker 的 OCFS2 配置/etc/ocfs2/cluster.conf

node:
    ip_port = 7777
    ip_address = ip1
    number = 0
    name = s1
    cluster = ocfs2

node:
    ip_port = 7777
    ip_address = ip2
    number = 1
    name = s2
    cluster = ocfs2

cluster:
    node_count = 2
    name = ocfs2
Run Code Online (Sandbox Code Playgroud)

可以使用drbd-overview实用程序查看 DRBD 状态:

# drbd-overview 
  1:r0  Connected Primary/Primary UpToDate/UpToDate C r---- /data/webroot ocfs2 96G 9.8G 87G 11% 
Run Code Online (Sandbox Code Playgroud)

或来自/proc/drbd

cat /proc/drbd 
version: 8.3.8 (api:88/proto:86-94)
GIT-hash: d78846e52224fd00562f7c225bcc25b2d422321d build by mockbuild@builder10.centos.org, 2010-06-04 08:04:09

 1: cs:Connected ro:Primary/Primary ds:UpToDate/UpToDate C r----
    ns:953133955 nr:42207234 dw:1185526354 dr:62396241 al:230084 bm:5853 lo:0 pe:0 ua:0 ap:0 ep:1 wo:b oos:0
Run Code Online (Sandbox Code Playgroud)