Назад | Перейти на главную страницу

Отказоустойчивость Memcached

У нас настроено 2 сервера memcached и используется клиент Eniym. Когда один из серверов не работает, кажется, что этот сервер добавлен в список deadServers (ServerPool.cs) и пытается воскресить сервер каждые 10 секунд (мы настроили deadTimeOut равным 10 секундам). Попытка подключиться к вышедшему из строя серверу вызывает тайм-аут TCP, загрузка страниц занимает много времени, что приводит к неудовлетворительному взаимодействию с пользователем.

1) Каков стандартный способ решения этой проблемы? Есть несколько сообщений об удалении сервера из списка deadServers. Это нормально?

2) Какова рекомендуемая настройка deadTimeOut (я понимаю, что по умолчанию это 2 минуты, и в нашей реализации мы изменили его на 10 секунд)

3) Правильно ли я понимаю, что кэшированные данные не реплицируются между Сервером 1 и Сервером 2? Если Сервер 1 не работает, он обращается к базе данных для получения этих значений (и на самом деле не проверяет Сервер 2)?

Любая помощь очень ценится.

  1. Как правило, обычно ожидается, что вы просто согласитесь с тем, что в кеше может быть то, что вам нужно, а может и нет.
    • Это зависит от сценария, но похоже, что вам может быть полезен более высокий сценарий. Если он выше (2-5 минут), большой потери нет.
    • Да. Memcache обычно снова кэширует значения на Сервере 2 (после выборки из БД, поскольку кеш Сервера 1 недоступен).

Вы, вероятно, также уменьшите время ожидания TCP, используемое для повторного подключения к возможно мертвому серверу.