[keycloak-user] Fwd: keycloak-2.1.0.Final On cluster

Aman Jaiswal aman.jaiswal at arvindinternet.com
Thu Sep 8 02:46:06 EDT 2016


https://developer.jboss.org/message/962625#962625

Hi

I am trying to run keycloak-2.1.0.Final in Cluster mode on AWS, but AWS
does not support multicast .

For previous version of keycloak-1.5.0.Final it is working fine on cluster
mode but new version of keycloak-2.1.0.Final is not working precisely on
cluster mode,

The setup of keycloak-1.5.0.Final is done by the different person and I am
trying to replicate same setting on keycloak-2.1.0.FInal



I have 2 AWS servers which is running behind the load balancer with S3
bucket, S3 bucket is use to setup a communication between both the servers

after starting the keycloak I am thinking that is's working fine because my
both the instances are running behind load balancer and s3 buckets are

working fine but I am wrong it is not working fine, After changing the
password I realise  that it is not working fine because after logout some
time

I am able to login with new password and some time it accepts old one.First
I think It is load balancer stickiness problem so I change it



here are following problems with this when stickiness is enable or disable

1: load balancer stickiness is disable

       keycloak start without any error and when trying to login it gives
error in LOG like "Invalid User" or "an error occurred please login aging
through your application"

2: Load Banalcer stickiness is enable (Enable load balancer generated
cookie stickiness)

     keyclaok start without any error and also open in browser with admin
login , and when I am trying to change the password it does not reflect on
both the servers

     because it does not update the cache of both server, so some time it
gives access  by new password and some time with old password .



I dont wnat to use any alternet option for this so please help me for this

*following are settings which I have made in the standalone-ha.xml file...
and setting for s3 buckets are in bold*



<?xml version="1.0" ?>





<server xmlns="urn:jboss:domain:4.0">

    <extensions>

        <extension module="org.jboss.as.clustering.infinispan"/>

        <extension module="org.jboss.as.clustering.jgroups"/>

        <extension module="org.jboss.as.connector"/>

        <extension module="org.jboss.as.ee"/>

        <extension module="org.jboss.as.ejb3"/>

        <extension module="org.jboss.as.jaxrs"/>

        <extension module="org.jboss.as.jdr"/>

        <extension module="org.jboss.as.jmx"/>

        <extension module="org.jboss.as.jpa"/>

        <extension module="org.jboss.as.jsf"/>

        <extension module="org.jboss.as.logging"/>

        <extension module="org.jboss.as.mail"/>

        <extension module="org.jboss.as.modcluster"/>

        <extension module="org.jboss.as.naming"/>

        <extension module="org.jboss.as.remoting"/>

        <extension module="org.jboss.as.security"/>

        <extension module="org.jboss.as.transactions"/>

        <extension module="org.keycloak.keycloak-server-subsystem"/>

        <extension module="org.wildfly.extension.bean-validation"/>

        <extension module="org.wildfly.extension.io"/>

        <extension module="org.wildfly.extension.request-controller"/>

        <extension module="org.wildfly.extension.security.manager"/>

        <extension module="org.wildfly.extension.undertow"/>

    </extensions>

    <management>

        <security-realms>

            <security-realm name="ManagementRealm">

                <authentication>

                    <local default-user="$local" skip-group-loading="true"/>

                    <properties path="mgmt-users.properties"
relative-to="jboss.server.config.dir"/>

                </authentication>

                <authorization map-groups-to-roles="false">

                    <properties path="mgmt-groups.properties"
relative-to="jboss.server.config.dir"/>

                </authorization>

            </security-realm>

            <security-realm name="ApplicationRealm">

                <authentication>

                    <local default-user="$local" allowed-users="*"
skip-group-loading="true"/>

                    <properties path="application-users.properties"
relative-to="jboss.server.config.dir"/>

                </authentication>

                <authorization>

                    <properties path="application-roles.properties"
relative-to="jboss.server.config.dir"/>

                </authorization>

            </security-realm>

        </security-realms>

        <audit-log>

            <formatters>

                <json-formatter name="json-formatter"/>

            </formatters>

            <handlers>

                <file-handler name="file" formatter="json-formatter"
