Как справиться с MEMCACHED_SERVER_MARKED_DEAD?
У меня есть кластер из 10 memcache, используя последовательное хеширование. Когда ключ передан memcached_get()
ищется на недоступном сервере я получаю просто MEMCACHED_SERVER_MARKED_DEAD
ответ (возвращаемое значение).
Я ожидаю, что ключ должен быть перераспределен на следующий доступный сервер в этом случае, и я должен получить NOTFOUND
от следующего memcached_get()
вызов. Однако я все еще получаю MEMCACHED_SERVER_MARKED_DEAD
и поэтому я не могу установить новое значение.
Я обнаружил, что могу позвонить memcached_behavior_set(..., MEMCACHED_BEHAVIOR_DISTRIBUTION)
, Это вызывает перераспределение хэша, и тогда оно работает так, как я хочу. Однако я не думаю, что это хороший подход. Это?
2 ответа
Я нашел ответ сам.
https://bugs.launchpad.net/libmemcached/+bug/777672
Применение патча решило все мои проблемы. Заметьте, мне интересно, что он сломался с 0.39, и никто не заботился.
Как правило, вы хотите включить MEMCACHED_BEHAVIOR_DISTRIBUTION с самого начала, если вы имеете дело с несколькими пулами memcache d. Так что да, это решение будет работать.
Если у вас возникли дополнительные проблемы, взгляните на MEMCACHED_BEHAVIOR_REMOVE_FAILED_SERVERS, которая автоматически удалит сбойные серверы из пула после x количества сбоев.