PHP memcache客户端 - 它是否依赖于要路由的服务器IP地址?

时间:2012-09-02 16:30:36

标签: php amazon-web-services memcached

我正在从AWS的单个内存缓存服务器迁移到多个服务器。 我需要从内部网络和外部访问内存缓存服务器。所以我正在使用

// get data from memcache for counter
$memcache = new Memcache;
$memcache->addServer('server1_internal_IP', 11211);
$memcache->addServer('server2_internal_IP', 11211);

从另一个区域的应用服务器上我使用以下方式访问相同的服务器:

$memcache->addServer('server1_external_IP', 11211);
$memcache->addServer('server2_external_IP', 11211);

当本地服务器写入memcache而远程读取时,看起来路由不会转到相同的服务器

可能是因为我使用不同的IP地址(亚马逊内部和外部)来访问服务器吗?那么路由机制在进行路由时会考虑实际的IP地址吗?我认为它应该是键上的简单CRC32

2 个答案:

答案 0 :(得分:1)

发现当memcache.hash_strategy =一致时,哈希算法中使用了IP地址,因此您无法路由到具有不同地址的相同服务器(这是每个服务器的AWS内部和外部IP地址的情况)。 / p>

解决方案是切换到标准哈希。在php.ini中添加:

[分布式缓存] memcache.hash_strategy =标准

答案 1 :(得分:0)

这不是很理想。如果可能,您应该根据存储的内容将数据分离到单独的内存缓存服务器中。

如果您使用内置哈希算法在服务器之间传播数据,则无法保证负载均匀分布,添加/删除服务器会在所有服务器上重置整个缓存,这将导致您网站出现重大问题(如果您使用它来存储会话,则每个人都会退出/丢失他们的购物车内容。