relative-to="jboss.server.data.dir" path="audit-log.log"/>

            </handlers>

            <logger log-boot="true" log-read-only="false" enabled="false">

                <handlers>

                    <handler name="file"/>

                </handlers>

            </logger>

        </audit-log>

        <management-interfaces>

            <http-interface security-realm="ManagementRealm"
http-upgrade-enabled="true">

                <socket-binding http="management-http"/>

            </http-interface>

        </management-interfaces>

        <access-control provider="simple">

            <role-mapping>

                <role name="SuperUser">

                    <include>

                        <user name="$local"/>

                    </include>

                </role>

            </role-mapping>

        </access-control>

    </management>

    <profile>

        <subsystem xmlns="urn:jboss:domain:logging:3.0">

            <console-handler name="CONSOLE">

                <level name="INFO"/>

                <formatter>

                    <named-formatter name="COLOR-PATTERN"/>

                </formatter>

            </console-handler>

            <periodic-rotating-file-handler name="FILE" autoflush="true">

                <formatter>

                    <named-formatter name="PATTERN"/>

                </formatter>

                <file relative-to="jboss.server.log.dir" path="server.log"/>

                <suffix value=".yyyy-MM-dd"/>

                <append value="true"/>

            </periodic-rotating-file-handler>

            <logger category="com.arjuna">

                <level name="WARN"/>

            </logger>

            <logger category="org.jboss.as.config">

                <level name="DEBUG"/>

            </logger>

            <logger category="sun.rmi">

                <level name="WARN"/>

            </logger>

            <root-logger>

                <level name="INFO"/>

                <handlers>

                    <handler name="CONSOLE"/>

                    <handler name="FILE"/>

                </handlers>

            </root-logger>

            <formatter name="PATTERN">

                <pattern-formatter pattern="%d{yyyy-MM-dd HH:mm:ss,SSS}
%-5p [%c] (%t) %s%e%n"/>

            </formatter>

            <formatter name="COLOR-PATTERN">

                <pattern-formatter pattern="%K{level}%d{HH:mm:ss,SSS} %-5p
[%c] (%t) %s%e%n"/>

            </formatter>

        </subsystem>

        <subsystem xmlns="urn:jboss:domain:bean-validation:1.0"/>

        <subsystem xmlns="urn:jboss:domain:datasources:4.0">

            <datasources>

                <datasource jndi-name="java:jboss/datasources/ExampleDS"
pool-name="ExampleDS" enabled="true" use-java-context="true">

                    <connection-url>jdbc:h2:mem:test;DB_CLOSE_DELAY=-1;DB_
CLOSE_ON_EXIT=FALSE</connection-url>

                    <driver>h2</driver>

                    <security>

                        <user-name>sa</user-name>

                        <password>sa</password>

                    </security>

                </datasource>

               *<datasource jndi-name="java:jboss/datasources/KeycloakDS"
pool-name="KeycloakDS" enabled="true" use-java-context="true">*

*<connection-url>jdbc:mysql://keycloak-dev-mysql</connection-url>*

*                    <driver>mysql</driver>*

*
<transaction-isolation>TRANSACTION_READ_COMMITTED</transaction-isolation>*

*     <pool>*

*       <min-pool-size>10</min-pool-size>*

*       <max-pool-size>20</max-pool-size>*

*     </pool>*

*                    <security>*

*                        <user-name>user</user-name>*

*                        <password>password</password>*

*                    </security>*

*                </datasource>*

                <drivers>

   <driver name="mysql" module="org.mysql">

     <xa-datasource-class>org.mysql</xa-datasource-class>

   </driver>

                  <driver name="h2" module="com.h2database.h2">

                    <xa-datasource-class>org.h2.jdbcx.JdbcDataSource</xa-
datasource-class>

                  </driver>

                </drivers>

            </datasources>

        </subsystem>

        <subsystem xmlns="urn:jboss:domain:ee:4.0">

            <spec-descriptor-property-replacement>false</spec-
descriptor-property-replacement>

            <concurrent>

                <context-services>

                    <context-service name="default"
