我最近有机会将 Web 应用程序从使用 Nginx 代理“负载均衡器”转移到 F5 负载均衡器。不幸的是,在迁移过程中,很明显memcached会话存储需要从 Nginx 代理服务器移动到“某个地方”。我的想法是我应该安装memcached所有 3 个 Web 服务器(位于池中 F5 后面的服务器)并使用php-memcache或php-memcached保存会话。麻烦来了:
我已经尝试了两者php-memcache,php-memcached并且如果其中一台服务器出现故障,任何一个都无法正常运行。我最近的尝试是使用这种配置:
memcached 带有配置设置的 2.2.0 版:
session.save_handler = memcached session.save_path = "172.29.104.13:11211,172.29.104.14:11211"
我没有什么特别的memcached.ini比其他extension=memcached.so。
使用服务器 1 和 2 上的此配置(我暂时删除了 3 个进行测试),我将 JMeter 指向 F5 VIP 并启动流量。我可以memcached.log在两个系统上看到(守护进程),虽然还没有花时间破译,开始运行。
然后如果我停止其中一个memcached守护进程,流量开始失败,我的回报是
session_start(): Write of lock failed
memcached剩下的那个。
归根结底,我的目标很简单 - 我需要能够 a) 不在memcached单个服务器上运行(单点故障),并且集群需要能够适应池成员的故障。
我也试过,php-memcache但也失败了。对于php-memcache配置如下所示:
memcache …