【问题标题】:Memcache failover and consistent hashingMemcache 故障转移和一致性哈希
【发布时间】:2011-02-22 16:40:41
【问题描述】:

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

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

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

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

状态

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

谢谢,

【问题讨论】:

    标签: php memcached


    【解决方案1】:

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

    状态标志让您可以处理大型应用程序中的服务器故障(并非刚刚发生的故障)。因此,您可以做的是为您的应用程序创建一个配置文件,其中列出了所有服务器及其状态。然后,如果您需要让其中一台服务器离线几分钟(或几小时),您可以将该服务器的状态标志设置为 false。这样,php 就不会尝试查找它(并遇到超时),但哈希映射将保持不变(因此其他所有内容仍然可以访问)。

    有意义吗?

    【讨论】:

    • 嗨!非常感谢您的回答!
    • @ircmaxell 因此,如果池中有 2 台服务器并且其中一台脱机,仍然会向脱机服务器发出请求?没有其他方法可以从内存缓存中删除离线服务器吗?
    • @Sonesh:您需要将其从池中删除。但请注意,无论何时更改池,缓存哈希映射都会更改(基本上是缓存刷新)...
    • @ircmaxell 谢谢!如果您能回答这个问题,我还有 2 个问题,我将不胜感激。 stackoverflow.com/questions/11778495/memcache-confusions
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-11
    • 2010-11-06
    • 2015-07-26
    • 1970-01-01
    相关资源
    最近更新 更多