Из-за утечек памяти после включения распределенное кеширование в WSO2 Identity Server 5.1.0 (аналогично: WSO2 JIRA IDENTITY-5050) на основе Руководство по кластеризации WSO2 я подумал, что попробую другой подход для моего кластера из нескольких активных экземпляров (для высокой доступности), отключив кеширование и доверие к базе данных будет достаточно масштабным для моих целей.
Я отключил довольно много кешей через identity.xml ниже:
<CacheConfig>
<CacheManager name = "IdentityApplicationManagementCacheManager">
<Cache name = "AppAuthFrameworkSessionContextCache"
enable = "false" timeout = "300" capacity = "5000" isDistributed = "false"/>
<Cache name = "AuthenticationContextCache" enable = "true" timeout = "300" capacity = "5000" isDistributed = "false"/>
<Cache name = "AuthenticationRequestCache" enable = "true" timeout = "300" capacity = "5000" isDistributed = "false"/>
<Cache name = "AuthenticationResultCache" enable = "true" timeout = "300" capacity = "5000" isDistributed = "false"/>
<Cache name = "AppInfoCache" enable = "true" timeout = "900" capacity = "5000" isDistributed = "false"/>
<Cache name = "AuthorizationGrantCache" enable = "false" timeout = "300" capacity = "5000" isDistributed = "false"/>
<Cache name = "OAuthCache" enable = "true" timeout = "300" capacity = "5000" isDistributed = "false"/>
<Cache name = "OAuthScopeCache" enable = "true" timeout = "300" capacity = "5000" isDistributed = "false"/>
<Cache name = "OAuthSessionDataCache" enable = "true" timeout = "300" capacity = "5000" isDistributed = "false"/>
<Cache name = "SAMLSSOParticipantCache" enable = "true" timeout = "300" capacity = "5000" isDistributed = "false"/>
<Cache name = "SAMLSSOSessionIndexCache" enable = "true" timeout = "300" capacity = "5000" isDistributed = "false"/>
<Cache name = "SAMLSSOSessionDataCache" enable = "true" timeout = "300" capacity = "5000" isDistributed = "false"/>
<Cache name = "ServiceProviderCache" enable = "true" timeout = "900" capacity = "5000" isDistributed = "false"/>
<Cache name = "ProvisioningConnectorCache" enable = "true" timeout = "900" capacity = "5000" isDistributed = "false"/>
<Cache name = "ProvisioningEntityCache" enable = "true" timeout = "900" capacity = "5000" isDistributed = "false"/>
<Cache name = "ServiceProviderProvisioningConnectorCache"
enable = "true" timeout = "900" capacity = "5000" isDistributed = "false"/>
<Cache name = "IdPCacheByAuthProperty" enable = "false" timeout = "900" capacity = "5000" isDistributed = "false"/>
<Cache name = "IdPCacheByHRI" enable = "false" timeout = "900" capacity = "5000" isDistributed = "false"/>
<Cache name = "IdPCacheByName" enable = "false" timeout = "900" capacity = "5000" isDistributed = "false"/>
</CacheManager>
<CacheManager name = "IDENTITY_LOGIN_DATA_CACHE_MANAGER">
<Cache name = "IDENTITY_LOGIN_DATA_CACHE" enable = "false" timeout = "1" capacity = "5000" isDistributed = "false"/>
</CacheManager>
</CacheConfig>
Но мне не удалось отключить кеш JDBCIdentityDataStore, который использует IDENTITY_LOGIN_DATA_CACHE (определенный в родительском классе InMemoryIdentityDataStore). Это имеет решающее значение для информации о блокировке учетной записи в то время, когда пользователи используют другое подключение к Интернету для своего ноутбука (WIFI), затем они получают письмо активации (соединение для передачи данных по сотовой сети) и после его активации задаются вопросом, почему их учетная запись все еще отключена.
Я открыт для предложений, помимо моих:
Спасибо за ваше предложение. Однако в нашем случае, согласно netstat и tcpdump -i any port 4000, у нас были активные соединения через порт кластера 4000 между узлами (после того, как мы убедились, что мы использовали полное доменное имя для WKA, который был разрешен, и была включена переадресация порта Docker), но затем мы закончили с утечкой памяти, и я не уверен, были ли согласованы все разные кеши в кластере - и я понятия не имею, как это проверить. Этот вопрос посвящен тому, как запускать кластеры wso2 без включенных кешей.
Имхо, ваша установка будет работать без некоторых функций (отзыв токена между узлами ..). У нас была утечка памяти на wso2is 5.1.0, и использование ip вместо fqdn помогло. Я считаю, что в текущей версии wso2is проблема решена (это было что-то с именованием соединений hazelcast)
Вы придумали, как остановить кеш IDENTITY_LOGIN_DATA_CACHE? Это тоже меня беспокоит
Нет, мы реализовали активный / пассивный кластер вместо активного / активного с нашим балансировщиком нагрузки, чтобы обойти проблему.
попробуйте использовать IP-адреса в конфигурации кластера hazelcast вместо имен хостов, это нам помогло