我最近接手了一个基于 Linux 的小型负载平衡 Web 服务器。不幸的是,它从未完全上线,所以我正在努力做到这一点。
基本设置是:
- 基于 LVS 的负载均衡器。还可作为 Web 服务器的简单 NAT。
- 两个 Apache/PHP5 网络服务器。
- MySQL 数据库服务器。
数据库服务器位于公司主防火墙内,而其他三个位于 DMZ 中。基本负载平衡可以正常工作,但我无法使用 LVS 保持连接,而且由于 PHP5 的会话存储使用本地文件,因此我们会丢失会话。我可能能够使用 LVS 来保持会话,但由于连接通常与同一防火墙后面的大量 NATed 客户端连接,并且有时请求之间会有很长的延迟,所以我认为这可能是一个失败的提议。我已决定改用 memcached 进行会话存储,因为它设置起来很快。
我的问题是 memcached 服务应该放在哪里?我无法添加另一台服务器,因此它必须与负载平衡器或数据库服务器共存。目前,我倾向于将其与数据库服务器共存,因为它没有外部连接,但我担心两者可能会在某种程度上发生冲突。对于这种情况,有没有最佳实践?或者还有其他指导?
答案1
如果我是你,我会将数据库服务器上的内存节省下来用于数据库。为了提高弹性,我会在你的两个 Web 服务器上都安装 memcached。使用 memcached 进行会话的一个小问题是,重新启动 memcached 会破坏你的会话。你可以考虑使用 memcachedb 之类的东西,它可以持久保存对象。
答案2
我会将其放在负载均衡器上。原因有三:
- 该机器目前可能没有使用大量的 CPU/RAM(如果不是这种情况,那么您需要重新考虑)。
- 如果负载均衡器出现故障,那么会话对您来说就没有任何好处。
- 与数据库相比,会话与连接的逻辑关联要多一些。