我是一名 IT 专业的学生,被要求为多个网站搭建一个 Web 服务器集群。经过 2 周的搜索、阅读和测试,我来这里寻求帮助。
我们想要的是一组 Web 服务器共同协作,实现负载平衡和故障转移。
我现在正在运行的测试设置是:
2 个 piranha 服务器分别对 3 个 Web 服务器 (nginx/php5) 进行故障转移和负载平衡。
我遇到的问题:
- 会话未同步。我尝试过结合使用 memcache、memcached 和 repcached,但无法让 php 在 memcache 中保存其会话
- 不知道如何在 3 个(甚至更多)Web 服务器上同步数据。我已经设置了 DRBD,它适用于 2 个服务器,但不知道如何在 4 个服务器上使用。
我之前尝试过的:
尝试过:
- 2 个 nginx 服务器,每 3 个 Web 服务器采用循环上游负载平衡
问题:
2 个主服务器在高活动量时负载较高
会话不同步,每次服务器切换都需要重新登录
如果 3 个服务器中有其中一个没有应答,它将停止切换到下一个服务器
尝试过:
- DRBD 作为 Web 服务器之间的数据同步
问题:
- 无法让 DRBD 在 4 台服务器上运行
为了解释我真正的问题,我们想构建一个高可用性和快速的 Web 集群。Web 集群应该实时同步所有数据。我不知道如何实现这一点!在这个 Web 集群上将运行许多网站,这意味着一切都应该是自动的,用户(网站)不会知道这是在多台服务器上,但会认为这是一台非常强大的服务器。
google 或 facebook 是如何做到这一点的?
我确实考虑过拥有一个单独的服务器,客户可以在该服务器上实时编辑 Web 服务器,真正的服务器只有在他们将网站推送到 Web 集群时才会被编辑。这可以通过 rsync 来完成,但这似乎不是一个好的解决方案。我认为会话可以放在共享存储上?
欢迎提出任何想法或解决方案!
答案1
要知道如何设置这样的系统,需要多年的学习、实践和经验。而且有很多解决方案。
一些提示:
忘掉 DRBD 吧。如果你想保持文件系统实时同步,那么使用复制文件系统,比如 HDFS 或 AFS。
2 个主服务器在高活动量时负载较高
什么鬼?你用 2 个 nginx 服务器作为 3 个 nginx 服务器的代理???你在最基本的层面上做错了什么,或者没有真正正确地解释你的设置。
如果您需要共享会话,那么这应该是您最需要处理的。
这可以通过 rsync 来完成,但这似乎不是一个好的解决方案
如果(除了会话存储,如果你选择沿着这个根源 - 但我会说坚持使用复制数据库)你在服务器之间共享数据的唯一要求是发布网站,那么实际上它是一种非常好的解决方案。它具有最小的依赖性,可以从长时间的中断中恢复,非常强大。事实上,设置它并不需要花费太多精力,因此您甚至不需要明确指定的服务器来应用编辑。
答案2
您可以使用 NFS 导出用于存储所有网站根目录的卷并将其挂载到所有网络服务器上,而不必同步文件系统,这样每个网站都会轻松拥有相同的内容。
关于通过集群进行会话管理,我建议采用不同的方法,让单个用户会话停留在同一个 Web 服务器上,换句话说就是粘性会话。
我在使用 IBM Tivoli Access Manager 作为反向代理时遇到了这个问题,该产品有一些连接选项来处理会话持久性。如果你使用 LVS,你可以找到解决方案这里