直到最近,我们的设置包括4个networking服务器共享会话到单个运行memcache的服务器。 我们托pipe在亚马逊云上,并在连续两天的高峰负载中发生崩溃。 问题是memcache服务崩溃了(我们网站的负载一直在稳步增长)。
所以我们采取了以下措施:
1)增加了2个用于存储会话的服务器
2)在所有Web服务器的php ini文件中设置以下variables
session.save_handler = memcache session.save_path = tcp://ip1.port, tcp://ip2.port, tcp://ip3:port memcache.hash_strategy = consistent memcache.allow_failover = 1
事情正在按顺序运行。 为了确保可用性,我们尝试通过随机杀死我们的一个会话服务器进行testing,并且网站继续运行(有些用户已经注销,目前商业上可以接受)。
但是有一个主要问题。 我预计memcache服务器上的负载或多或less是平均分配的。 但它不是!
如果我在CloudWatch中查看“Max Network Out(Bytes)”,则可以看到负载大致是10:5:1的比例。 换句话说,In和Outnetworking带宽明智,第一台服务器是第三台服务器的10倍。 而第二台服务器是第三台服务器的5倍。
有任何想法吗?
更改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:port