mod_clusterおよびKeycloakが起動すると、Apache HTTPDサーバに対して自動的にKeycloakに対するプロキシ設定が行われます。プロキシ設定を確認するには、「mod_cluster_manager」を利用します。
httpdが動作しているサーバで「http://localhost:6666/mod_cluster-manager」にアクセスします(画面1)。
画面1の内容から、mod_clusterに2つのホストが認識されていることが分かります。この状態で、「http://localhost/auth」にアクセスすると、Keycloakの画面が表示されます。
この状態で画面操作を行いながらアクセスログを確認すると、リクエストが分散されていることが分かります。
127.0.0.1 - - [18/Dec/2017:16:58:46 +0900] "GET /auth/admin/realms HTTP/1.1" 200 5109 127.0.0.1 - - [18/Dec/2017:16:58:48 +0900] "GET /auth/admin/realms HTTP/1.1" 200 5109 127.0.0.1 - - [18/Dec/2017:16:58:51 +0900] "GET /auth/admin/realms/demo/client-templates HTTP/1.1" 200 2 127.0.0.1 - - [18/Dec/2017:16:58:51 +0900] "GET /auth/admin/realms HTTP/1.1" 200 5109 127.0.0.1 - - [18/Dec/2017:16:58:51 +0900] "GET /auth/admin/realms/demo/clients HTTP/1.1" 200 13788
127.0.0.1 - - [18/Dec/2017:16:58:48 +0900] "GET /auth/admin/realms/demo HTTP/1.1" 200 2436 127.0.0.1 - - [18/Dec/2017:16:58:48 +0900] "GET /auth/admin/realms/demo/clients?viewableOnly=true HTTP/1.1" 200 13788 127.0.0.1 - - [18/Dec/2017:16:58:50 +0900] "POST /auth/realms/master/protocol/openid-connect/token HTTP/1.1" 200 3319 127.0.0.1 - - [18/Dec/2017:16:58:50 +0900] "GET /auth/admin/realms/demo HTTP/1.1" 200 2436 127.0.0.1 - - [18/Dec/2017:16:58:50 +0900] "GET /auth/admin/realms/demo/clients/a8cbdfe1-23ff-4750-aadc-cc7fd41797b4 HTTP/1.1" 200 2672
次に、フェイルオーバー機能を試すために、片方のKeycloakサーバでプロセスを停止します。片方のプロセスを停止した場合でも、セッション情報などが共有されているため、引き続き同じセッションで接続できることが確認できます。
以上で2つのKeycloakサーバがクラスタ化されていることが確認できました。今回は単純な構成で構築を行いましたが、「マルチキャストが利用できない場合の構成」「複数データセンター間での構成」など、環境に合わせたさまざまな構成でクラスタ環境を構築できるようになっています。詳しくはKeycloakのドキュメントや、WildFlyのドキュメントを参照してください。
次回は、Keycloakで外部アイデンティティープロバイダーと連携する方法を解説します。
株式会社日立製作所 OSSソリューションセンタ所属。これまではソフトウェアエンジニアとしてストレージやサーバの管理ソフトウェア開発に従事してきた。現在は、主にアイデンティティー管理OSSやAPI管理OSSの検証、導入支援を行っている。
Copyright © ITmedia, Inc. All Rights Reserved.