直到最近,我们的设置还包括4个web服务器,将会话共享到一个运行memcache的服务器上。我们在亚马逊云上托管,连续两天在负载高峰时崩溃。问题是memcache服务崩溃了(我们站点的负载一直在稳步增加)。
因此,我们采取了以下措施:
1)增加了2台用于存储会话的服务器
2)在所有web服务器上的php ini文件中设置以下变量
session.save_handler = memcache
session.save_path = tcp://ip1.port, tcp://ip2.port, tcp://ip3:port
memcache.hash_strategy = consistent
memcache.allow_failover = 1现在一切都井然有序。为了确保可用性,我们尝试通过随机关闭一个会话服务器来进行测试,并且站点继续运行(一些用户被注销了,这在业务上是可以接受的)。
但有一个大问题。我预计memcache服务器上的负载大致是均匀分布的。但事实并非如此!
如果我看看CloudWatch中的“(Bytes)”,那么我可以看到负载大约是10:5:1的比例。换句话说,就网络带宽而言,第一台服务器的负载是第三台服务器的10倍。第二台服务器的负载是第三台服务器的5倍。
有什么想法吗?
发布于 2012-01-11 14:56:28
为session.save_path参数更改memcache IP的顺序可能会改变memcache服务器上的会话分布比率。例如,在第一个web服务器上:
session.save_path = tcp://ip1.port, tcp://ip2.port, tcp://ip3:port在第二个web服务器上:
session.save_path = tcp://ip2.port, tcp://ip3.port, tcp://ip1:port在第三个web服务器上:
session.save_path = tcp://ip3.port, tcp://ip1.port, tcp://ip2:port在第四个web服务器上:
session.save_path = tcp://ip1.port, tcp://ip3.port, tcp://ip2:porthttps://serverfault.com/questions/290619
复制相似问题