Простая настройка:
- 1 node запуск twemproxy (vcache: 22122)
- 2 узла, выполняющие memcached (vcache-1, vcache-2), и прослушивание 11211
У меня есть следующая конфигурация twemproxy:
default:
auto_eject_hosts: true
distribution: ketama
hash: fnv1a_64
listen: 0.0.0.0:22122
server_failure_limit: 1
server_retry_timeout: 600000 # 600sec, 10m
timeout: 100
servers:
- vcache-1:11211:1
- vcache-2:11211:1
Twemproxy node может разрешить все имена хостов. В рамках тестирования я снял vcache-2. Теоретически для каждой попытки взаимодействия с vcache: 22122, twemproxy свяжется с сервером из пула, чтобы облегчить попытку. Однако, если один из узлов кэша отключен, тогда twemproxy должен "автоматически извлечь" его из пула, поэтому последующие запросы не будут терпеть неудачу.
До уровня приложения зависит от того, был ли неудачный интерфейс попыткой с vcache: 22122 был вызван проблемой инфраструктуры, и если да, повторите попытку. Однако я нахожу, что при повторном запуске используется тот же неудачный сервер, поэтому вместо последующих попыток, передаваемых в известный хороший кеш node (в данном случае vcache-1), они все еще передаются в выгруженный кеш node (vcache-2).
Здесь фрагмент кода PHP, который пытается выполнить повтор:
....
// $this is a Memcached object with vcache:22122 in the server list
$retryCount = 0;
do {
$status = $this->set($key, $value, $expiry);
if (Memcached::RES_SUCCESS === $this->getResultCode()) {
return true;
}
} while (++$retryCount < 3);
return false;
- Обновление -
Ссылка на проблему, открытую в Github для получения дополнительной информации: Проблема № 427