keycloak HAのセットアップ手順
keycloak のセットアップを行ったのでメモ。
DockerImage が公開されているからちょろいちょろいと思ってたら
そのままだと HAモードで動かないことがわかりました。
https://hub.docker.com/r/jboss/keycloak-ha-postgres/
しょうがないので 公開されている Dockerfile ファイルを参考にして
VirtualBox上に HA(ハイアベイラビリティ)モードで動作させることを目指しました。
(なるべくデフォルト設定で)
目指す構成
構築する keycloak の構成
- スタンドアロンモード
- DB;postgres
- Infinispanクラスタ構成
- プロトコル;UDPマルチキャスト
- キャッシュモード;Replicated Mode(sessions)
環境
- Virtualbox 5.1.3
- Ubuntu16.04 Server(最小構成インストール)
- Keycloak 3.4.1.Final (執筆時最新)
さて、さっそくやってみましょう!
host側セットアップ
java install
# apt-get update -y # apt-get update -y && apt install -y openjdk-8-jdk
udp マルチキャスト設定
/etc/network/interfaces
auto enp0s8 iface enp0s8 inet dhcp post-up route add -net 224.0.0.0 netmask 240.0.0.0 enp0s8 post-up ifconfig enp0s8 multicast
keycloak install
# wget https://downloads.jboss.org/keycloak/3.4.1.Final/keycloak-3.4.1.Final.tar.gz # tar -xvf keycloak-3.4.1.Final.tar.gz # export JBOSS_HOME=/root/keycloak-3.4.1.Final
config
jboss cli
JBoss CLI で 管理サーバを起動します。
# $JBOSS_HOME/bin/jboss-cli.sh [disconnected /] embed-server --server-config=standalone-ha.xml --std-out=echo 09:33:53,376 INFO [org.jboss.modules] (AeshProcess: 1) JBoss Modules version 1.6.1.Final 09:33:53,531 INFO [org.jboss.msc] (AeshProcess: 1) JBoss MSC version 1.2.7.SP1 ; ; [standalone@embedded /]
起動したら、以下の設定を行っていきます
- loglevel
/subsystem=logging/logger=org.keycloak:add /subsystem=logging/logger=org.keycloak:write-attribute(name=level,value=INFO)
- proxy
/subsystem=undertow/server=default-server/http-listener=default: write-attribute(name=proxy-address-forwarding, value=false)
- change-database(postgres)
/subsystem=datasources/data-source=KeycloakDS: remove() /subsystem=datasources/data-source=KeycloakDS: add(jndi-name=java:jboss/datasources/KeycloakDS,enabled=true,use-java-context=true,use-ccm=true, connection-url=jdbc:postgresql://<DB host:5432>/keycloak, driver-name=postgresql) /subsystem=datasources/data-source=KeycloakDS: write-attribute(name=user-name, value=keycloak) /subsystem=datasources/data-source=KeycloakDS: write-attribute(name=password, value=password) /subsystem=datasources/data-source=KeycloakDS: write-attribute(name=check-valid-connection-sql, value="SELECT 1") /subsystem=datasources/data-source=KeycloakDS: write-attribute(name=background-validation, value=true) /subsystem=datasources/data-source=KeycloakDS: write-attribute(name=background-validation-millis, value=60000) /subsystem=datasources/data-source=KeycloakDS: write-attribute(name=flush-strategy, value=IdleConnections) /subsystem=datasources/jdbc-driver=postgresql:add(driver-name=postgresql, driver-module-name=org.postgresql.jdbc, driver-xa-datasource-class-name=org.postgresql.xa.PGXADataSource)
- infinispan
/subsystem=infinispan/cache-container=keycloak/distributed-cache=sessions:remove /subsystem=infinispan/cache-container=keycloak/replicated-cache=sessions:add() /subsystem=infinispan/cache-container=keycloak/replicated-cache=sessions:write-attribute(name="mode",value="SYNC")
設定終了時には 以下コマンドでJBoss管理サーバを止めます
[standalone@embedded /] stop-embedded-server [disconnected /] exit
postgres Driver
export JDBC_POSTGRES_VERSION=42.1.4 mkdir -p $JBOSS_HOME/modules/system/layers/base/org/postgresql/jdbc/main curl -L http://central.maven.org/maven2/org/postgresql/postgresql/$JDBC_POSTGRES_VERSION/postgresql-$JDBC_POSTGRES_VERSION.jar > $JBOSS_HOME/modules/system/layers/base/org/postgresql/jdbc/main/postgres-jdbc.jar
起動
# $JBOSS_HOME/bin/standalone.sh -c standalone-ha.xml -b 0.0.0.0 -Djboss.bind.address.private=<enp0s8 IP> -Djboss.bind.address.management=<enp0s8 IP>
同一ホスト内で複数起動するときはこんな感じ
# $JBOSS_HOME/bin/standalone.sh -c standalone-ha.xml -Djboss.socket.binding.port-offset=100 -Djboss.node.name=node1 # $JBOSS_HOME/bin/standalone.sh -c standalone-ha.xml -Djboss.socket.binding.port-offset=200 -Djboss.node.name=node2
moremagic
2017-12-22