Memcache故障转移和一致性哈希

时间:2010-05-22 11:43:30

标签: php memcached

我正在尝试找出一种在我当前使用PHP构建的Web应用程序中处理脱机/关闭memcached服务器的好方法。

我刚刚发现此链接显示了如何做我想要的方法,我认为:http://web.archive.org/web/20090421075021/http://cmunezero.com/2008/08/11/consistent-memcache-hashing-and-failover-with-php/

无论如何,当我开始使用它并阅读有关使用memcache进行故障转移的PHP文档时,它让我感到困惑。为什么脱机内存缓存服务器与在线服务器一起添加到$realInstance服务器池?

阅读memcache文档会让我更加困惑: http://www.php.net/manual/en/memcache.addserver.php

  

状态

     

控制是否应将服务器标记为在线。设置这个   参数为FALSE和retry_interval   到-1允许失败的服务器   保持在游泳池,以免影响   密钥分配算法。   然后将对此服务器的请求   故障转移或立即失败   在memcache.allow_failover上   设置。默认为TRUE,表示   服务器应该在线考虑。

谢谢,

1 个答案:

答案 0 :(得分:4)

基本上,memcache分布式存储的工作方式是,你告诉它所有的服务器。然后,当您要求输入密钥(要么存储或提取)时,它会创建该密钥的哈希值。然后该散列通过一个算法来确定它应该进入池中的哪个服务器(这都是在客户端完成的)。如果从池中删除脱机服务器,则该哈希计算将不同,并且您的整个存储可能会受到损害(数据仍然存在,但您可能无法访问它)。

状态标志允许您在相当大的应用程序中处理服务器故障(不会发生的故障)。因此,您可以做的是为您的应用程序提供一个配置文件,列出所有服务器及其状态。然后,如果您需要将其中一台服务器脱机几分钟(或几小时),则可以将该服务器的状态标志设置为false。这样,php就不会试图寻找它(并达到超时),但哈希映射将保持不变(所以其他一切仍然可以访问)。

有意义吗?