![负载均衡器、文件合并和 mysql](https://linux22.com/image/554094/%E8%B4%9F%E8%BD%BD%E5%9D%87%E8%A1%A1%E5%99%A8%E3%80%81%E6%96%87%E4%BB%B6%E5%90%88%E5%B9%B6%E5%92%8C%20mysql.png)
所以我这里有三台机架服务器,主服务器连接到 WWW 并有一个公共 IP,它运行的 HAProxy 设置为指向另外两台服务器。
另外两个正在运行 apache,其中一个 cron rsync 作业正在从主控制器服务器上的目录下载 Web 文件。
一切运行正常,但是,我目前在控制服务器上运行 MySQL,但我希望它像 apache 和 haproxy 系统一样工作。有什么方法可以做到这一点?
另外,如果用户在 wordpress 上上传了帖子的文件/图片,则它仅存储在本地服务器上,并且文件每 1 分钟会被 rsync 覆盖一次。如何合并目录?
顺便说一下,这三台服务器都是 Ubuntu 10.04 服务器
谢谢。
答案1
在您拥有多个 Web 服务器的情况下,您都需要一个中心位置来存储文件上传和会话数据。
如果文件不是太大,您可以考虑直接将它们存储在 MySQL 数据库中,否则您可以在其中一台服务器上设置 NFS 共享目录,并将其挂载到其他服务器上。这样,当用户上传文件时,无论他在哪台服务器上,都可以访问该文件。
这样做的缺点是,如果 NFS 服务器(或具有 NFS 共享的 Web 服务器)崩溃或不可用,则所有文件上传都将消失。因此,您应该计划定期备份这些文件,并修改 Web 应用程序以在 NFS 不可用时从备份位置访问文件。
至于 MySQL 的负载平衡,我几年前写过一篇文章:http://www.alexwilliams.ca/blog/2009/08/10/using-haproxy-for-mysql-failover-and-redundancy/index.html
我还写了一本有关不同负载平衡和扩展基础设施的书,希望这对您有所帮助:http://scalingexperts.com/books/
答案2
我可能会建议使用分布式文件系统(例如 Gluster)来满足您的大部分需求。在服务器之间设置复制块(由于您只使用 3 个,因此复制会更安全),每台服务器都会将所有其他服务器的文件视为“本地” - 即使一台服务器发生故障,文件也会复制到其他服务器。
您还可以在 Gluster 卷上运行 MySQL - 这样您的数据库就可以在多台服务器之间共享 - 与直接复制相比,它确实有一些优势。如果您使用的是 InnoDB 表,则必须延迟锁定,但它应该可以与 MyISAM 和 InnoDB 一起使用。
Gluster 将保持跨卷(块)的文件同步,并具有“自我修复”功能,可处理由于一台服务器离线而导致的任何不一致。应该有助于目录合并,并且设置起来相当容易。