jndi-name="java:jboss/ee/concurrency/context/default" use-transaction-setup-
provider="true"/>

                </context-services>

                <managed-thread-factories>

                    <managed-thread-factory name="default"
jndi-name="java:jboss/ee/concurrency/factory/default"
context-service="default"/>

                </managed-thread-factories>

                <managed-executor-services>

                    <managed-executor-service name="default"
jndi-name="java:jboss/ee/concurrency/executor/default"
context-service="default" hung-task-threshold="60000"
keepalive-time="5000"/>

                </managed-executor-services>

                <managed-scheduled-executor-services>

                    <managed-scheduled-executor-service name="default"
jndi-name="java:jboss/ee/concurrency/scheduler/default"
context-service="default" hung-task-threshold="60000"
keepalive-time="3000"/>

                </managed-scheduled-executor-services>

            </concurrent>

            <default-bindings context-service="java:jboss/
ee/concurrency/context/default" datasource="java:jboss/datasources/ExampleDS"
managed-executor-service="java:jboss/ee/concurrency/executor/default"
managed-scheduled-executor-service="java:jboss/ee/concurrency/scheduler/default"
managed-thread-factory="java:jboss/ee/concurrency/factory/default"/>

        </subsystem>

        <subsystem xmlns="urn:jboss:domain:ejb3:4.0">

            <session-bean>

                <stateless>

                    <bean-instance-pool-ref pool-name="slsb-strict-max-
pool"/>

                </stateless>

                <stateful default-access-timeout="5000"
cache-ref="distributable" passivation-disabled-cache-ref="simple"/>

                <singleton default-access-timeout="5000"/>

            </session-bean>

            <pools>

                <bean-instance-pools>

                    <!-- Automatically configure pools. Alternatively,
max-pool-size can be set to a specific value -->

                    <strict-max-pool name="slsb-strict-max-pool"
derive-size="from-worker-pools" instance-acquisition-timeout="5"
instance-acquisition-timeout-unit="MINUTES"/>

                    <strict-max-pool name="mdb-strict-max-pool"
derive-size="from-cpu-count" instance-acquisition-timeout="5"
instance-acquisition-timeout-unit="MINUTES"/>

                </bean-instance-pools>

            </pools>

            <caches>

                <cache name="simple"/>

                <cache name="distributable" passivation-store-ref="infinispan"
aliases="passivating clustered"/>

            </caches>

            <passivation-stores>

                <passivation-store name="infinispan" cache-container="ejb"
max-size="10000"/>

            </passivation-stores>

            <async thread-pool-name="default"/>

            <timer-service thread-pool-name="default"
default-data-store="default-file-store">

                <data-stores>

                    <file-data-store name="default-file-store"
path="timer-service-data" relative-to="jboss.server.data.dir"/>

                </data-stores>

            </timer-service>

            <remote connector-ref="http-remoting-connector"
thread-pool-name="default"/>

            <thread-pools>

                <thread-pool name="default">

                    <max-threads count="10"/>

                    <keepalive-time time="100" unit="milliseconds"/>

                </thread-pool>

            </thread-pools>

            <default-security-domain value="other"/>

            <default-missing-method-permissions-deny-access value="true"/>

            <log-system-exceptions value="true"/>

        </subsystem>

        <subsystem xmlns="urn:jboss:domain:io:1.1">

            <worker name="default"/>

            <buffer-pool name="default"/>

        </subsystem>

        <subsystem xmlns="urn:jboss:domain:infinispan:4.0">

            <cache-container name="keycloak" jndi-name="infinispan/
Keycloak">

                <transport lock-timeout="60000"/>

                <invalidation-cache name="realms" mode="SYNC"/>

                <invalidation-cache name="users" mode="SYNC">

                    <eviction max-entries="10000" strategy="LRU"/>

                </invalidation-cache>

                <distributed-cache name="sessions" mode="SYNC" owners="1"/>

                <distributed-cache name="offlineSessions" mode="SYNC"
owners="1"/>

                <distributed-cache name="loginFailures" mode="SYNC"
