我有两台服务器。
- 服务器 A:包含
- mysql
- 阿帕奇
- nginx
- 服务器 B:包含
- 阿帕奇
- memcached
- rsync cron(每 3 分钟)提取 /var/www/ 内容并更新其自身
我在用着:
- 服务器A的nginx对http请求进行负载平衡。(并且它工作得很好)。
- 来自服务器 B 的 memcached 来维护 php 会话
Nginx 当前负载平衡,要求服务器 B 处理 75% 的请求。
为了同步应用程序代码(用 php 编写),我使用 rsync(如上所述)。
rsync 的问题是我无法处理双向同步,所以我开始研究齐奏。
此时我有两个问题:
- 让 nginx 将所有“发送文件”请求路由到服务器 A,以便服务器 B 只需拉取,这是一个好主意吗?
- 我应该使用 Unison 还是其他软件进行这种同步?我可以进行实时同步吗?
- 我是否应该使用某种网络文件系统将 /var/www/ 的内容从服务器 A 共享到服务器 B?如果是的话。您有什么建议?
答案1
您可以使用 rsync 或 unison 工具,但无法实现实时同步。即使您每分钟运行一次此类工具,新文件/更新文件同步之前也应该会有一些延迟。如果您认为可以接受短暂的延迟,则可以实施此操作。
如果要实时同步更改,则需要使用 NFS/glusterfs 或 DRBD 等工具。此类工具的主要缺点是网络延迟导致 I/O 开销增加。当共享文件夹变得巨大且网络延迟变大时,这一点会变得更加明显。
答案2
这种不对称架构使服务失败的可能性加倍 - 而且对性能不利。
我使用 rsync(如上所述)。
我没有看到有关如何使用 rsync 的解释。
为了同步应用程序代码
应用程序代码的部署应该是一个受控的过程。如何管理通过 Web 服务器上传/由 Web 服务器生成的内容的复制则完全是另一回事。如果您需要对应用程序代码进行双向复制,那么您的做法就错了。
您的问题集中在部署上。如果节点功能对称,并且 memcache 和 mysql 都进行复制,那么将一个节点脱机(即使这仅意味着交换 nginx 配置以代理/重定向所有请求到另一个节点)进行部署是轻而易举的事。因此,代码部署、数据库备份、数据库维护和架构更改的停机时间均为零。