Есть ли способ удалить эфемерный узел после того, как клиент через какое-то время отключится?

Наши узлы кластера предпринимают действия по удалению некоторых временных узлов, но у нас возникают проблемы с сетью у клиента, что приводит к удалению временных узлов для некоторых клиентов, хотя эти клиенты все еще работают.

Я согласен, что проблемы с сетью должны быть решены, но не похоже, что мы можем это сделать в данный момент.

Итак, есть ли способ настроить Zookeeper для удаления эфемерного узла для отключенного клиента, только если он остается отключенным в течение X времени?

Мы используем Apache Curator в качестве клиента Zookeeper. Наша версия Zookeeper — 3.4.6.


person Muhammad Gelbana    schedule 15.08.2018    source источник


Ответы (1)


Вы можете поиграть с конфигурацией тайм-аута сеанса zookeeper, чтобы добиться желаемого поведения. Сервер Zookeeper удалит эфемерный узел для сеанса после того, как не получит пульс от клиента в течение времени ожидания сеанса.

person nsuneja    schedule 15.08.2018
comment
У меня есть значения по умолчанию (2000 мс tickTime, iniLimit = 10 и syncLimit = 5), и эфемерный узел исчезает после отключения клиента. Клиент снова подключается примерно через 1 секунду. - person Muhammad Gelbana; 15.08.2018
comment
Сервер Zookeeper предоставляет конфигурации minSessionTimeout и maxSessionTimeout (в миллисекундах) в файле zoo.cfg. Во время установления сеанса между клиентом и сервером согласовывается тайм-аут. Минимальное значение этого тайм-аута по умолчанию равно 2 * tickTime, а макс. составляет 20 * тиктайм. Таким образом, со всеми настройками сервера по умолчанию вы можете получить время ожидания сеанса от 4 до 40 секунд. - person nsuneja; 15.08.2018
comment
В зависимости от того, какую клиентскую библиотеку вы используете, клиент может указать желаемое время ожидания сеанса (в мс). Если для напр. согласованный тайм-аут составляет 20 секунд, ваш эфемерный узел будет удален через 20 секунд после того, как клиент отключится от сервера. - person nsuneja; 15.08.2018
comment
Итак, вы хотите, чтобы X в вашем вопросе был согласованным тайм-аутом сеанса. - person nsuneja; 15.08.2018
comment
Мы увеличили значение tickTime, и это решило проблему. Я полагаю, что ваше решение тоже должно работать. - person Muhammad Gelbana; 27.08.2018
comment
В порядке. Просто будьте осторожны с увеличением времени тика. Время тика — это единица времени, используемая зоопарком. Все, от тактов сервера zookeeper до тайм-аутов клиента, регулируется временем тика. Поскольку вы увеличили время тика, одним из возможных побочных эффектов является то, что пульсации сервера zookeeper (между серверами в кластере) будут происходить через более длительное время. В результате мёртвый сервер в кластере будет распознан позже, а если потребуется выбор лидера (в случае, если мёртвый сервер был мастером), то тоже будет отложено. - person nsuneja; 29.08.2018