owners="1"/>

                <replicated-cache name="work" mode="SYNC"/>

            </cache-container>

            <cache-container name="server" aliases="singleton cluster"
default-cache="default" module="org.wildfly.clustering.server">

                <transport lock-timeout="60000"/>

                <replicated-cache name="default" mode="SYNC">

                    <transaction mode="BATCH"/>

                </replicated-cache>

            </cache-container>

            <cache-container name="web" default-cache="dist"
module="org.wildfly.clustering.web.infinispan">

                <transport lock-timeout="60000"/>

                <distributed-cache name="dist" mode="ASYNC" l1-lifespan="0"
owners="2">

                    <locking isolation="REPEATABLE_READ"/>

                    <transaction mode="BATCH"/>

                    <file-store/>

                </distributed-cache>

            </cache-container>

            <cache-container name="ejb" aliases="sfsb" default-cache="dist"
module="org.wildfly.clustering.ejb.infinispan">

                <transport lock-timeout="60000"/>

                <distributed-cache name="dist" mode="ASYNC" l1-lifespan="0"
owners="2">

                    <locking isolation="REPEATABLE_READ"/>

                    <transaction mode="BATCH"/>

                    <file-store/>

                </distributed-cache>

            </cache-container>

            <cache-container name="hibernate" default-cache="local-query"
module="org.hibernate.infinispan">

                <transport lock-timeout="60000"/>

                <invalidation-cache name="entity" mode="SYNC">

                    <transaction mode="NON_XA"/>

                    <eviction strategy="LRU" max-entries="10000"/>

                    <expiration max-idle="100000"/>

                </invalidation-cache>

                <local-cache name="local-query">

                    <eviction strategy="LRU" max-entries="10000"/>

                    <expiration max-idle="100000"/>

                </local-cache>

                <replicated-cache name="timestamps" mode="ASYNC"/>

            </cache-container>

        </subsystem>

        <subsystem xmlns="urn:jboss:domain:jaxrs:1.0"/>

        <subsystem xmlns="urn:jboss:domain:jca:4.0">

            <archive-validation enabled="true" fail-on-error="true"
fail-on-warn="false"/>

            <bean-validation enabled="true"/>

            <default-workmanager>

                <short-running-threads>

                    <core-threads count="50"/>

                    <queue-length count="50"/>

                    <max-threads count="50"/>

                    <keepalive-time time="10" unit="seconds"/>

                </short-running-threads>

                <long-running-threads>

                    <core-threads count="50"/>

                    <queue-length count="50"/>

                    <max-threads count="50"/>

                    <keepalive-time time="10" unit="seconds"/>

                </long-running-threads>

            </default-workmanager>

            <cached-connection-manager/>

        </subsystem>

        <subsystem xmlns="urn:jboss:domain:jdr:1.0"/>

        <subsystem xmlns="urn:jboss:domain:jgroups:4.0">

           *<channels default="ee">*

*                <channel name="ee" stack="udp"/>*

*            </channels>*

            *<stacks default="s3">*

*                <stack name="udp">*

                   *<transport type="UDP" socket-binding="jgroups-udp"/>*

*                    <protocol type="PING"/>*

*                    <protocol type="MERGE3"/>*

*                    <protocol type="FD_SOCK"
socket-binding="jgroups-udp-fd"/>*

*                    <protocol type="FD_ALL"/>*

*                    <protocol type="VERIFY_SUSPECT"/>*

*                    <protocol type="pbcast.NAKACK2"/>*

*                    <protocol type="UNICAST3"/>*

*                    <protocol type="pbcast.STABLE"/>*

*                    <protocol type="pbcast.GMS"/>*

*                    <protocol type="UFC"/>*

*                    <protocol type="MFC"/>*

*                    <protocol type="FRAG2"/>*

*                </stack>*

              *  <stack name="tcp">*

*                    <transport type="TCP" socket-binding="jgroups-tcp"/>*

*                    <protocol type="MPING"
socket-binding="jgroups-mping"/>*

*                    <protocol type="MERGE3"/>*

*                    <protocol type="FD_SOCK"
socket-binding="jgroups-tcp-fd"/>*

