Комментарии 10
Можно уточнить, какую скорость failover удалось достигнуть таким образом?
и если с БД всё более-менее понятно
Прошлись бы мимоходом, какую СУБД используете и как кластеризуете.
Скажем, красивые инструкции по запуску Keycloak на CockroachDB на практике не такие красивые - выполнить последующий апгрейд даже на минорную версию будет невозможно из-за несовместимости при обработке транзакций.
Посчитал, что это выходит за рамки статьи. Всё достаточно обыденно, но это я ещё не обновлял ни разу keycloak, только предстоит.
Используем в качестве БД PostgreSQL 15, кластеризуем через Patroni 3.0.2, балансируем нагрузку с помощью HAProxy.
Как раз при использовании обычного PostgreSQL проблем на уровне Keycloak нет.
А вот при использовании Postrgres-совместимой CockroachDB, например как описано в статье, на которую вы сослались в источниках, вылезают проблемы именно в момент апгрейда. Заподозрить неладное можно уже из предлагаемого пути установки: сначала предлагается ставить на PostgreSQL, а затем импортировать дамп в CockroachDB.
А как же настройка самого Infinispan?
Если я правильно помню, то по умолчанию он хранит только один экземпляр в кэше и если перезапустить keycloak на одной из нод, то все сессии на ней пропадут. Нужно явно указать количество owners для записей.
Посмотрел, в нашей конфигурации keycloak 20.0.3 по умолчанию проставлено owners="2" для всех кэшей.
Подобной настройки не производил, не думал в эту сторону, так как для нас подобные последствия из-за отказа одной из нод не являются значимыми. Но узнать было полезно, спасибо.
Я уже давно с keycloak не сталкивался, раньше видимо по умолчанию было owners="1", а так как там хранятся сессии, то upgrade бы приводил к logout части пользователей. На саму доступность сервиса это не влияет. В целом keycloak довольно удобен, но я сейчас присматриваюсь к zitadel (она по умолчанию использует CockroachDB)
Мы сделали через
--cache-stack=kubernetes
-Djgroups.dns.query=dns-name
dns-name возвращает несколько A записей.
Keycloak ― построение отказоустойчивого кластера