Keycloak и режим аннулирования для кеша ISPN - PullRequest
0 голосов
/ 29 октября 2018

Я бы хотел настроить Keycloak со встроенным кешем ISPN в режиме аннулирования для пользовательских сессий.

Согласно документу, режим аннулирования означает, что каждый узел получает свой собственный кеш, и только аннулирование распространяется на другие узлы (кеш полезен только для операций чтения). Я знаю, что представления не оптимальны, но магазин JDBC стал единственным источником правды, который мне интересен. Более того, поскольку мне нужно хранить 1 миллион пользовательских сессий в неделю, кэш ISPN заполняется очень быстро (6 ГБ), и сессии, вероятно, будут записываться / считываться из базы данных с высокой частотой, используя механизм пассивации / активации.

http://infinispan.org/docs/stable/user_guide/user_guide.html#replicated_mode

Но мне не удается заставить его работать, без ошибок, но поведение не является ожидаемым: база данных все еще пуста после нескольких операций входа в систему.

<subsystem xmlns="urn:jboss:domain:infinispan:6.0">
    <cache-container name="keycloak" module="org.keycloak.keycloak-model-infinispan">
        <transport lock-timeout="60000"/>
        <local-cache name="realms">
            <object-memory size="10000"/>
        </local-cache>
        <local-cache name="users">
            <object-memory size="10000"/>
        </local-cache>
        <invalidation-cache name="sessions" statistics-enabled="true">
            <binary-memory eviction-type="COUNT" size="1000"/>
            <expiration lifespan="180000"/>
            <jdbc-store data-source="InfinispanDS"
                        dialect="POSTGRES"
                        fetch-state="false"
                        passivation="false"
                        preload="false"
                        purge="false"
                        shared="true"
                        singleton="false">
                <table prefix="ISPN">
                    <id-column name="ID_COLUMN" type="VARCHAR(255)"/>
                    <data-column name="DATA_COLUMN" type="BYTEA"/>
                    <timestamp-column name="TIMESTAMP_COLUMN" type="BIGINT"/>
                </table>
            </jdbc-store>
        </invalidation-cache>
    </cache-container>  
</subsystem>
<xa-datasource jndi-name="java:jboss/datasources/InfinispanDS" pool-name="InfinispanDS" enabled="true" use-java-context="true" spy="true">
    <driver>postgresql</driver>
    <xa-datasource-property name="URL">jdbc:postgresql://localhost:5432/keycloak_ispn</xa-datasource-property>
    <security>
        <user-name>postgres</user-name>
        <password>***</password>
    </security>
    <validation>
        <use-fast-fail>true</use-fast-fail>
        <validate-on-match>false</validate-on-match>
        <background-validation>true</background-validation>
        <background-validation-millis>60000</background-validation-millis>
        <valid-connection-checker class-name="org.jboss.jca.adapters.jdbc.extensions.postgres.PostgreSQLValidConnectionChecker"/>
        <exception-sorter class-name="org.jboss.jca.adapters.jdbc.extensions.postgres.PostgreSQLExceptionSorter"/>
    </validation>
</xa-datasource>

Может ли кто-нибудь подтвердить мне, что это должно работать?

(Другой вариант - использовать распределенный кеш с eviction-type = "COUNT" и size = "1", который на самом деле работает, но, я полагаю, совсем не больше кеша).

Спасибо

ОБНОВЛЕНИЕ 15: 09

На самом деле, есть следы:

15:01:07,748 DEBUG [org.keycloak.models.sessions.infinispan.InfinispanAuthenticationSessionProviderFactory] (default task-1) [node11] Registered cluster listeners
15:01:12,147 DEBUG [org.keycloak.models.sessions.infinispan.InfinispanUserSessionProvider] (default task-1) getUserSessionWithPredicate(2cd1a484-1ba6-4f69-8aec-e85f56029bef): found in local cache
15:01:12,149 DEBUG [org.keycloak.models.sessions.infinispan.InfinispanCodeToTokenStoreProviderFactory] (default task-1) Not having remote stores. Using normal cache 'actionTokens' for single-use cache of code
15:01:12,220 DEBUG [org.keycloak.models.sessions.infinispan.changes.InfinispanChangelogBasedTransaction] (default task-1) Replace failed for entity: bd8fe447-b350-45a7-b785-4a4a0c40cb83, old version 9f465b0f-a2ac-407c-a9a1-5f97dca0e337, new version f8b2cf82-c84b-4e57-a058-5e44dba58324. Will try again

- ник

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...