*                    <protocol type="FD"/>*

*                    <protocol type="VERIFY_SUSPECT"/>*

*                    <protocol type="pbcast.NAKACK2"/>*

*                    <protocol type="UNICAST3"/>*

*                    <protocol type="pbcast.STABLE"/>*

*                    <protocol type="pbcast.GMS"/>*

*                    <protocol type="MFC"/>*

*                    <protocol type="FRAG2"/>*

*                </stack>*

*<stack name="s3">*

*   <transport type="TCP" socket-binding="jgroups-tcp"/>*

*   <protocol type="S3_PING">*

   *  <property name="location">${jgroups.s3.bucket:}</property>*

*     <property name="access_key">${jgroups.s3.access_key:}</property>*

*     <property
name="secret_access_key">${jgroups.s3.secret_access_key:}</property>*

*   </protocol>*

*   <protocol type="MERGE3"/>*

*   <protocol type="FD_SOCK" socket-binding="jgroups-tcp-fd"/>*

*   <protocol type="FD_ALL"/>*

*   <protocol type="VERIFY_SUSPECT"/>*

*   <protocol type="pbcast.NAKACK2">*

*     <property name="use_mcast_xmit">false</property>*

*   </protocol>*

*   <protocol type="UNICAST3"/>*

*   <protocol type="pbcast.STABLE"/>*

*   <protocol type="pbcast.GMS"/>*

*   <protocol type="MFC"/>*

*   <protocol type="FRAG2">*

*     <property name="frag_size">16K</property>*

*   </protocol>*

*  </stack>*

*            </stacks>*

        </subsystem>

        <subsystem xmlns="urn:jboss:domain:jmx:1.3">

            <expose-resolved-model/>

            <expose-expression-model/>

            <remoting-connector/>

        </subsystem>

        <subsystem xmlns="urn:jboss:domain:jpa:1.1">

            <jpa default-datasource="" default-extended-persistence-
inheritance="DEEP"/>

        </subsystem>

        <subsystem xmlns="urn:jboss:domain:jsf:1.0"/>

        <subsystem xmlns="urn:jboss:domain:mail:2.0">

            <mail-session name="default" jndi-name="java:jboss/mail/
Default">

                <smtp-server outbound-socket-binding-ref="mail-smtp"/>

            </mail-session>

        </subsystem>

        <subsystem xmlns="urn:jboss:domain:modcluster:2.0">

            <mod-cluster-config advertise-socket="modcluster"
connector="ajp">

                <dynamic-load-provider>

                    <load-metric type="cpu"/>

                </dynamic-load-provider>

            </mod-cluster-config>

        </subsystem>

        <subsystem xmlns="urn:jboss:domain:naming:2.0">

            <remote-naming/>

        </subsystem>

        <subsystem xmlns="urn:jboss:domain:remoting:3.0">

            <endpoint/>

            <http-connector name="http-remoting-connector"
connector-ref="default" security-realm="ApplicationRealm"/>

        </subsystem>

        <subsystem xmlns="urn:jboss:domain:request-controller:1.0"/>

        <subsystem xmlns="urn:jboss:domain:security-manager:1.0">

            <deployment-permissions>

                <maximum-set>

                    <permission class="java.security.AllPermission"/>

                </maximum-set>

            </deployment-permissions>

        </subsystem>

        <subsystem xmlns="urn:jboss:domain:security:1.2">

            <security-domains>

                <security-domain name="other" cache-type="default">

                    <authentication>

                        <login-module code="Remoting" flag="optional">

                            <module-option name="password-stacking"
value="useFirstPass"/>

                        </login-module>

                        <login-module code="RealmDirect" flag="required">

                            <module-option name="password-stacking"
value="useFirstPass"/>

                        </login-module>

                    </authentication>

                </security-domain>

                <security-domain name="jboss-web-policy"
cache-type="default">

                    <authorization>

                        <policy-module code="Delegating" flag="required"/>

                    </authorization>

                </security-domain>

                <security-domain name="jboss-ejb-policy"
