负载平衡+文件夹同步

我有2台服务器。

  1. 服务器A :包含
    • MySQL的
    • 阿帕奇
    • nginx的
  2. 服务器B :包含
    • 阿帕奇
    • memcached的
    • rsync的cron(每3分钟),拉动/ var / www /内容,并更新自己的

我在用着:

  • 服务器A的nginx负载均衡http请求。 (它工作得很好)。
  • memcached从服务器B维护php会话

Nginx目前的负载均衡要求服务器B处理75%的请求。

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

rsync的问题是我无法处理2路同步,所以我开始看着Unison 。

在这一点上,我有2个问题:

  1. 请求nginx将所有的“发送文件”请求路由到服务器A,以便服务器B只需要拉?
  2. 我应该使用Unison或其他软件进行这种同步吗? 我可以实时同步吗?
  3. 我应该使用一些共享/ var / www /从服务器A到服务器B的内容的networking文件系统吗? 如是。 你有什么build议?

您可以使用rsync或unison工具,但不会得到实时同步。 应该有一些延迟,直到新的/更新的文件同步,即使你每分钟运行一个这样的工具。 如果您认为有小的延迟是可以接受的,您可以实施它。

如果您想要实时同步更改,则需要使用NFS / glusterfs或DRBD之类的工具。 这种工具的主要缺点是由于networking延迟导致的I / O开销增加。 当共享文件夹变得庞大并且networking延迟变大时,这变得更清楚。

这种不对称的体系结构使得服务失败的几率增加了一倍,而且性能也不是很好。

我使用rsync(如上所述)。

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

为了同步应用程序代码

应用程序代码的部署应该是一个托pipe过程。 如何pipe理通过networking服务器/由networking服务器生成的上传内容的复制是一个非常不同的故事。 如果您需要执行应用程序代码的双向复制,那么您做错了。

你的问题围绕着部署。 如果节点在function上与memcache和mysql的复制对称,那么将一个节点脱机(即使这意味着交换nginxconfiguration中的代理/将所有请求redirect到其他节点)进行部署也是不容易的。 因此,代码部署的停机时间为零,数据库备份的停机时间为零,数据库维护停机时间为零,模式更改的停机时间为零。