Как справиться с 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 количества сбоев.

Другие вопросы по тегам