cache-type="default">

                    <authorization>

                        <policy-module code="Delegating" flag="required"/>

                    </authorization>

                </security-domain>

                <security-domain name="jaspitest" cache-type="default">

                    <authentication-jaspi>

                        <login-module-stack name="dummy">

                            <login-module code="Dummy" flag="optional"/>

                        </login-module-stack>

                        <auth-module code="Dummy"/>

                    </authentication-jaspi>

                </security-domain>

            </security-domains>

        </subsystem>

        <subsystem xmlns="urn:jboss:domain:transactions:3.0">

            <core-environment node-identifier="keycloak">

                <process-id>

                    <uuid/>

                </process-id>

            </core-environment>

            <recovery-environment socket-binding="txn-recovery-environment"
status-socket-binding="txn-status-manager"/>

        </subsystem>

        <subsystem xmlns="urn:jboss:domain:undertow:3.0">

            <buffer-cache name="default"/>

            <server name="default-server">

                <ajp-listener name="ajp" socket-binding="ajp"/>

                <http-listener name="default" socket-binding="http"
redirect-socket="https" />

                <host name="default-host" alias="localhost">

                    <location name="/" handler="welcome-content"/>

                    <filter-ref name="server-header"/>

                    <filter-ref name="x-powered-by-header"/>

                </host>

            </server>

            <servlet-container name="default">

                <jsp-config/>

                <websockets/>

            </servlet-container>

            <handlers>

                <file name="welcome-content" path="${jboss.home.dir}/
welcome-content"/>

            </handlers>

            <filters>

                <response-header name="server-header" header-name="Server"
header-value="WildFly/10"/>

                <response-header name="x-powered-by-header"
header-name="X-Powered-By" header-value="Undertow/1"/>

            </filters>

        </subsystem>

        <subsystem xmlns="urn:jboss:domain:keycloak-server:1.1">

            <web-context>auth</web-context>

        </subsystem>

    </profile>

    <interfaces>

        <interface name="management">

            <inet-address value="${jboss.bind.address.
management:127.0.0.1}"/>

        </interface>

        <interface name="public">

            <inet-address value="${jboss.bind.address:127.0.0.1}"/>

        </interface>

        <interface name="private">

            <inet-address value="${jboss.bind.address.private:127.0.0.1}"/>

        </interface>

    </interfaces>

    <socket-binding-group name="standard-sockets"
default-interface="public" port-offset="${jboss.socket.
binding.port-offset:0}">

        <socket-binding name="management-http" interface="management"
port="${jboss.management.http.port:9990}"/>

        <socket-binding name="management-https" interface="management"
port="${jboss.management.https.port:9993}"/>

        <socket-binding name="ajp" port="${jboss.ajp.port:8009}"/>

        <socket-binding name="http" port="${jboss.http.port:8080}"/>

        <socket-binding name="https" port="${jboss.https.port:8443}"/>

        <socket-binding name="jgroups-mping" interface="private" port="0"
multicast-address="${jboss.default.multicast.address:230.0.0.4}"
multicast-port="45700"/>

        <socket-binding name="jgroups-tcp" interface="private" port="7600"/>

        <socket-binding name="jgroups-tcp-fd" interface="private"
port="57600"/>

        <socket-binding name="jgroups-udp" interface="private" port="55200"
multicast-address="${jboss.default.multicast.address:230.0.0.4}"
multicast-port="45688"/>

        <socket-binding name="jgroups-udp-fd" interface="private"
port="54200"/>

        <socket-binding name="modcluster" port="0"
multicast-address="224.0.1.105" multicast-port="23364"/>

        <socket-binding name="txn-recovery-environment" port="4712"/>

        <socket-binding name="txn-status-manager" port="4713"/>

        <outbound-socket-binding name="mail-smtp">

            <remote-destination host="localhost" port="25"/>

        </outbound-socket-binding>

    </socket-binding-group>

</server>


-- 
Thanks,
Aman Jaiswal



-- 
Thanks,
Aman Jaiswal
-------------- next part --------------
An HTML attachment was scrubbed...
URL: http://lists.jboss.org/pipermail/keycloak-user/attachments/20160908/7154be57/attachment-0001.html 


More information about the keycloak-user mailing list