Я использую libmemcached в «c» для записи данных с использованием MEMCACHED_DISTRIBUTION_CONSISTENT_KETAMA. Все ключи хорошо распределены по всем узлам кластеров, но когда я выключаю один из них, ключи не переносятся. Поиск в google не ясен, как настроить libmemcached для выполнения этого автоматически. У кого-то есть опыт?libmemcached fail over узла кластера
ответ
Я думаю, что вы должны будете использовать: http://docs.libmemcached.org/memcached_behavior.html#MEMCACHED_BEHAVIOR_REMOVE_FAILED_SERVERS
Если вы не позволяете libmemcached удалить неудачные серверы, они застревают в списке, следовательно, ключи не перераспределяются.
Обратите внимание, что мертвый сервер будет проверен снова после MEMCACHED_BEHAVIOR_DEAD_TIMEOUT (см. 1, 2) секунд. Поэтому, если он снова появится, он будет возвращен в список полных серверов.
Libmemcached не выполняет внутреннюю обработку миграции ключей в случае отказа сервера memcached. В этом случае будет пропущен кеш, когда libmemcached попытается извлечь ключ, который был сохранен на неудавшемся сервере.
Если мы используем MEMCACHED_DISTRIBUTION_CONSISTENT_KETAMA, он просто убедится, что пропущенный кеш минимален по мере того, как ключи распределены, и полная перезагрузка не требуется.
Решения: Вы можете реплицировать ключи через несколько узлов, что поможет вам получить пару (ключ, значение) в случае сбоя сервера. Но обратите внимание, что это не очень последовательное решение. Существует возможность для устаревших данных.
EVICT серверы, которые потерпели неудачу, так что ключи хэшируются в новое место и удаляются из кластера.
Когда вы говорите, что вы мигрировали, вы имеете в виду, что какие-либо новые «наборы» на ключе выходят из строя? – keety
Да, новый набор ключа, который был на узле выключения, не настроен на новый сервер. –