负载平衡 + 文件夹同步

负载平衡 + 文件夹同步

我有两台服务器。

  1. 服务器 A:包含
    • mysql
    • 阿帕奇
    • nginx
  2. 服务器 B:包含
    • 阿帕奇
    • memcached
    • rsync cron(每 3 分钟)提取 /var/www/ 内容并更新其自身

我在用着:

  • 服务器A的nginx对http请求进行负载平衡。(并且它工作得很好)。
  • 来自服务器 B 的 memcached 来维护 php 会话

Nginx 当前负载平衡,要求服务器 B 处理 75% 的请求。

为了同步应用程序代码(用 php 编写),我使用 rsync(如上所述)。

rsync 的问题是我无法处理双向同步,所以我开始研究齐奏

此时我有两个问题:

  1. 让 nginx 将所有“发送文件”请求路由到服务器 A,以便服务器 B 只需拉取,这是一个好主意吗?
  2. 我应该使用 Unison 还是其他软件进行这种同步?我可以进行实时同步吗?
  3. 我是否应该使用某种网络文件系统将 /var/www/ 的内容从服务器 A 共享到服务器 B?如果是的话。您有什么建议?

答案1

您可以使用 rsync 或 unison 工具,但无法实现实时同步。即使您每分钟运行一次此类工具,新文件/更新文件同步之前也应该会有一些延迟。如果您认为可以接受短暂的延迟,则可以实施此操作。

如果要实时同步更改,则需要使用 NFS/glusterfs 或 DRBD 等工具。此类工具的主要缺点是网络延迟导致 I/O 开销增加。当共享文件夹变得巨大且网络延迟变大时,这一点会变得更加明显。

答案2

这种不对称架构使服务失败的可能性加倍 - 而且对性能不利。

我使用 rsync(如上所述)。

我没有看到有关如何使用 rsync 的解释。

为了同步应用程序代码

应用程序代码的部署应该是一个受控的过程。如何管理通过 Web 服务器上传/由 Web 服务器生成的内容的复制则完全是另一回事。如果您需要对应用程序代码进行双向复制,那么您的做法就错了。

您的问题集中在部署上。如果节点功能对称,并且 memcache 和 mysql 都进行复制,那么将一个节点脱机(即使这仅意味着交换 nginx 配置以代理/重定向所有请求到另一个节点)进行部署是轻而易举的事。因此,代码部署、数据库备份、数据库维护和架构更改的停机时间均为零。

相关内容