Data Grid Server ガイド
Data Grid Server のデプロイ、保護、および管理
概要
Red Hat Data Grid
Data Grid は、高性能の分散型インメモリーデータストアです。
- スキーマレスデータ構造
- さまざまなオブジェクトをキーと値のペアとして格納する柔軟性があります。
- グリッドベースのデータストレージ
- クラスター間でデータを分散および複製するように設計されています。
- エラスティックスケーリング
- サービスを中断することなく、ノードの数を動的に調整して要件を満たします。
- データの相互運用性
- さまざまなエンドポイントからグリッド内のデータを保存、取得、およびクエリーします。
Data Grid のドキュメント
Data Grid のドキュメントは、Red Hat カスタマーポータルで入手できます。
Data Grid のダウンロード
Red Hat カスタマーポータルで Data Grid Software Downloads にアクセスします。
Data Grid ソフトウェアにアクセスしてダウンロードするには、Red Hat アカウントが必要です。
多様性を受け入れるオープンソースの強化
Red Hat では、コード、ドキュメント、Web プロパティーにおける配慮に欠ける用語の置き換えに取り組んでいます。まずは、マスター (master)、スレーブ (slave)、ブラックリスト (blacklist)、ホワイトリスト (whitelist) の 4 つの用語の置き換えから始めます。この取り組みは膨大な作業を要するため、今後の複数のリリースで段階的に用語の置き換えを実施して参ります。詳細は、Red Hat CTO である Chris Wright のメッセージ を参照してください。
第1章 Getting Started with Data Grid Server
Data Grid Server を素早く設定し、基本情報を確認します。
1.1. Data Grid Server の要件
Data Grid Server には Java 仮想マシンが必要です。サポートされるバージョンの詳細は、Data Grid Supported Configurations を参照してください。
1.2. サーバー分布のダウンロード
Data Grid サーバーディストリビューションは、Java ライブラリー (JAR
ファイル)、設定ファイル、および data
ディレクトリーのアーカイブです。
手順
- Red Hat カスタマーポータルにアクセスします。
- ソフトウェアダウンロードセクション から Red Hat Data Grid 8.2 Server をダウンロードします。
以下のように、サーバーダウンロードアーカイブを引数として、
md5sum
またはsha256sum
を実行します。sha256sum jboss-datagrid-${version}-server.zip
$ sha256sum jboss-datagrid-${version}-server.zip
Copy to Clipboard Copied! -
Data Grid Software Details ページで
MD5
またはSHA-256
チェックサムの値と比較します。
参照資料
- Data Grid Server README には、サーバーディストリビューションの内容が記載されています。
1.3. Data Grid Server のインストール
ホストシステムに Data Grid Server ディストリビューションをインストールします。
前提条件
Data Grid Server ディストリビューションアーカイブをダウンロードします。
手順
- 適切なツールを使用して Data Grid Server のアーカイブをホストファイルシステムにデプロイメントします。
unzip redhat-datagrid-8.2.3-server.zip
$ unzip redhat-datagrid-8.2.3-server.zip
作成されたディレクトリーは $RHDG_HOME
です。
1.4. Data Grid Server の起動
サポートされる任意のホスト上の Java 仮想マシン (JVM) で、Data Grid Server インスタンスを実行します。
前提条件
- サーバーディストリビューションをダウンロードしてインストールします。
手順
-
$RHDG_HOME
でターミナルを開きます。 server
スクリプトで Data Grid Server インスタンスを起動します。- Linux
bin/server.sh
$ bin/server.sh
Copy to Clipboard Copied! - Microsoft Windows
bin\server.bat
bin\server.bat
Copy to Clipboard Copied!
以下のメッセージがログに記録される場合は、Data Grid Server は正常に実行されています。
ISPN080004: Protocol SINGLE_PORT listening on 127.0.0.1:11222 ISPN080034: Server '...' listening on http://127.0.0.1:11222 ISPN080001: Data Grid Server <version> started in <mm>ms
ISPN080004: Protocol SINGLE_PORT listening on 127.0.0.1:11222
ISPN080034: Server '...' listening on http://127.0.0.1:11222
ISPN080001: Data Grid Server <version> started in <mm>ms
検証
-
任意のブラウザーで
127.0.0.1:11222/console/
を開きます。 - プロンプトで認証情報を入力し、Data Grid Console に進みます。
1.5. ユーザーの作成と変更
Data Grid ユーザーの認証情報を追加し、データへのアクセスを制御するパーミッションを割り当てます。
Data Grid サーバーのインストールは、プロパティーレルムを使用して、Hot Rod エンドポイントおよび REST エンドポイントのユーザーを認証します。これは、Data Grid にアクセスする前に 1 人以上のユーザーを作成する必要があることを意味します。
デフォルトでは、ユーザーはキャッシュにアクセスして Data Grid リソースと対話するためのパーミッションを持つロールも必要です。ユーザーにロールを個別に割り当てたり、ロールパーミッションを持つグループにユーザーを追加したりすることができます。
Data Grid コマンドラインインターフェイス (CLI) の user
コマンドを使用して、ユーザーを作成し、ロールを割り当てます。
CLI セッションから help user
を実行し、コマンドの詳細を取得します。
1.5.1. 認証情報の追加
Data Grid Console の admin
ユーザーと、Data Grid 環境を完全に制御する必要があります。このため、初めて認証情報を追加する時に admin
パーミッションを持つユーザーを作成する必要があります。
手順
-
$RHDG_HOME
でターミナルを開きます。 CLI で
user create
コマンドを使用してadmin
ユーザーを作成します。bin/cli.sh user create myuser -p changeme -g admin
$ bin/cli.sh user create myuser -p changeme -g admin
Copy to Clipboard Copied! または、ユーザー名 admin は自動的に
admin
パーミッションを取得します。bin/cli.sh user create admin -p changeme
$ bin/cli.sh user create admin -p changeme
Copy to Clipboard Copied! 任意のテキストエディターで、
user.properties
およびgroups.properties
を開き、ユーザーおよびグループを確認します。cat server/conf/users.properties #$REALM_NAME=default$ #$ALGORITHM=encrypted$ myuser=scram-sha-1\:BYGcIAwvf6b... cat server/conf/groups.properties myuser=admin
$ cat server/conf/users.properties #$REALM_NAME=default$ #$ALGORITHM=encrypted$ myuser=scram-sha-1\:BYGcIAwvf6b... $ cat server/conf/groups.properties myuser=admin
Copy to Clipboard Copied!
1.5.2. ユーザーへのロールの割り当て
ユーザーにロールを割り当て、ユーザーがデータにアクセスし、Data Grid リソースを変更するための適切なパーミッションを持つようにします。
手順
admin
ユーザーで CLI セッションを開始します。bin/cli.sh
$ bin/cli.sh
Copy to Clipboard Copied! deployer
ロールを katie に割り当てます。[//containers/default]> user roles grant --roles=deployer katie
[//containers/default]> user roles grant --roles=deployer katie
Copy to Clipboard Copied! katie のロールをリスト表示します。
[//containers/default]> user roles ls katie ["deployer"]
[//containers/default]> user roles ls katie ["deployer"]
Copy to Clipboard Copied!
1.5.3. グループへのユーザーの追加
グループを使用すると、複数のユーザーのパーミッションを変更できます。グループにロールを割り当ててから、そのグループにユーザーを追加します。ユーザーは、グループロールからパーミッションを継承します。
手順
-
admin
ユーザーで CLI セッションを開始します。 user create
コマンドを使用してグループを作成します。-
--groups
引数を使用して、グループ名として developers を指定します。 グループのユーザー名とパスワードを設定します。
プロパティーレルムでは、グループは特別なタイプのユーザーで、ユーザー名とパスワードも必要です。
[//containers/default]> user create --groups=developers developers -p changeme
[//containers/default]> user create --groups=developers developers -p changeme
Copy to Clipboard Copied!
-
グループをリスト表示します。
[//containers/default]> user ls --groups ["developers"]
[//containers/default]> user ls --groups ["developers"]
Copy to Clipboard Copied! application
ロールを developers グループに割り当てます。[//containers/default]> user roles grant --roles=application developers
[//containers/default]> user roles grant --roles=application developers
Copy to Clipboard Copied! developers グループのロールをリスト表示します。
[//containers/default]> user roles ls developers ["application"]
[//containers/default]> user roles ls developers ["application"]
Copy to Clipboard Copied! 必要に応じて、既存のユーザーを一度に 1 人ずつグループに追加します。
[//containers/default]> user groups john --groups=developers
[//containers/default]> user groups john --groups=developers
Copy to Clipboard Copied!
1.5.4. ユーザーのロールとパーミッション
Data Grid には、データにアクセスして Data Grid リソースと対話するためのパーミッションをユーザーに付与するデフォルトのロールのセットが含まれています。
ClusterRoleMapper
は、Data Grid がセキュリティープリンシパルを承認ロールに関連付けるために使用するデフォルトのメカニズムです。
ClusterRoleMapper
は、プリンシパル名をロール名に一致させます。admin
という名前のユーザーは admin
パーミッションを自動的に取得し、deployer
という名前のユーザーは deployer
パーミッションを取得する、というようになります。
ロール | パーミッション | 説明 |
---|---|---|
| ALL | Cache Manager ライフサイクルの制御など、すべてのパーミッションを持つスーパーユーザー。 |
| ALL_READ、ALL_WRITE、LISTEN、EXEC、MONITOR、CREATE |
|
| ALL_READ、ALL_WRITE、LISTEN、EXEC、MONITOR |
|
| ALL_READ、MONITOR |
|
| MONITOR |
JMX および |
1.6. クラスタービューの確認
同じネットワーク上の Data Grid ノードは自動的に相互を検出し、クラスターを形成します。
ローカルで実行されている Data Grid Server インスタンスを使用して、デフォルトの TCP
スタックで MPING
プロトコルを使用してクラスター検出を監視するには、この手順を実行します。カスタムネットワーク要件のクラスタートランスポートを調整する場合は、Data Grid クラスターの設定に関するドキュメントを参照してください。
この手順は、クラスター検出の原則を示すことを目的としており、実稼働環境を対象としていません。コマンドラインでポートオフセットを指定することは、実稼働用のクラスタートランスポートを設定するための信頼できる方法ではありません。
前提条件
Data Grid Server の 1 つのインスタンスを実行している。
手順
-
$RHDG_HOME
でターミナルを開きます。 root ディレクトリーを
server2
にコピーします。cp -r server server2
$ cp -r server server2
Copy to Clipboard Copied! ポートオフセットと
server2
ディレクトリーを指定します。bin/server.sh -o 100 -s server2
$ bin/server.sh -o 100 -s server2
Copy to Clipboard Copied!
検証
127.0.0.1:11222/console/cluster-membership
のコンソールでクラスターのメンバーシップを表示できます。
Data Grid は、ノードがクラスターに参加する際に、以下のメッセージも記録します。
INFO [org.infinispan.CLUSTER] (jgroups-11,<server_hostname>) ISPN000094: Received new cluster view for channel cluster: [<server_hostname>|3] (2) [<server_hostname>, <server2_hostname>] INFO [org.infinispan.CLUSTER] (jgroups-11,<server_hostname>) ISPN100000: Node <server2_hostname> joined the cluster
INFO [org.infinispan.CLUSTER] (jgroups-11,<server_hostname>)
ISPN000094: Received new cluster view for channel cluster:
[<server_hostname>|3] (2) [<server_hostname>, <server2_hostname>]
INFO [org.infinispan.CLUSTER] (jgroups-11,<server_hostname>)
ISPN100000: Node <server2_hostname> joined the cluster
1.7. Data Grid Server のシャットダウン
個別に実行中のサーバーを停止するか、クラスターを正常に停止します。
手順
- Data Grid への CLI 接続を作成します。
次のいずれかの方法で Data Grid Server をシャットダウンします。
shutdown cluster
コマンドを使用して、クラスターのすべてのノードを停止します。以下に例を示します。[//containers/default]> shutdown cluster
[//containers/default]> shutdown cluster
Copy to Clipboard Copied! このコマンドは、クラスターの各ノードの
data
フォルダーにクラスターの状態を保存します。キャッシュストアを使用する場合、shutdown cluster
コマンドはキャッシュのすべてのデータも永続化します。shutdown server
コマンドおよびサーバーのホスト名を使用して、個々のサーバーインスタンスを停止します。以下に例を示します。[//containers/default]> shutdown server <my_server01>
[//containers/default]> shutdown server <my_server01>
Copy to Clipboard Copied!
shutdown server
コマンドは、リバランス操作が完了するまで待機しません。これにより、同時に複数のホスト名を指定すると、データが失われる可能性があります。
このコマンドの使用方法の詳細については、help shutdown
を実行してください。
検証
Data Grid は、サーバーをシャットダウンしたときに以下のメッセージをログに記録します。
ISPN080002: Data Grid Server stopping ISPN000080: Disconnecting JGroups channel cluster ISPN000390: Persisted state, version=<$version> timestamp=YYYY-MM-DDTHH:MM:SS ISPN080003: Data Grid Server stopped
ISPN080002: Data Grid Server stopping
ISPN000080: Disconnecting JGroups channel cluster
ISPN000390: Persisted state, version=<$version> timestamp=YYYY-MM-DDTHH:MM:SS
ISPN080003: Data Grid Server stopped
1.7.1. Data Grid クラスターの再起動
シャットダウン後に Data Grid クラスターをオンラインに戻す場合、クラスターが利用できるのを待ってから、ノードの追加または削除、またはクラスター状態の変更を行う必要があります。
shutdown server
コマンドでクラスター化ノードをシャットダウンする場合は、各サーバーを逆の順序で再起動する必要があります。
たとえば、server1
をシャットダウンしてから、server2
をシャットダウンする場合は、最初に server2
を起動してから server1
を起動する必要があります。
shutdown cluster
コマンドでクラスターをシャットダウンすると、すべてのノードが再度参加した後にのみ、クラスターは完全に機能するようになります。
ノードは任意の順序で再起動できますが、シャットダウン前に参加していたすべてのノードが実行されるまで、クラスターは DEGRADED 状態のままになります。
1.8. Data Grid サーバーファイルシステム
Data Grid Server は、$RHDG_HOME
の下のホストファイルシステムの以下のフォルダーを使用します。
├── bin ├── boot ├── docs ├── lib ├── server └── static
├── bin
├── boot
├── docs
├── lib
├── server
└── static
$RHDG_HOME
ディレクトリーの各フォルダーと、ファイルシステムのカスタマイズに使用できるシステムプロパティーに関する詳細は、Data Grid Server README を参照してください。
1.8.1. サーバー root ディレクトリー
bin
および docs
フォルダーのリソースの他に、対話する必要がある $RHDG_HOME
下の唯一のフォルダーは、デフォルトで server
と名付けられたサーバー root ディレクトリーです。
同じ $RHDG_HOME
ディレクトリーまたは別のディレクトリーに複数のノードを作成できますが、各 Data Grid Server インスタンスには、独自のサーバー root ディレクトリーが必要です。たとえば、5 つのノードのクラスターは、ファイルシステム上に以下のサーバー root ディレクトリーを持つことができます。
├── server ├── server1 ├── server2 ├── server3 └── server4
├── server
├── server1
├── server2
├── server3
└── server4
各サーバーの root ディレクトリーには、以下のフォルダーが含まれている必要があります。
├── server │ ├── conf │ ├── data │ ├── lib │ └── log
├── server
│ ├── conf
│ ├── data
│ ├── lib
│ └── log
server/conf
Data Grid Server インスタンスの infinispan.xml
設定ファイルを保持します。
Data Grid は、設定を 2 つの層に分割します。
- 動的
-
データスケーラビリティーの変更可能なキャッシュ設定を作成します。
Data Grid Server は、実行時に作成したキャッシュを、ノード全体に分散されているクラスター状態とともに永続的に保存します。参加している各ノードは、変更が発生するたびに Data Grid Server がすべてのノード間で同期する完全なクラスター状態を受け取ります。 - Static
-
クラスタートランスポート、セキュリティー、共有データソースなど、基盤となるサーバーのメカニズムに対して
infinispan.xml
に設定を追加します。
server/data
Data Grid Server がクラスターの状態を維持するために使用する内部ストレージを提供します。
server/data
のコンテンツを直接削除または変更しないでください。
サーバーの実行中に caches.xml
などのファイルを変更すると、破損が発生する可能性があります。コンテンツを削除すると、誤った状態になる可能性があります。つまり、シャットダウン後にクラスターを再起動できなくなります。
server/lib
カスタムフィルター、カスタムイベントリスナー、JDBC ドライバー、カスタム ServerTask
実装などの拡張 JAR
ファイルが含まれます。
server/log
Data Grid Server のログファイルを保持します。
参照資料
第2章 ネットワークインターフェイスおよびエンドポイント
ネットワークインターフェイスを介して Data Grid Server を公開するには、IP アドレスにバインドします。その後、Data Grid Server がリモートクライアントアプリケーションからの要求を処理できるように、インターフェイスを使用するようにエンドポイントを設定することができます。
デフォルトでは、Data Grid Server は、インバウンド要求のプロトコルを自動的に検出する単一ポートを公開します。
2.1. ネットワークインターフェイス
Data Grid Server は、単一の TCP/IP ポートへエンドポイントを多重化し、インバウンドクライアント要求のプロトコルを自動的に検出します。Data Grid Server が、クライアント要求をリッスンするようにネットワークインターフェイスにバインドする方法を設定できます。
インターネットプロトコル (IP) アドレス
<!-- Selects a specific IPv4 address, which can be public, private, or loopback. This is the default network interface for Data Grid Server. --> <interfaces> <interface name="public"> <inet-address value="${infinispan.bind.address:127.0.0.1}"/> </interface> </interfaces>
<!-- Selects a specific IPv4 address, which can be public, private, or loopback.
This is the default network interface for Data Grid Server. -->
<interfaces>
<interface name="public">
<inet-address value="${infinispan.bind.address:127.0.0.1}"/>
</interface>
</interfaces>
ループバックアドレス
<!-- Selects an IP address in an IPv4 or IPv6 loopback address block. --> <interfaces> <interface name="public"> <loopback/> </interface> </interfaces>
<!-- Selects an IP address in an IPv4 or IPv6 loopback address block. -->
<interfaces>
<interface name="public">
<loopback/>
</interface>
</interfaces>
非ループバックアドレス
<!-- Selects an IP address in an IPv4 or IPv6 non-loopback address block. --> <interfaces> <interface name="public"> <non-loopback/> </interface> </interfaces>
<!-- Selects an IP address in an IPv4 or IPv6 non-loopback address block. -->
<interfaces>
<interface name="public">
<non-loopback/>
</interface>
</interfaces>
任意のアドレス
<!-- Uses the `INADDR_ANY` wildcard address which means Data Grid Server listens for inbound client requests on all interfaces. --> <interfaces> <interface name="public"> <any-address/> </interface> </interfaces>
<!-- Uses the `INADDR_ANY` wildcard address which means Data Grid Server
listens for inbound client requests on all interfaces. -->
<interfaces>
<interface name="public">
<any-address/>
</interface>
</interfaces>
ローカルリンク
<!-- Selects a link-local IP address in an IPv4 or IPv6 address block. --> <interfaces> <interface name="public"> <link-local/> </interface> </interfaces>
<!-- Selects a link-local IP address in an IPv4 or IPv6 address block. -->
<interfaces>
<interface name="public">
<link-local/>
</interface>
</interfaces>
サイトローカル
<!-- Selects a site-local (private) IP address in an IPv4 or IPv6 address block. --> <interfaces> <interface name="public"> <site-local/> </interface> </interfaces>
<!-- Selects a site-local (private) IP address in an IPv4 or IPv6 address block. -->
<interfaces>
<interface name="public">
<site-local/>
</interface>
</interfaces>
一致およびフォールバックストラテジー
Data Grid Server は、ホストシステム上のネットワークインターフェイスをすべて列挙し、値と一致するインターフェイス、ホスト、または IP アドレスにバインドできます。これには、柔軟性を高めるための正規表現を含むことができます。
ホストの一致
<!-- Selects an IP address that is assigned to a matching host name. --> <interfaces> <interface name="public"> <match-host value="my_host_name"/> </interface> </interfaces>
<!-- Selects an IP address that is assigned to a matching host name. -->
<interfaces>
<interface name="public">
<match-host value="my_host_name"/>
</interface>
</interfaces>
インターフェイスの一致
<!--Selects an IP address assigned to a matching network interface. --> <interfaces> <interface name="public"> <match-interface value="eth0"/> </interface> </interfaces>
<!--Selects an IP address assigned to a matching network interface. -->
<interfaces>
<interface name="public">
<match-interface value="eth0"/>
</interface>
</interfaces>
アドレスの一致
<!-- Selects an IP address that matches a regular expression. --> <interfaces> <interface name="public"> <match-address value="132\..*"/> </interface> </interfaces>
<!-- Selects an IP address that matches a regular expression. -->
<interfaces>
<interface name="public">
<match-address value="132\..*"/>
</interface>
</interfaces>
フォールバック
<!-- Includes multiple strategies that Data Grid Server tries in the declared order until it finds a match. --> <interfaces> <interface name="public"> <match-host value="my_host_name"/> <match-address value="132\..*"/> <any-address/> </interface> </interfaces>
<!-- Includes multiple strategies that Data Grid Server tries in the
declared order until it finds a match. -->
<interfaces>
<interface name="public">
<match-host value="my_host_name"/>
<match-address value="132\..*"/>
<any-address/>
</interface>
</interfaces>
2.2. ソケットバインディング
ソケットバインディングは、エンドポイントコネクターをサーバーインターフェイスおよびポートにマッピングします。
デフォルトでは、Data Grid サーバーは以下のソケットバインディングを提供します。
<socket-bindings default-interface="public" port-offset="${infinispan.socket.binding.port-offset:0}"> <socket-binding name="default" port="${infinispan.bind.port:11222}"/> <socket-binding name="memcached" port="11221"/> </socket-bindings>
<socket-bindings default-interface="public" port-offset="${infinispan.socket.binding.port-offset:0}">
<socket-binding name="default" port="${infinispan.bind.port:11222}"/>
<socket-binding name="memcached" port="11221"/>
</socket-bindings>
-
socket-bindings
は、デフォルトのインターフェイスとポートオフセットを宣言します。 -
default
は、hotrod と rest コネクターをデフォルトのポート11222
にバインドします。 memcached
は、memcached コネクターをポート11221
にバインドします。注記memcached エンドポイントはデフォルトで無効にされます。
socket-binding
宣言のデフォルトインターフェイスをオーバーライドするには、interface
属性を指定します。
たとえば、"private" という名前の interface
宣言を追加します。
<interfaces> ... <interface name="private"> <inet-address value="10.1.2.3"/> </interface> </interfaces>
<interfaces>
...
<interface name="private">
<inet-address value="10.1.2.3"/>
</interface>
</interfaces>
続いて、以下のように、socket-binding
宣言で interface="private"
を指定して、プライベート IP アドレスにバインドすることができます。
<socket-bindings default-interface="public" port-offset="${infinispan.socket.binding.port-offset:0}"> ... <socket-binding name="private_binding" interface="private" port="1234"/> </socket-bindings>
<socket-bindings default-interface="public" port-offset="${infinispan.socket.binding.port-offset:0}">
...
<socket-binding name="private_binding" interface="private" port="1234"/>
</socket-bindings>
2.3. Data Grid Server のデフォルトのバインドアドレスの変更
サーバー -b
スイッチまたは infinispan.bind.address
システムプロパティーを使用して、別のアドレスにバインドできます。
たとえば、以下のように public
インターフェイスを 127.0.0.2
にバインドします。
- Linux
bin/server.sh -b 127.0.0.2
$ bin/server.sh -b 127.0.0.2
- Windows
bin\server.bat -b 127.0.0.2
bin\server.bat -b 127.0.0.2
2.4. ポートオフセットの指定
同じホストで複数のインスタンスを実行する場合は、Data Grid サーバーでポートオフセットを設定します。デフォルトのポートオフセットは 0
です。
Data Grid CLI または infinispan.socket.binding.port-offset
システムプロパティーで -o
スイッチを使用して、ポートオフセットを設定します。
たとえば、以下のようにオフセットが 100
のサーバーインスタンスを起動します。デフォルトの設定では、これにより、Data Grid Server がポート 11322
でリッスンします。
- Linux
bin/server.sh -o 100
$ bin/server.sh -o 100
- Windows
bin\server.bat -o 100
bin\server.bat -o 100
2.5. Data Grid のエンドポイント
Data Grid エンドポイントは、異なるコネクタープロトコルで CacheManager
インターフェイスを公開し、データをリモートでアクセスし、Data Grid クラスターを管理および維持するための操作を実行することができます。
異なるソケットバインディングで複数のエンドポイントコネクターを定義できます。
2.5.1. Hot Rod
Hot Rod は、テキストベースのプロトコルと比較して、データへのアクセス時間を短縮し、パフォーマンスを向上するために設計されたバイナリー TCP クライアントサーバープロトコルです。
Data Grid は、Java、C++、C#、Node.js、およびその他のプログラミング言語で Hot Rod クライアントライブラリーを提供します。
トポロジーの状態遷移
Data Grid はトポロジーキャッシュを使用して、クライアントにクラスタービューを提供します。トポロジーキャッシュには、内部 JGroups トランスポートアドレスを公開された Hot Rod エンドポイントにマッピングするエントリーが含まれます。
クライアントが要求を送信すると、Data Grid サーバーは、要求ヘッダーのトポロジー ID をキャッシュからのトポロジー ID と比較します。クライアントに古いトポロジー ID がある場合は、Data Grid サーバーは新しいトポロジービューを送信します。
クラスタートポロジービューを使用すると、Hot Rod クライアントは、ノードがいつ参加および離脱するかを即座に検出できるため、動的な負荷分散とフェイルオーバーが可能になります。
分散キャッシュモードでは、一貫性のあるハッシュアルゴリズムにより、Hot Rod クライアント要求をプライマリー所有者に直接ルーティングすることもできます。
2.5.2. REST
参照資料
Data Grid は、HTTP クライアントがデータにアクセスし、クラスターを監視および保守し、管理操作を実行できるようにする RESTful インターフェイスを公開します。
標準の HTTP ロードバランサーを使用して、クライアントに負荷分散およびフェイルオーバー機能を提供できます。ただし、HTTP ロードバランサーは静的クラスタービューを維持し、クラスタートポロジーの変更が発生したときに手動で更新する必要があります。
2.5.3. プロトコルの比較
Hot Rod | HTTP / REST | |
---|---|---|
トポロジー対応 | Y | N |
ハッシュ対応 | Y | N |
暗号化 | Y | Y |
認証 | Y | Y |
条件付き操作 | Y | Y |
バルク操作 | Y | N |
トランザクション | Y | N |
リスナー | Y | N |
クエリー | Y | Y |
実行 | Y | N |
クロスサイトフェイルオーバー | Y | N |
2.6. エンドポイントコネクター
ソケットバインディング、認証メカニズム、および暗号化設定を指定するコネクター宣言で、Data Grid サーバーエンドポイントを設定します。
デフォルトのエンドポイントコネクター設定は以下のとおりです。
<endpoints socket-binding="default" security-realm="default"/>
<endpoints socket-binding="default" security-realm="default"/>
-
endpoints
には、エンドポイントコネクター宣言が含まれ、デフォルトのソケットバインディング、セキュリティーレルム、クライアントが有効な TLS 証明書を表示する必要があるかどうかなどのエンドポイントのグローバル設定を定義します。 -
<hotrod-connector/>
は Hot Rod コネクターを宣言します。 -
<rest-connector/>
は REST コネクターを宣言します。 -
<memcached-connector socket-binding="memcached"/>
は memcached ソケットバインディングを使用する Memcached コネクターを宣言します。
空の <endpoints/>
要素を宣言すると、Hot Rod および REST コネクターを暗黙的に有効にします。
複数の endpoints
が異なるソケットにバインドされる可能性があります。これらは異なるセキュリティーレルムを使用し、異なる認証および暗号化設定を提供することができます。以下の設定では、異なるソケットバインディングで 2 つのエンドポイントを有効にします。それぞれに、専用のセキュリティーレルムがあります。さらに、public
エンドポイントは、コンソールや CLI などの管理機能を無効にします。
<endpoints socket-binding="public" security-realm="application-realm" admin="false"> <hotrod-connector/> <rest-connector/> </endpoints> <endpoints socket-binding="private" security-realm="management-realm"> <hotrod-connector/> <rest-connector/> </endpoints>
<endpoints socket-binding="public" security-realm="application-realm" admin="false">
<hotrod-connector/>
<rest-connector/>
</endpoints>
<endpoints socket-binding="private" security-realm="management-realm">
<hotrod-connector/>
<rest-connector/>
</endpoints>
参照資料
urn:infinispan:server スキーマは、利用可能なすべてのエンドポイント設定を提供します。
2.6.1. Hot Rod コネクター
Hot Rod コネクター宣言は Hot Rod サーバーを有効にします。
<hotrod-connector name="hotrod"> <topology-state-transfer /> <authentication> <!-- Hot Rod endpoint authentication configuration. --> </authentication> <encryption> <!-- Hot Rod endpoint SSL/TLS encryption configuration. --> </encryption> </hotrod-connector>
<hotrod-connector name="hotrod">
<topology-state-transfer />
<authentication>
<!-- Hot Rod endpoint authentication configuration. -->
</authentication>
<encryption>
<!-- Hot Rod endpoint SSL/TLS encryption configuration. -->
</encryption>
</hotrod-connector>
-
name="hotrod"
は、Hot Rod コネクターに論理的に名前を付けます。デフォルトでは、名前は hotrod-default などのソケットバインディング名から派生します。 -
topology-state-transfer
は、Hot Rod クライアントにクラスタートポロジーを提供する状態遷移操作を調整します。 -
authentication
は SASL 認証メカニズムを設定します。 -
encryption
は、クライアント接続の TLS 設定を設定します。
参照資料
urn:infinispan:server スキーマは、利用可能なすべての Hot Rod コネクター設定を提供します。
2.6.2. REST コネクター
REST コネクター宣言は REST サーバーを有効にします。
<rest-connector name="rest"> <authentication> <!-- REST endpoint authentication configuration. --> </authentication> <cors-rules> <!-- Cross-Origin Resource Sharing (CORS) rules. --> </cors-rules> <encryption> <!-- REST endpoint SSL/TLS encryption configuration. --> </encryption> </rest-connector>
<rest-connector name="rest">
<authentication>
<!-- REST endpoint authentication configuration. -->
</authentication>
<cors-rules>
<!-- Cross-Origin Resource Sharing (CORS) rules. -->
</cors-rules>
<encryption>
<!-- REST endpoint SSL/TLS encryption configuration. -->
</encryption>
</rest-connector>
-
name="rest"
は、REST コネクターに論理的に名前を付けます。デフォルトでは、名前は rest-default などのソケットバインディング名から派生します。 -
authentication
は認証メカニズムを設定します。 -
cors-rules
は、クロスドメイン要求の CORS (Cross Origin Resource Sharing) ルールを指定します。 -
encryption
は、クライアント接続の TLS 設定を設定します。
参照資料
urn:infinispan:server スキーマは、利用可能なすべての REST コネクター設定を提供します。
2.7. Data Grid Server ポートおよびプロトコル
Data Grid Server は、リモートクライアントアクセス用にネットワーク上のエンドポイントを公開します。
ポート | プロトコル | 説明 |
---|---|---|
| TCP | Hot Rod および REST エンドポイント |
| TCP | デフォルトで無効にされる Memcached エンドポイント。 |
2.8. 単一ポート
Data Grid Server は、デフォルトで 11222
の単一の TCP ポート経由で複数のプロトコルを公開します。1 つのポートで複数のプロトコルを処理すると、設定が簡素化され、Data Grid クラスターをデプロイする際の管理の複雑さが軽減されます。また、1 つのポートを使用すると、ネットワーク上の攻撃対象領域が最小限に抑えられるため、セキュリティーも強化されます。
Data Grid Server は、クライアントからの HTTP/1.1、HTTP/2、および Hot Rod プロトコル要求を、さまざまな方法で単一のポートを介して処理します。
HTTP/1.1 アップグレードヘッダー
クライアントリクエストには、HTTP/1.1 upgrade
ヘッダーフィールドを追加して、Data Grid Server と HTTP/1.1 の接続を開始できます。続いて、クライアントアプリケーションは Upgrade: protocol
ヘッダーフィールドを送信できます。ここで、protocol
はサーバーエンドポイントになります。
Application-Layer Protocol Negotiation (ALPN)/Transport Layer Security (TLS)
クライアント要求には、TLS 接続を介してプロトコルをネゴシエートするための Data Grid Server エンドポイントの Server Name Indication (SNI) マッピングが含まれます。
アプリケーションは、ALPN 拡張機能をサポートする TLS ライブラリーを使用する必要があります。Data Grid は、Java 用の WildFly OpenSSL バインディングを使用します。
Hot Rod の自動検出
Hot Rod ヘッダーを含むクライアントリクエストは、自動的に Hot Rod エンドポイントにルーティングされます。
2.8.1. リモート接続用のネットワークファイアウォールの設定
サーバーと外部クライアント間のトラフィックを許可するためにファイアウォールルールを調整します。
手順
Red Hat Enterprise Linux (RHEL) ワークステーションでは、たとえば、以下のように firewalld を使用してポート 11222
へのトラフィックを許可できます。
firewall-cmd --add-port=11222/tcp --permanent firewall-cmd --list-ports | grep 11222
# firewall-cmd --add-port=11222/tcp --permanent
success
# firewall-cmd --list-ports | grep 11222
11222/tcp
ネットワーク全体に適用されるファイアウォールルールを設定するには、nftables ユーティリティーを使用できます。
第3章 セキュリティーレルム
セキュリティーレルムは、Data Grid Server エンドポイントの ID、暗号化、認証、および承認設定を定義します。
3.1. プロパティーレルム
プロパティーレルムはプロパティーファイルを使用して、ユーザーおよびグループを定義します。
users.properties
は、ユーザー名をプレーンテキスト形式でパスワードにマッピングします。DIGEST-MD5
SASL メカニズムまたは Digest
HTTP メカニズムを使用する場合は、パスワードを事前にダイジェストすることもできます。
myuser=a_password user2=another_password
myuser=a_password
user2=another_password
groups.properties
はユーザーをロールにマッピングします。
myuser=supervisor,reader,writer user2=supervisor
myuser=supervisor,reader,writer
user2=supervisor
エンドポイント認証メカニズム
Data Grid Server がプロパティーレルムを使用するよう設定すると、以下の認証メカニズムを使用するようにエンドポイントを設定できます。
-
Hot Rod (SASL):
PLAIN
、DIGEST-*
、およびSCRAM-*
-
REST(HTTP):
Basic
およびDigest
プロパティーレルム設定
<security xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="urn:infinispan:server:12.1 https://infinispan.org/schemas/infinispan-server-12.1.xsd" xmlns="urn:infinispan:server:12.1"> <security-realms> <security-realm name="default"> <!-- Defines groups as roles for server authorization. --> <properties-realm groups-attribute="Roles"> <!-- Specifies the properties file that holds usernames and passwords. --> <!-- The plain-text="true" attribute stores passwords in plain text. --> <user-properties path="users.properties" relative-to="infinispan.server.config.path" plain-text="true"/> <!-- Specifies the properties file that defines roles for users. --> <group-properties path="groups.properties" relative-to="infinispan.server.config.path"/> </properties-realm> </security-realm> </security-realms> </security>
<security xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="urn:infinispan:server:12.1 https://infinispan.org/schemas/infinispan-server-12.1.xsd"
xmlns="urn:infinispan:server:12.1">
<security-realms>
<security-realm name="default">
<!-- Defines groups as roles for server authorization. -->
<properties-realm groups-attribute="Roles">
<!-- Specifies the properties file that holds usernames and passwords. -->
<!-- The plain-text="true" attribute stores passwords in plain text. -->
<user-properties path="users.properties"
relative-to="infinispan.server.config.path"
plain-text="true"/>
<!-- Specifies the properties file that defines roles for users. -->
<group-properties path="groups.properties"
relative-to="infinispan.server.config.path"/>
</properties-realm>
</security-realm>
</security-realms>
</security>
3.1.1. ユーザーの作成と変更
Data Grid ユーザーの認証情報を追加し、データへのアクセスを制御するパーミッションを割り当てます。
Data Grid サーバーのインストールは、プロパティーレルムを使用して、Hot Rod エンドポイントおよび REST エンドポイントのユーザーを認証します。これは、Data Grid にアクセスする前に 1 人以上のユーザーを作成する必要があることを意味します。
デフォルトでは、ユーザーはキャッシュにアクセスして Data Grid リソースと対話するためのパーミッションを持つロールも必要です。ユーザーにロールを個別に割り当てたり、ロールパーミッションを持つグループにユーザーを追加したりすることができます。
Data Grid コマンドラインインターフェイス (CLI) の user
コマンドを使用して、ユーザーを作成し、ロールを割り当てます。
CLI セッションから help user
を実行し、コマンドの詳細を取得します。
3.1.1.1. 認証情報の追加
Data Grid Console の admin
ユーザーと、Data Grid 環境を完全に制御する必要があります。このため、初めて認証情報を追加する時に admin
パーミッションを持つユーザーを作成する必要があります。
手順
-
$RHDG_HOME
でターミナルを開きます。 CLI で
user create
コマンドを使用してadmin
ユーザーを作成します。bin/cli.sh user create myuser -p changeme -g admin
$ bin/cli.sh user create myuser -p changeme -g admin
Copy to Clipboard Copied! または、ユーザー名 admin は自動的に
admin
パーミッションを取得します。bin/cli.sh user create admin -p changeme
$ bin/cli.sh user create admin -p changeme
Copy to Clipboard Copied! 任意のテキストエディターで、
user.properties
およびgroups.properties
を開き、ユーザーおよびグループを確認します。cat server/conf/users.properties #$REALM_NAME=default$ #$ALGORITHM=encrypted$ myuser=scram-sha-1\:BYGcIAwvf6b... cat server/conf/groups.properties myuser=admin
$ cat server/conf/users.properties #$REALM_NAME=default$ #$ALGORITHM=encrypted$ myuser=scram-sha-1\:BYGcIAwvf6b... $ cat server/conf/groups.properties myuser=admin
Copy to Clipboard Copied!
3.1.1.2. ユーザーへのロールの割り当て
ユーザーにロールを割り当て、ユーザーがデータにアクセスし、Data Grid リソースを変更するための適切なパーミッションを持つようにします。
手順
admin
ユーザーで CLI セッションを開始します。bin/cli.sh
$ bin/cli.sh
Copy to Clipboard Copied! deployer
ロールを katie に割り当てます。[//containers/default]> user roles grant --roles=deployer katie
[//containers/default]> user roles grant --roles=deployer katie
Copy to Clipboard Copied! katie のロールをリスト表示します。
[//containers/default]> user roles ls katie ["deployer"]
[//containers/default]> user roles ls katie ["deployer"]
Copy to Clipboard Copied!
3.1.1.3. グループへのユーザーの追加
グループを使用すると、複数のユーザーのパーミッションを変更できます。グループにロールを割り当ててから、そのグループにユーザーを追加します。ユーザーは、グループロールからパーミッションを継承します。
手順
-
admin
ユーザーで CLI セッションを開始します。 user create
コマンドを使用してグループを作成します。-
--groups
引数を使用して、グループ名として developers を指定します。 グループのユーザー名とパスワードを設定します。
プロパティーレルムでは、グループは特別なタイプのユーザーで、ユーザー名とパスワードも必要です。
[//containers/default]> user create --groups=developers developers -p changeme
[//containers/default]> user create --groups=developers developers -p changeme
Copy to Clipboard Copied!
-
グループをリスト表示します。
[//containers/default]> user ls --groups ["developers"]
[//containers/default]> user ls --groups ["developers"]
Copy to Clipboard Copied! application
ロールを developers グループに割り当てます。[//containers/default]> user roles grant --roles=application developers
[//containers/default]> user roles grant --roles=application developers
Copy to Clipboard Copied! developers グループのロールをリスト表示します。
[//containers/default]> user roles ls developers ["application"]
[//containers/default]> user roles ls developers ["application"]
Copy to Clipboard Copied! 必要に応じて、既存のユーザーを一度に 1 人ずつグループに追加します。
[//containers/default]> user groups john --groups=developers
[//containers/default]> user groups john --groups=developers
Copy to Clipboard Copied!
3.2. LDAP レルム
LDAP レルムは、OpenLDAP、Red Hat Directory Server、Apache Directory Server、Microsoft Active Directory などの LDAP サーバーに接続して、ユーザーを認証し、メンバーシップ情報を取得します。
LDAP サーバーは、サーバーのタイプとデプロイメントに応じて、異なるエントリーレイアウトを持つことができます。考えられるすべての設定の例を提供することは、本書では扱っていません。
エンドポイント認証メカニズム
Data Grid Server が LDAP レルムを使用するように設定すると、以下の認証メカニズムを使用するようにエンドポイントを設定できます。
-
Hot Rod (SASL):
PLAIN
、DIGEST-*
、およびSCRAM-*
-
REST(HTTP):
Basic
およびDigest
LDAP レルム設定
<security xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="urn:infinispan:server:12.1 https://infinispan.org/schemas/infinispan-server-12.1.xsd" xmlns="urn:infinispan:server:12.1"> <security-realms> <security-realm name="default"> <!-- Names an LDAP realm and specifies connection properties. --> <ldap-realm name="ldap" url="ldap://my-ldap-server:10389" principal="uid=admin,ou=People,dc=infinispan,dc=org" credential="strongPassword" connection-timeout="3000" read-timeout="30000" connection-pooling="true" referral-mode="ignore" page-size="30" direct-verification="true"> <!-- Defines how principals are mapped to LDAP entries. --> <identity-mapping rdn-identifier="uid" search-dn="ou=People,dc=infinispan,dc=org" search-recursive="false"> <!-- Retrieves all the groups of which the user is a member. --> <attribute-mapping> <attribute from="cn" to="Roles" filter="(&(objectClass=groupOfNames)(member={1}))" filter-dn="ou=Roles,dc=infinispan,dc=org"/> </attribute-mapping> </identity-mapping> </ldap-realm> </security-realm> </security-realms> </security>
<security xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="urn:infinispan:server:12.1 https://infinispan.org/schemas/infinispan-server-12.1.xsd"
xmlns="urn:infinispan:server:12.1">
<security-realms>
<security-realm name="default">
<!-- Names an LDAP realm and specifies connection properties. -->
<ldap-realm name="ldap"
url="ldap://my-ldap-server:10389"
principal="uid=admin,ou=People,dc=infinispan,dc=org"
credential="strongPassword"
connection-timeout="3000"
read-timeout="30000"
connection-pooling="true"
referral-mode="ignore"
page-size="30"
direct-verification="true">
<!-- Defines how principals are mapped to LDAP entries. -->
<identity-mapping rdn-identifier="uid"
search-dn="ou=People,dc=infinispan,dc=org"
search-recursive="false">
<!-- Retrieves all the groups of which the user is a member. -->
<attribute-mapping>
<attribute from="cn"
to="Roles"
filter="(&(objectClass=groupOfNames)(member={1}))"
filter-dn="ou=Roles,dc=infinispan,dc=org"/>
</attribute-mapping>
</identity-mapping>
</ldap-realm>
</security-realm>
</security-realms>
</security>
LDAP 接続のプリンシパルには、LDAP クエリーを実行し、特定の属性にアクセスするために必要な権限が必要です。
direct-verification
属性を使用してユーザーの認証情報を検証する代わりに、user-password-mapper
要素を使用して LDAP パスワードを指定できます。
rdn-identifier
属性は、指定された識別子 (通常はユーザー名) をもとにユーザーエントリーを検索する LDAP 属性を指定します (例: uid
または sAMAccountName
属性)。search-recursive="true"
を設定に追加して、ディレクトリーを再帰的に検索します。デフォルトでは、ユーザーエントリーの検索は (rdn_identifier={0})
フィルターを使用します。filter-name
属性を使用して別のフィルターを指定します。
attribute-mapping
要素は、ユーザーがメンバーであるすべてのグループを取得します。通常、メンバーシップ情報を保存する方法は 2 つあります。
-
通常、
member
属性にクラスgroupOfNames
を持つグループエントリーの下。この場合は、前述の設定例にあるように、属性フィルターを使用できます。このフィルターは、提供されたフィルターに一致するエントリーを検索します。フィルターは、ユーザーの DN と等しいmember
属性を持つグループを検索します。次に、フィルターは、from
で指定されたグループエントリーの CN を抽出し、それをユーザーのRoles
に追加します。 memberOf
属性のユーザーエントリー。この場合、以下のような属性参照を使用する必要があります。<attribute-reference reference="memberOf" from="cn" to="Roles" />
この参照は、ユーザーエントリーからすべての
memberOf
属性を取得し、from
で指定された CN を抽出し、それらをユーザーのRoles
に追加します。
3.2.1. LDAP レルムプリンシパルの書き換え
GSSAPI
、GS2-KRB5
、Negotiate
などの一部の SASL 認証メカニズムでは、LDAP サーバーの検索に使用する前に クリーンアップ する必要のあるユーザー名を提供します。
<security xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="urn:infinispan:server:12.1 https://infinispan.org/schemas/infinispan-server-12.1.xsd" xmlns="urn:infinispan:server:12.1"> <security-realms> <security-realm name="default"> <ldap-realm name="ldap" url="ldap://${org.infinispan.test.host.address}:10389" principal="uid=admin,ou=People,dc=infinispan,dc=org" credential="strongPassword"> <name-rewriter> <!-- Defines a rewriter that extracts the username from the principal using a regular expression. --> <regex-principal-transformer name="domain-remover" pattern="(.*)@INFINISPAN\.ORG" replacement="$1"/> </name-rewriter> <identity-mapping rdn-identifier="uid" search-dn="ou=People,dc=infinispan,dc=org"> <attribute-mapping> <attribute from="cn" to="Roles" filter="(&(objectClass=groupOfNames)(member={1}))" filter-dn="ou=Roles,dc=infinispan,dc=org" /> </attribute-mapping> <user-password-mapper from="userPassword" /> </identity-mapping> </ldap-realm> </security-realm> </security-realms> </security>
<security xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="urn:infinispan:server:12.1 https://infinispan.org/schemas/infinispan-server-12.1.xsd"
xmlns="urn:infinispan:server:12.1">
<security-realms>
<security-realm name="default">
<ldap-realm name="ldap"
url="ldap://${org.infinispan.test.host.address}:10389"
principal="uid=admin,ou=People,dc=infinispan,dc=org"
credential="strongPassword">
<name-rewriter>
<!-- Defines a rewriter that extracts the username from the principal using a regular expression. -->
<regex-principal-transformer name="domain-remover"
pattern="(.*)@INFINISPAN\.ORG"
replacement="$1"/>
</name-rewriter>
<identity-mapping rdn-identifier="uid"
search-dn="ou=People,dc=infinispan,dc=org">
<attribute-mapping>
<attribute from="cn" to="Roles"
filter="(&(objectClass=groupOfNames)(member={1}))"
filter-dn="ou=Roles,dc=infinispan,dc=org" />
</attribute-mapping>
<user-password-mapper from="userPassword" />
</identity-mapping>
</ldap-realm>
</security-realm>
</security-realms>
</security>
3.3. トークンレルム
トークンレルムは外部サービスを使用してトークンを検証し、Red Hat SSO などの RFC-7662 (OAuth2 トークンイントロスペクション) と互換性のあるプロバイダーを必要とします。
エンドポイント認証メカニズム
Data Grid Server がトークンレルムを使用するように設定する際には、以下の認証メカニズムを使用するようにエンドポイントを設定する必要があります。
-
Hot Rod (SASL):
OAUTHBEARER
-
REST (HTTP):
Bearer
トークンレルムの設定
<security xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="urn:infinispan:server:12.1 https://infinispan.org/schemas/infinispan-server-12.1.xsd" xmlns="urn:infinispan:server:12.1"> <security-realms> <security-realm name="default"> <!-- Specifies the URL of the authentication server. --> <token-realm name="token" auth-server-url="https://oauth-server/auth/"> <!-- Specifies the URL of the token introspection endpoint. --> <oauth2-introspection introspection-url="https://oauth-server/auth/realms/infinispan/protocol/openid-connect/token/introspect" client-id="infinispan-server" client-secret="1fdca4ec-c416-47e0-867a-3d471af7050f"/> </token-realm> </security-realm> </security-realms> </security>
<security xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="urn:infinispan:server:12.1 https://infinispan.org/schemas/infinispan-server-12.1.xsd"
xmlns="urn:infinispan:server:12.1">
<security-realms>
<security-realm name="default">
<!-- Specifies the URL of the authentication server. -->
<token-realm name="token"
auth-server-url="https://oauth-server/auth/">
<!-- Specifies the URL of the token introspection endpoint. -->
<oauth2-introspection
introspection-url="https://oauth-server/auth/realms/infinispan/protocol/openid-connect/token/introspect"
client-id="infinispan-server"
client-secret="1fdca4ec-c416-47e0-867a-3d471af7050f"/>
</token-realm>
</security-realm>
</security-realms>
</security>
3.4. トラストストアレルム
トラストストアレルムは、接続のネゴシエート時に Data Grid Server およびクライアント ID を検証する証明書または証明書チェーンを使用します。
- キーストア
- Data Grid Server アイデンティティーをクライアントに提供するサーバー証明書が含まれます。サーバー証明書でキーストアを設定する場合、Data Grid Server は業界標準の SSL/TLS プロトコルを使用してトラフィックを暗号化します。
- トラストストア
- クライアントが Data Grid Server に提示するクライアント証明書または証明書チェーンが含まれます。クライアントのトラストストアはオプションで、Data Grid Server がクライアント証明書認証を実行できるようになっています。
クライアント証明書認証
Data Grid Server でクライアント証明書を検証または認証する場合は、require-ssl-client-auth="true"
属性をエンドポイント設定に追加する必要があります。
エンドポイント認証メカニズム
キーストアのみを使用して Data Grid Server を設定する場合は、任意の認証メカニズムと組み合わせて暗号化を使用できます。
Data Grid Server がクライアントトラストストアを使用するように設定する場合は、以下の認証メカニズムを使用するようにエンドポイントを設定する必要があります。
-
Hot Rod (SASL):
EXTERNAL
-
REST (HTTP):
CLIENT_CERT
トラストストアレルムの設定
<security xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="urn:infinispan:server:12.1 https://infinispan.org/schemas/infinispan-server-12.1.xsd" xmlns="urn:infinispan:server:12.1"> <security-realms> <security-realm name="default"> <server-identities> <ssl> <!-- Provides an SSL/TLS identity with a keystore that contains server certificates. --> <keystore path="server.p12" relative-to="infinispan.server.config.path" keystore-password="secret" alias="server"/> <!-- Configures a trust store that contains client certificates or part of a certificate chain. --> <truststore path="trust.p12" relative-to="infinispan.server.config.path" password="secret"/> </ssl> </server-identities> <!-- Authenticates client certificates against the trust store. If you configure this, the trust store must contain the public certificates for all clients. --> <truststore-realm/> </security-realm> </security-realms> </security> <!-- Configures Data Grid Server to require client certificates with the "require-ssl-client-auth" attribute. --> <endpoints xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="urn:infinispan:server:12.1 https://infinispan.org/schemas/infinispan-server-12.1.xsd" xmlns="urn:infinispan:server:12.1" socket-binding="default" security-realm="default" require-ssl-client-auth="true"> <hotrod-connector> <!-- Configures the Hot Rod endpoint for client certificate authentication. --> <authentication> <sasl mechanisms="EXTERNAL" server-name="infinispan" qop="auth"/> </authentication> </hotrod-connector> <rest-connector> <!-- Configures the REST endpoint for client certificate authentication. --> <authentication mechanisms="CLIENT_CERT"/> </rest-connector> </endpoints>
<security xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="urn:infinispan:server:12.1 https://infinispan.org/schemas/infinispan-server-12.1.xsd"
xmlns="urn:infinispan:server:12.1">
<security-realms>
<security-realm name="default">
<server-identities>
<ssl>
<!-- Provides an SSL/TLS identity with a keystore that
contains server certificates. -->
<keystore path="server.p12"
relative-to="infinispan.server.config.path"
keystore-password="secret"
alias="server"/>
<!-- Configures a trust store that contains client certificates
or part of a certificate chain. -->
<truststore path="trust.p12"
relative-to="infinispan.server.config.path"
password="secret"/>
</ssl>
</server-identities>
<!-- Authenticates client certificates against the trust store.
If you configure this, the trust store must contain
the public certificates for all clients. -->
<truststore-realm/>
</security-realm>
</security-realms>
</security>
<!-- Configures Data Grid Server to require client certificates
with the "require-ssl-client-auth" attribute. -->
<endpoints xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="urn:infinispan:server:12.1 https://infinispan.org/schemas/infinispan-server-12.1.xsd"
xmlns="urn:infinispan:server:12.1"
socket-binding="default"
security-realm="default"
require-ssl-client-auth="true">
<hotrod-connector>
<!-- Configures the Hot Rod endpoint for client certificate authentication. -->
<authentication>
<sasl mechanisms="EXTERNAL"
server-name="infinispan"
qop="auth"/>
</authentication>
</hotrod-connector>
<rest-connector>
<!-- Configures the REST endpoint for client certificate authentication. -->
<authentication mechanisms="CLIENT_CERT"/>
</rest-connector>
</endpoints>
第4章 エンドポイント認証メカニズムの設定
クライアントで認証するために、SASL または HTTP 認証メカニズムを使用して、Hot Rod および REST コネクターを設定します。
Data Grid サーバーでは、コマンドラインインターフェイス (CLI) とコンソールに加え、Hot Rod および REST エンドポイントにアクセスするために、ユーザー認証が必要です。また、Data Grid サーバーは、定義したセキュリティーレルムに基づいて認証メカニズムを自動的に設定します。
4.1. Data Grid Server の認証
Data Grid サーバーは、エンドポイントに割り当てるセキュリティーレルムに基づいて、認証メカニズムを自動的に設定します。
SASL 認証メカニズム
以下の SASL 認証メカニズムは Hot Rod エンドポイントに適用されます。
Security Realm | SASL 認証メカニズム |
---|---|
プロパティーレルムと LDAP レルム | SCRAM-*、DIGEST-*、CRAM-MD5 |
トークンレルム | OAUTHBEARER |
トラストレルム | EXTERNAL |
Kerberos アイデンティティー | GSSAPI、GS2-KRB5 |
SSL/TLS アイデンティティー | PLAIN |
HTTP 認証メカニズム
以下の HTTP 認証メカニズムは REST エンドポイントに適用されます。
Security Realm | HTTP 認証メカニズム |
---|---|
プロパティーレルムと LDAP レルム | DIGEST |
トークンレルム | BEARER_TOKEN |
トラストレルム | CLIENT_CERT |
Kerberos アイデンティティー | SPNEGO |
SSL/TLS アイデンティティー | BASIC |
デフォルト設定
Data Grid サーバーは、以下のスニペットに示すように $RHDG_HOME/server/ conf/users.properties
で定義されたプレーンテキストの認証情報が含まれるプロパティーレルムを使用する default という名前のセキュリティーレルムを提供します。
<security-realm name="default"> <properties-realm groups-attribute="Roles"> <user-properties path="users.properties" relative-to="infinispan.server.config.path" plain-text="true"/> <group-properties path="groups.properties" relative-to="infinispan.server.config.path" /> </properties-realm> </security-realm>
<security-realm name="default">
<properties-realm groups-attribute="Roles">
<user-properties path="users.properties"
relative-to="infinispan.server.config.path"
plain-text="true"/>
<group-properties path="groups.properties"
relative-to="infinispan.server.config.path" />
</properties-realm>
</security-realm>
endpoints
設定は、以下のようにデフォルトのセキュリティーレルムを Hot Rod および REST コネクターに割り当てます。
<endpoints socket-binding="default" security-realm="default"> <hotrod-connector name="hotrod"/> <rest-connector name="rest"/> </endpoints>
<endpoints socket-binding="default" security-realm="default">
<hotrod-connector name="hotrod"/>
<rest-connector name="rest"/>
</endpoints>
上記の設定により、Data Grid サーバーには、プロパティーレルムがサポートするメカニズムによる認証が必要になります。
4.2. Hot Rod 認証の手動設定
Data Grid サーバーがセキュリティーレルムに使用するデフォルトの SASL 認証メカニズムを上書きするように、Hot Rod コネクター認証を明示的に設定します。
手順
-
Hot Rod コネクター設定に
authentication
定義を追加します。 - Hot Rod コネクターが認証に使用する Data Grid セキュリティーレルムを指定します。
- 使用する Hot Rod エンドポイントの SASL 認証メカニズムを指定します。
- 必要に応じて SASL 認証プロパティーを設定します。
4.2.1. Hot Rod 認証設定
SCRAM、DIGEST、および PLAIN 認証を使用した Hot Rod コネクター
<endpoints xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="urn:infinispan:server:12.1 https://infinispan.org/schemas/infinispan-server-12.1.xsd" xmlns="urn:infinispan:server:12.1" socket-binding="default" security-realm="default"> <hotrod-connector> <authentication> <!-- Specifies SASL mechanisms to use for authentication. --> <!-- Defines the name that the server declares to clients. --> <sasl mechanisms="SCRAM-SHA-512 SCRAM-SHA-384 SCRAM-SHA-256 SCRAM-SHA-1 DIGEST-SHA-512 DIGEST-SHA-384 DIGEST-SHA-256 DIGEST-SHA DIGEST-MD5 PLAIN" server-name="infinispan" qop="auth"/> </authentication> </hotrod-connector> </endpoints>
<endpoints xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="urn:infinispan:server:12.1
https://infinispan.org/schemas/infinispan-server-12.1.xsd"
xmlns="urn:infinispan:server:12.1"
socket-binding="default"
security-realm="default">
<hotrod-connector>
<authentication>
<!-- Specifies SASL mechanisms to use for authentication. -->
<!-- Defines the name that the server declares to clients. -->
<sasl mechanisms="SCRAM-SHA-512 SCRAM-SHA-384 SCRAM-SHA-256
SCRAM-SHA-1 DIGEST-SHA-512 DIGEST-SHA-384
DIGEST-SHA-256 DIGEST-SHA DIGEST-MD5 PLAIN"
server-name="infinispan"
qop="auth"/>
</authentication>
</hotrod-connector>
</endpoints>
Kerberos 認証を使用した Hot Rod コネクター
<endpoints xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="urn:infinispan:server:12.1 https://infinispan.org/schemas/infinispan-server-12.1.xsd" xmlns="urn:infinispan:server:12.1" socket-binding="default" security-realm="default"> <hotrod-connector> <authentication> <!-- Enables the GSSAPI and GS2-KRB5 mechanisms for Kerberos authentication. --> <!-- Defines the server name, which is equivalent to the Kerberos service name, and specifies the Kerberos identity for the server. --> <sasl mechanisms="GSSAPI GS2-KRB5" server-name="datagrid" server-principal="hotrod/datagrid@INFINISPAN.ORG"/> </authentication> </hotrod-connector> </endpoints>
<endpoints xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="urn:infinispan:server:12.1 https://infinispan.org/schemas/infinispan-server-12.1.xsd"
xmlns="urn:infinispan:server:12.1"
socket-binding="default"
security-realm="default">
<hotrod-connector>
<authentication>
<!-- Enables the GSSAPI and GS2-KRB5 mechanisms for Kerberos authentication. -->
<!-- Defines the server name, which is equivalent to the Kerberos service name, and specifies the Kerberos identity for the server. -->
<sasl mechanisms="GSSAPI GS2-KRB5"
server-name="datagrid"
server-principal="hotrod/datagrid@INFINISPAN.ORG"/>
</authentication>
</hotrod-connector>
</endpoints>
4.2.2. Hot Rod エンドポイント認証メカニズム
Data Grid は、Hot Rod コネクターを使用して以下の SASL 認証メカニズムをサポートします。
認証メカニズム | 説明 | 関連する詳細 |
---|---|---|
|
プレーンテキスト形式の認証情報を使用します。 |
|
|
ハッシュアルゴリズムとナンス値を使用します。ホットロッドコネクターは、強度の順に、 |
|
|
ハッシュアルゴリズムとナンス値に加えてソルト値を使用します。ホットロッドコネクターは、 |
|
|
Kerberos チケットを使用し、Kerberos ドメインコントローラーが必要です。対応する |
|
|
Kerberos チケットを使用し、Kerberos ドメインコントローラーが必要です。対応する |
|
| クライアント証明書を使用します。 |
|
|
OAuth トークンを使用し、 |
|
4.2.3. SASL Quality of Protection (QoP)
SASL メカニズムが整合性とプライバシー保護設定に対応している場合は、qop
属性を使用して Hot Rod コネクター設定に追加することができます。
QoP 設定 | 説明 |
---|---|
| 認証のみ。 |
| 整合性保護による認証。 |
| 整合性とプライバシー保護による認証。 |
4.2.4. SASL ポリシー
SASL ポリシーを使用すると、Hot Rod コネクターが使用できる認証メカニズムを制御できます。
ポリシー | 説明 | デフォルト値 |
---|---|---|
| セッション間の forward secrecy をサポートする SASL メカニズムのみを使用します。これは、1 つのセッションに分割しても、将来のセッションに分割するための情報が自動的に提供されないことを意味します。 | false |
| クライアント認証情報が必要な SASL メカニズムのみを使用してください。 | false |
| 単純な受動的攻撃の影響を受けやすい SASL メカニズムは使用しないでください。 | false |
| アクティブな非辞書攻撃の影響を受けやすい SASL メカニズムは使用しないでください。 | false |
| 受動的な辞書攻撃の影響を受けやすい SASL メカニズムは使用しないでください。 | false |
| 匿名ログインを許可する SASL メカニズムは使用しないでください。 | true |
Data Grid のキャッシュ承認では、ロールおよびパーミッションに基づいてキャッシュへのアクセスを制限します。キャッシュ承認を設定する場合は、<no-anonymous value=false />
を設定して匿名ログインを許可し、アクセスロジックをキャッシュ承認に委任できます。
SASL ポリシー設定の Hot Rod コネクター
<hotrod-connector socket-binding="hotrod" cache-container="default"> <authentication security-realm="ApplicationRealm"> <!-- Specifies multiple SASL authentication mechanisms for the Hot Rod connector. --> <sasl server-name="myhotrodserver" mechanisms="PLAIN DIGEST-MD5 GSSAPI EXTERNAL" qop="auth"> <!-- Defines policies for SASL mechanisms. --> <policy> <no-active value="true" /> <no-anonymous value="true" /> <no-plain-text value="true" /> </policy> </sasl> </authentication> </hotrod-connector>
<hotrod-connector socket-binding="hotrod" cache-container="default">
<authentication security-realm="ApplicationRealm">
<!-- Specifies multiple SASL authentication mechanisms for the Hot Rod connector. -->
<sasl server-name="myhotrodserver"
mechanisms="PLAIN DIGEST-MD5 GSSAPI EXTERNAL"
qop="auth">
<!-- Defines policies for SASL mechanisms. -->
<policy>
<no-active value="true" />
<no-anonymous value="true" />
<no-plain-text value="true" />
</policy>
</sasl>
</authentication>
</hotrod-connector>
前述の設定により、Hot Rod コネクターは GSSAPI
メカニズムを使用します。これは、すべてのポリシーに準拠する唯一のメカニズムであるためです。
4.3. REST 認証の手動設定
Data Grid サーバーがセキュリティーレルムに使用するデフォルトの HTTP 認証メカニズムを上書きするように、REST コネクター認証を明示的に設定します。
手順
-
REST コネクター設定に
authentication
定義を追加します。 - REST コネクターが認証に使用する Data Grid セキュリティーレルムを指定します。
- 使用する REST エンドポイントの認証メカニズムを指定します。
4.3.1. REST 認証設定
BASIC および DIGEST 認証による REST コネクター
<endpoints xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="urn:infinispan:server:12.1 https://infinispan.org/schemas/infinispan-server-12.1.xsd" xmlns="urn:infinispan:server:12.1" socket-binding="default" security-realm="default"> <rest-connector> <!-- Specifies SASL mechanisms to use for authentication. --> <authentication mechanisms="DIGEST BASIC"/> </rest-connector> </endpoints>
<endpoints xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="urn:infinispan:server:12.1 https://infinispan.org/schemas/infinispan-server-12.1.xsd"
xmlns="urn:infinispan:server:12.1"
socket-binding="default"
security-realm="default">
<rest-connector>
<!-- Specifies SASL mechanisms to use for authentication. -->
<authentication mechanisms="DIGEST BASIC"/>
</rest-connector>
</endpoints>
Kerberos 認証による REST コネクター
<endpoints xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="urn:infinispan:server:12.1 https://infinispan.org/schemas/infinispan-server-12.1.xsd" xmlns="urn:infinispan:server:12.1" socket-binding="default" security-realm="default"> <rest-connector> <!-- Enables the `SPENGO` mechanism for Kerberos authentication and specifies an identity for the server. --> <authentication mechanisms="SPNEGO" server-principal="HTTP/localhost@INFINISPAN.ORG"/> </rest-connector> </endpoints>
<endpoints xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="urn:infinispan:server:12.1 https://infinispan.org/schemas/infinispan-server-12.1.xsd"
xmlns="urn:infinispan:server:12.1"
socket-binding="default"
security-realm="default">
<rest-connector>
<!-- Enables the `SPENGO` mechanism for Kerberos authentication and specifies an identity for the server. -->
<authentication mechanisms="SPNEGO"
server-principal="HTTP/localhost@INFINISPAN.ORG"/>
</rest-connector>
</endpoints>
4.3.2. REST エンドポイント認証メカニズム
Data Grid は、REST コネクターを使用して以下の認証メカニズムをサポートします。
認証メカニズム | 説明 | 関連する詳細 |
---|---|---|
|
プレーンテキスト形式の認証情報を使用します。暗号化された接続でのみ |
HTTP |
|
ハッシュアルゴリズムとナンス値を使用します。REST コネクターは、 |
|
|
Kerberos チケットを使用し、Kerberos ドメインコントローラーが必要です。対応する |
|
|
OAuth トークンを使用し、 |
|
| クライアント証明書を使用します。 |
|
4.4. 認証の無効化
ローカル開発環境または分離されたネットワークでは、認証されていないクライアント要求を許可するように Data Grid を設定できます。
ユーザー認証を無効にする場合は、Data Grid セキュリティー設定で承認も無効にする必要があります。
手順
-
infinispan.xml
を開いて編集します。 -
endpoints
設定からsecurity-realm
属性を削除します。 Hot Rod および REST コネクターに
authentication
が含まれていないことを確認します。たとえば、以下の設定では、Data Grid への認証されていないアクセスが許可されます。
<endpoints socket-binding="default"> <hotrod-connector name="hotrod"/> <rest-connector name="rest"/> </endpoints>
<endpoints socket-binding="default"> <hotrod-connector name="hotrod"/> <rest-connector name="rest"/> </endpoints>
Copy to Clipboard Copied! -
cache-container
および各キャッシュ設定のsecurity
設定から、authorization
要素をすべて削除します。
第5章 Data Grid Server 接続の暗号化
Data Grid の公開鍵と秘密鍵が含まれるキーストアを設定することにより、SSL/TLS 暗号化を使用して Data Grid Server の接続をセキュアにすることができます。相互 TLS が必要な場合、クライアント証明書認証を設定することもできます。
5.1. Data Grid Server キーストアの設定
キーストアを Data Grid Server に追加し、その ID をクライアントに対して検証する SSL/TLS 証明書を提示します。セキュリティーレルムに TLS/SSL アイデンティティーが含まれる場合は、そのセキュリティーレルムを使用する Data Grid Server エンドポイントへの接続を暗号化します。
前提条件
- Data Grid Server の証明書または証明書チェーンが含まれるキーストアを作成します。
Data Grid Server は、JKS、JCEKS、PKCS12、BKS、BCFKS、および UBER のキーストア形式をサポートします。
実稼働環境では、サーバー証明書は Root または Intermediate CA のいずれかの信頼される認証局によって署名される必要があります。
手順
-
Data Grid Server の SSL/TLS アイデンティティーが含まれるキーストアを
$RHDG_HOME/server/conf
ディレクトリーに追加します。 -
server-identities
定義を Data Grid Server セキュリティーレルムに追加します。 -
path
属性でキーストアファイル名を指定します。 -
キーストアパスワードと証明書エイリアスに
keystore-password
およびalias
属性を指定します。
Data Grid Server キーストアの設定
<security xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="urn:infinispan:server:12.1 https://infinispan.org/schemas/infinispan-server-12.1.xsd" xmlns="urn:infinispan:server:12.1"> <security-realms> <security-realm name="default"> <server-identities> <ssl> <!-- Adds a keystore that contains server certificates that provide SSL/TLS identities to clients. --> <keystore path="server.pfx" relative-to="infinispan.server.config.path" keystore-password="secret" alias="rhdg-server"/> </ssl> </server-identities> </security-realm> </security-realms> </security>
<security xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="urn:infinispan:server:12.1 https://infinispan.org/schemas/infinispan-server-12.1.xsd"
xmlns="urn:infinispan:server:12.1">
<security-realms>
<security-realm name="default">
<server-identities>
<ssl>
<!-- Adds a keystore that contains server certificates
that provide SSL/TLS identities to clients. -->
<keystore path="server.pfx"
relative-to="infinispan.server.config.path"
keystore-password="secret"
alias="rhdg-server"/>
</ssl>
</server-identities>
</security-realm>
</security-realms>
</security>
次のステップ
クライアントが Data Grid Server の SSL/TLS ID を確認できるように、トラストストアを使用してクライアントを設定します。
5.1.1. キーストアの自動生成
Data Grid サーバーを設定し、起動時にキーストアを自動的に生成します。
自動生成されたキーストア:
- 実稼働環境では使用しないでください。
- 必要に応じて生成されます。たとえば、クライアントから最初の接続を取得する際などに生成されます。
- Hot Rod クライアントで直接使用可能な証明書が含まれます。
手順
-
サーバー設定に
keystore
要素のgenerate-self-signed-certificate-host
属性を含めます。 - サーバー証明書のホスト名を値として指定します。
生成されたキーストアを持つ SSL サーバーアイデンティティー
<security xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="urn:infinispan:server:12.1 https://infinispan.org/schemas/infinispan-server-12.1.xsd" xmlns="urn:infinispan:server:12.1"> <security-realms> <security-realm name="default"> <server-identities> <ssl> <!-- Generates a keystore that includes a self-signed certificate with the specified hostname. --> <keystore path="server.p12" relative-to="infinispan.server.config.path" keystore-password="secret" alias="server" generate-self-signed-certificate-host="localhost"/> </ssl> </server-identities> </security-realm> </security-realms> </security>
<security xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="urn:infinispan:server:12.1 https://infinispan.org/schemas/infinispan-server-12.1.xsd"
xmlns="urn:infinispan:server:12.1">
<security-realms>
<security-realm name="default">
<server-identities>
<ssl>
<!-- Generates a keystore that includes a self-signed certificate with the specified hostname. -->
<keystore path="server.p12"
relative-to="infinispan.server.config.path"
keystore-password="secret"
alias="server"
generate-self-signed-certificate-host="localhost"/>
</ssl>
</server-identities>
</security-realm>
</security-realms>
</security>
5.1.2. TLS バージョンおよび暗号スイートの設定
SSL/TLS 暗号化を使用してデプロイメントのセキュリティーを保護する場合は、特定のバージョンの TLS プロトコルと、プロトコル内の特定の暗号スイートを使用するように Data Grid Server を設定できます。
手順
-
engine
要素を Data Grid Server の SSL 設定に追加します。 enabled-protocols
属性を持つ 1 つ以上の TLS バージョンを使用するように Data Grid を設定します。Data Grid Server は、デフォルトで TLS バージョン 1.2 および 1.3 をサポートします。該当する場合は、クライアント接続のセキュリティープロトコルを制限するために、
TLSv1.3
のみを設定できます。Data Grid は、TLSv1.1
の有効化を推奨していません。これは、サポートが制限された古いプロトコルで、セキュリティー保護が弱いからです。1.1 より古いバージョンの TLS を有効にすることはできません。警告Data Grid Server の SSL
engine
設定を変更する場合は、enabled-protocols
属性を使用して TLS バージョンを明示的に設定する必要があります。enabled-protocols
属性を省略すると、すべての TLS バージョンが許可されます。<engine enabled-protocols="TLSv1.3 TLSv1.2" />
<engine enabled-protocols="TLSv1.3 TLSv1.2" />
Copy to Clipboard Copied! enabled-ciphersuites
属性で 1 つ以上の暗号スイートを使用するように Data Grid を設定します。使用する予定のプロトコル機能 (例:
HTTP/2 ALPN
) をサポートする暗号スイートを設定していることを確認する必要があります。
SSL エンジンの設定
<security xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="urn:infinispan:server:12.1 https://infinispan.org/schemas/infinispan-server-12.1.xsd" xmlns="urn:infinispan:server:12.1"> <security-realms> <security-realm name="default"> <server-identities> <ssl> <keystore path="server.p12" relative-to="infinispan.server.config.path" keystore-password="secret" alias="server"/> <!-- Configures Data Grid Server to use specific TLS versions and cipher suites. --> <engine enabled-protocols="TLSv1.3" enabled-ciphersuites="TLS_AES_256_GCM_SHA384 TLS_AES_128_GCM_SHA256 TLS_AES_128_CCM_8_SHA256"/> </ssl> </server-identities> </security-realm> </security-realms> </security>
<security xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="urn:infinispan:server:12.1
https://infinispan.org/schemas/infinispan-server-12.1.xsd"
xmlns="urn:infinispan:server:12.1">
<security-realms>
<security-realm name="default">
<server-identities>
<ssl>
<keystore path="server.p12"
relative-to="infinispan.server.config.path"
keystore-password="secret" alias="server"/>
<!-- Configures Data Grid Server to use specific TLS versions and cipher suites. -->
<engine enabled-protocols="TLSv1.3"
enabled-ciphersuites="TLS_AES_256_GCM_SHA384 TLS_AES_128_GCM_SHA256 TLS_AES_128_CCM_8_SHA256"/>
</ssl>
</server-identities>
</security-realm>
</security-realms>
</security>
5.2. クライアント証明書認証の設定
Data Grid Server が相互 TLS を使用してクライアント接続のセキュリティーを保護するように設定します。
トラストストアの証明書からクライアント ID を検証するように Data Grid を設定するには、以下の 2 つの方法があります。
- 通常は認証局 (CA) である署名証明書のみが含まれるトラストストアが必要です。CA によって署名された証明書を提示するクライアントは、Data Grid に接続できます。
- 署名証明書に加えて、すべてのクライアント証明書が含まれるトラストストアが必要です。トラストストアに存在する署名済み証明書を提示するクライアントのみが Data Grid に接続できます。
トラストストアを提供する代わりに、共有システム証明書を使用できます。
前提条件
- CA 証明書またはすべての公開証明書のいずれかを含むクライアントトラストストアを作成します。
- Data Grid Server のキーストアを作成し、SSL/TLS アイデンティティーを設定します。
手順
-
require-ssl-client-auth="true"
パラメーターをendpoints
設定に追加します。 -
クライアントトラストストアを
$RHDG_HOME/server/conf
ディレクトリーに追加します。 -
Data Grid Server セキュリティーレルム設定で、
truststore
要素のpath
およびpassword
属性を指定します。 -
Data Grid Server で各クライアント証明書を認証する場合は、
<truststore-realm/>
要素をセキュリティーレルムに追加します。
Data Grid Server のトラストストアレルムの設定
<security xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="urn:infinispan:server:12.1 https://infinispan.org/schemas/infinispan-server-12.1.xsd" xmlns="urn:infinispan:server:12.1"> <security-realms> <security-realm name="default"> <server-identities> <ssl> <!-- Provides an SSL/TLS identity with a keystore that contains server certificates. --> <keystore path="server.p12" relative-to="infinispan.server.config.path" keystore-password="secret" alias="server"/> <!-- Configures a trust store that contains client certificates or part of a certificate chain. --> <truststore path="trust.p12" relative-to="infinispan.server.config.path" password="secret"/> </ssl> </server-identities> <!-- Authenticates client certificates against the trust store. If you configure this, the trust store must contain the public certificates for all clients. --> <truststore-realm/> </security-realm> </security-realms> </security> <!-- Configures Data Grid Server to require client certificates with the "require-ssl-client-auth" attribute. --> <endpoints xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="urn:infinispan:server:12.1 https://infinispan.org/schemas/infinispan-server-12.1.xsd" xmlns="urn:infinispan:server:12.1" socket-binding="default" security-realm="default" require-ssl-client-auth="true"> <hotrod-connector> <!-- Configures the Hot Rod endpoint for client certificate authentication. --> <authentication> <sasl mechanisms="EXTERNAL" server-name="infinispan" qop="auth"/> </authentication> </hotrod-connector> <rest-connector> <!-- Configures the REST endpoint for client certificate authentication. --> <authentication mechanisms="CLIENT_CERT"/> </rest-connector> </endpoints>
<security xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="urn:infinispan:server:12.1 https://infinispan.org/schemas/infinispan-server-12.1.xsd"
xmlns="urn:infinispan:server:12.1">
<security-realms>
<security-realm name="default">
<server-identities>
<ssl>
<!-- Provides an SSL/TLS identity with a keystore that
contains server certificates. -->
<keystore path="server.p12"
relative-to="infinispan.server.config.path"
keystore-password="secret"
alias="server"/>
<!-- Configures a trust store that contains client certificates
or part of a certificate chain. -->
<truststore path="trust.p12"
relative-to="infinispan.server.config.path"
password="secret"/>
</ssl>
</server-identities>
<!-- Authenticates client certificates against the trust store.
If you configure this, the trust store must contain
the public certificates for all clients. -->
<truststore-realm/>
</security-realm>
</security-realms>
</security>
<!-- Configures Data Grid Server to require client certificates
with the "require-ssl-client-auth" attribute. -->
<endpoints xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="urn:infinispan:server:12.1 https://infinispan.org/schemas/infinispan-server-12.1.xsd"
xmlns="urn:infinispan:server:12.1"
socket-binding="default"
security-realm="default"
require-ssl-client-auth="true">
<hotrod-connector>
<!-- Configures the Hot Rod endpoint for client certificate authentication. -->
<authentication>
<sasl mechanisms="EXTERNAL"
server-name="infinispan"
qop="auth"/>
</authentication>
</hotrod-connector>
<rest-connector>
<!-- Configures the REST endpoint for client certificate authentication. -->
<authentication mechanisms="CLIENT_CERT"/>
</rest-connector>
</endpoints>
次のステップ
- セキュリティーロールおよびパーミッションでアクセスを制御する場合は、Data Grid Server 設定で、クライアント証明書を使用して承認を設定します。
- クライアントを設定し、Data Grid Server と SSL/TLS 接続をネゴシエートします。
5.3. クライアント証明書を使用した承認の設定
クライアント証明書認証を有効にすると、クライアント設定で Data Grid ユーザー認証情報を指定する必要がなくなります。つまり、ロールをクライアント証明書の Common Name (CN) フィールドに関連付ける必要があります。
前提条件
- クライアントに、公開証明書または証明書チェーンの一部 (通常は公開 CA 証明書) のいずれかが含まれる Java キーストアを提供します。
- クライアント証明書認証を実行するように Data Grid Server を設定します。
手順
-
セキュリティー承認設定で
common-name-role-mapper
を有効にします。 クライアント証明書から Common Name (
CN
) に、適切な権限を持つロールを割り当てます。<cache-container name="certificate-authentication" statistics="true"> <security> <authorization> <!-- Declare a role mapper that associates the common name (CN) field in client certificate trust stores with authorization roles. --> <common-name-role-mapper/> <!-- In this example, if a client certificate contains `CN=Client1` then clients with matching certificates get ALL permissions. --> <role name="Client1" permissions="ALL"/> </authorization> </security> </cache-container>
<cache-container name="certificate-authentication" statistics="true"> <security> <authorization> <!-- Declare a role mapper that associates the common name (CN) field in client certificate trust stores with authorization roles. --> <common-name-role-mapper/> <!-- In this example, if a client certificate contains `CN=Client1` then clients with matching certificates get ALL permissions. --> <role name="Client1" permissions="ALL"/> </authorization> </security> </cache-container>
Copy to Clipboard Copied!
第6章 Data Grid Server の Kerberos Identities の設定
クライアントとの接続を保護するために、Data Grid Server エンドポイントに Kerberos ID を提供します。
6.1. Kerberos アイデンティティーの設定
Kerberos アイデンティティーは、Kerberos パスワードから派生するサービスプリンシパル名と暗号化鍵が含まれる キータブ ファイルを使用します。
キータブ ファイルには、ユーザーとサービスのアカウントプリンシパルの両方を含めることができます。ただし、Data Grid サーバーは、サービスアカウントのプリンシパルのみを使用します。その結果、Data Grid サーバーはクライアントに ID を提供でき、これによりクライアントが Kerberos サーバーで認証できるようになります。
ほとんどの場合、Hot Rod および REST コネクターに一意のプリンシパルを作成します。たとえば、INFINISPAN.ORG ドメインに datagrid サーバーがあるとします。この場合、以下のサービスプリンシパルを作成する必要があります。
-
hotrod/datagrid@INFINISPAN.ORG
は Hot Rod サービスを特定します。 -
HTTP/datagrid@INFINISPAN.ORG
は REST サービスを識別します。
手順
Hot Rod および REST サービスのキータブファイルを作成します。
- Linux
ktutil
$ ktutil ktutil: addent -password -p datagrid@INFINISPAN.ORG -k 1 -e aes256-cts Password for datagrid@INFINISPAN.ORG: [enter your password] ktutil: wkt http.keytab ktutil: quit
Copy to Clipboard Copied! - Microsoft Windows
ktpass -princ HTTP/datagrid@INFINISPAN.ORG -pass * -mapuser INFINISPAN\USER_NAME ktab -k http.keytab -a HTTP/datagrid@INFINISPAN.ORG
$ ktpass -princ HTTP/datagrid@INFINISPAN.ORG -pass * -mapuser INFINISPAN\USER_NAME $ ktab -k http.keytab -a HTTP/datagrid@INFINISPAN.ORG
Copy to Clipboard Copied!
-
キータブファイルを
$ISPN_HOME/server/conf
ディレクトリーにコピーします。 -
server-identities
定義を Data Grid サーバーのセキュリティーレルムに追加します。 - Hot Rod および REST コネクターにサービスプリンシパルを提供するキータブファイルの場所を指定します。
- Kerberos サービスプリンシパルに名前を付けます。
6.2. Kerberos ID 設定
以下の例では、Data Grid Server の Kerberos アイデンティティーを設定します。
<security xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="urn:infinispan:server:12.1 https://infinispan.org/schemas/infinispan-server-12.1.xsd" xmlns="urn:infinispan:server:12.1"> <security-realms> <security-realm name="default"> <server-identities> <!-- Specifies a keytab file that provides a Kerberos identity for the Hot Rod connector. --> <!-- Names the Kerberos service principal for the Hot Rod connector. --> <!-- The required="true" attribute specifies that the keytab file must be present when the server starts. --> <kerberos keytab-path="hotrod.keytab" principal="hotrod/datagrid@INFINISPAN.ORG" required="true"/> <!-- Specifies a keytab file that provides a Kerberos identity for the REST connector. --> <!-- Names the Kerberos service principal for the REST connector. --> <kerberos keytab-path="http.keytab" principal="HTTP/localhost@INFINISPAN.ORG" required="true"/> </server-identities> </security-realm> </security-realms> </security>
<security xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="urn:infinispan:server:12.1 https://infinispan.org/schemas/infinispan-server-12.1.xsd"
xmlns="urn:infinispan:server:12.1">
<security-realms>
<security-realm name="default">
<server-identities>
<!-- Specifies a keytab file that provides a Kerberos identity for the Hot Rod connector. -->
<!-- Names the Kerberos service principal for the Hot Rod connector. -->
<!-- The required="true" attribute specifies that the keytab file must be present when the server starts. -->
<kerberos keytab-path="hotrod.keytab"
principal="hotrod/datagrid@INFINISPAN.ORG"
required="true"/>
<!-- Specifies a keytab file that provides a Kerberos identity for the REST connector. -->
<!-- Names the Kerberos service principal for the REST connector. -->
<kerberos keytab-path="http.keytab"
principal="HTTP/localhost@INFINISPAN.ORG"
required="true"/>
</server-identities>
</security-realm>
</security-realms>
</security>
第7章 キーストアへの Data Grid Server 認証情報の保存
外部サービスには、Data Grid Server での認証に認証情報が必要です。パスワードなどの機密なテキスト文字列を保護するには、これらを Data Grid Server 設定ファイルに直接追加するのではなく、認証情報キーストアに追加します。
次に、データベースや LDAP ディレクトリーなどのサービスと接続を確立するためのパスワードを復号化するように、Data Grid Server を設定することができます。
$RHDG_HOME/server/conf
のプレーンテキストのパスワードは暗号化されません。ホストファイルシステムへの読み取りアクセス権を持つすべてのユーザーアカウントは、プレーンテキストのパスワードを表示できます。
認証情報キーストアはパスワードで保護されたストア暗号化パスワードですが、ホストファイルシステムへの書き込みアクセス権を持つユーザーアカウントは、キーストア自体を改ざんすることが可能です。
Data Grid Server の認証情報を完全に保護するには、Data Grid Server を設定および実行できるユーザーアカウントにのみ読み書きアクセスを付与する必要があります。
7.1. 認証情報キーストアの設定
Data Grid Server アクセスの認証情報を暗号化するキーストアを作成します。
認証情報キーストアには、暗号化されたパスワードに関連するエイリアスが少なくとも 1 つ含まれます。キーストアの作成後に、データベース接続プールなどの接続設定にエイリアスを指定します。その後、Data Grid Server は、サービスが認証を試行するときに、キーストアからそのエイリアスのパスワードを復号化します。
必要な数のエイリアスを使用して、必要な数の認証情報キーストアを作成できます。
手順
-
$RHDG_HOME
でターミナルを開きます。 キーストアを作成し、
credentials
コマンドを使用して認証情報を追加します。ヒントデフォルトでは、キーストアのタイプは PKCS12 です。キーストアのデフォルトの変更に関する詳細は、
help credentials
を実行します。次の例は、パスワード changeme 用に dbpassword のエイリアスを含むキーストアを作成する方法を示しています。キーストアの作成時に、
-p
引数を使用してキーストアのパスワードも指定します。- Linux
bin/cli.sh credentials add dbpassword -c changeme -p "secret1234!"
$ bin/cli.sh credentials add dbpassword -c changeme -p "secret1234!"
Copy to Clipboard Copied! - Microsoft Windows
bin\cli.bat credentials add dbpassword -c changeme -p "secret1234!"
$ bin\cli.bat credentials add dbpassword -c changeme -p "secret1234!"
Copy to Clipboard Copied!
エイリアスがキーストアに追加されていることを確認します。
bin/cli.sh credentials ls -p "secret1234!"
$ bin/cli.sh credentials ls -p "secret1234!" dbpassword
Copy to Clipboard Copied! 認証情報キーストアを使用するように Data Grid を設定します。
-
credential-stores
設定の認証情報キーストアの名前と場所を指定します。 credential-reference
設定で認証情報キーストアとエイリアスを指定します。ヒントcredential-reference
設定の属性はオプションです。-
store
は、複数のキーストアがある場合にのみ必要です。 -
alias
は、キーストアに複数のエイリアスが含まれる場合にのみ必要です。
-
-
7.2. Credential Keystore Configuration
Data Grid Server 設定の認証情報キーストアの設定例を確認してください。
認証情報キーストア
<security xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="urn:infinispan:server:12.1 https://infinispan.org/schemas/infinispan-server-12.1.xsd" xmlns="urn:infinispan:server:12.1"> <!-- Uses a keystore to manage server credentials. --> <credential-stores> <!-- Specifies the name and filesystem location of a keystore. --> <credential-store name="credentials" path="credentials.pfx"> <!-- Specifies the password for the credential keystore. --> <clear-text-credential clear-text="secret1234!"/> </credential-store> </credential-stores> </security>
<security xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="urn:infinispan:server:12.1 https://infinispan.org/schemas/infinispan-server-12.1.xsd"
xmlns="urn:infinispan:server:12.1">
<!-- Uses a keystore to manage server credentials. -->
<credential-stores>
<!-- Specifies the name and filesystem location of a keystore. -->
<credential-store name="credentials" path="credentials.pfx">
<!-- Specifies the password for the credential keystore. -->
<clear-text-credential clear-text="secret1234!"/>
</credential-store>
</credential-stores>
</security>
データソース接続
<data-sources xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="urn:infinispan:server:12.1 https://infinispan.org/schemas/infinispan-server-12.1.xsd" xmlns="urn:infinispan:server:12.1"> <data-source name="postgres" jndi-name="jdbc/postgres"> <!-- Specifies the database username in the connection factory. --> <connection-factory driver="org.postgresql.Driver" username="dbuser" url="${org.infinispan.server.test.postgres.jdbcUrl}"> <!-- Specifies the credential keystore that contains an encrypted password and the alias for it. --> <credential-reference store="credentials" alias="dbpassword"/> </connection-factory> <connection-pool max-size="10" min-size="1" background-validation="1000" idle-removal="1" initial-size="1" leak-detection="10000"/> </data-source> </data-sources>
<data-sources xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="urn:infinispan:server:12.1 https://infinispan.org/schemas/infinispan-server-12.1.xsd"
xmlns="urn:infinispan:server:12.1">
<data-source name="postgres" jndi-name="jdbc/postgres">
<!-- Specifies the database username in the connection factory. -->
<connection-factory driver="org.postgresql.Driver"
username="dbuser"
url="${org.infinispan.server.test.postgres.jdbcUrl}">
<!-- Specifies the credential keystore that contains an encrypted password and the alias for it. -->
<credential-reference store="credentials" alias="dbpassword"/>
</connection-factory>
<connection-pool max-size="10" min-size="1" background-validation="1000" idle-removal="1" initial-size="1" leak-detection="10000"/>
</data-source>
</data-sources>
LDAP 接続
<security xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="urn:infinispan:server:12.1 https://infinispan.org/schemas/infinispan-server-12.1.xsd" xmlns="urn:infinispan:server:12.1"> <credential-stores> <credential-store name="credentials" path="credentials.pfx"> <clear-text-credential clear-text="secret1234!"/> </credential-store> </credential-stores> <security-realms> <security-realm name="default"> <!-- Specifies the LDAP principal in the connection factory. --> <ldap-realm name="ldap" url="ldap://my-ldap-server:10389" principal="uid=admin,ou=People,dc=infinispan,dc=org" connection-timeout="3000" read-timeout="30000" connection-pooling="true" referral-mode="ignore" page-size="30"> <!-- Specifies the credential keystore that contains an encrypted password and the alias for it. --> <credential-reference store="credentials" alias="ldappassword"/> </ldap-realm> </security-realm> </security-realms> </security>
<security xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="urn:infinispan:server:12.1 https://infinispan.org/schemas/infinispan-server-12.1.xsd"
xmlns="urn:infinispan:server:12.1">
<credential-stores>
<credential-store name="credentials" path="credentials.pfx">
<clear-text-credential clear-text="secret1234!"/>
</credential-store>
</credential-stores>
<security-realms>
<security-realm name="default">
<!-- Specifies the LDAP principal in the connection factory. -->
<ldap-realm name="ldap" url="ldap://my-ldap-server:10389"
principal="uid=admin,ou=People,dc=infinispan,dc=org"
connection-timeout="3000"
read-timeout="30000"
connection-pooling="true"
referral-mode="ignore"
page-size="30">
<!-- Specifies the credential keystore that contains an encrypted password and the alias for it. -->
<credential-reference store="credentials" alias="ldappassword"/>
</ldap-realm>
</security-realm>
</security-realms>
</security>
第8章 エンドポイントの IP フィルタリング
クライアントアドレスに基づいて接続を許可または拒否するように、エンドポイントで IP フィルタリングルールを設定します。
8.1. Data Grid Server の IP フィルター設定
Data Grid のエンドポイントとコネクターは、1 つ以上の IP フィルタリングルールを指定できます。これらのルールは、提供された CIDR ブロックに一致するクライアントが接続する際に実行するアクションのタイプを指定します。IP フィルタリングルールは、最初に一致するルールまで順番に適用されます。
CIDR ブロックは、IP アドレスとそれに関連するネットワークマスクのコンパクトな表現です。CIDR 表記は、IP アドレス、スラッシュ ('/') 文字、および 10 進数を指定します。10 進数は、ネットワークマスクの先頭の 1 ビットのカウントです。この数は、ネットワーク接頭辞の幅 (ビット単位) として考えることもできます。CIDR 表記の IP アドレスは、常に IPv4 または IPv6 の標準仕様によって表されます。
アドレスは、ホスト ID(例: 10.0.0.1/8
など) を含む特定のインターフェイスアドレスを指定できます。もしくは、10.0.0.0/8
または 10/8
のように 0 のホスト識別子を使用して、ネットワークインターフェイス全体の開始アドレスを指定できます。
以下に例を示します。
-
192.168.100.14/24
は、IPv4 アドレス192.168.100.14
とその関連付けられたネットワーク接頭辞192.168.100.0
を表します。または、先行 1 ビットを 24 個持つサブネットマスク255.255.255.0
となります。 -
IPv4 ブロック
192.168.100.0/22
は、192.168.100.0
から192.168.103.255
までの 1024 IPv4 アドレスを表します。 -
IPv6 ブロック
2001:db8::/48
は2001:db8:0:0:0:0:0:0
から2001:db8:0:ffff:ffff:ffff:ffff:ffff
までの IPv6 アドレスのブロックを表します。 -
::1/128
は IPv6 ループバックアドレスを表します。接頭辞長は 128 で、アドレスのビット数になります。
<endpoints socket-binding="default" security-realm="default"> <ip-filter> <accept from="192.168.0.0/16"/> <accept from="10.0.0.0/8"/> <reject from="/0"/> </ip-filter> <hotrod-connector name="hotrod"/> <rest-connector name="rest"/> </endpoints>
<endpoints socket-binding="default" security-realm="default">
<ip-filter>
<accept from="192.168.0.0/16"/>
<accept from="10.0.0.0/8"/>
<reject from="/0"/>
</ip-filter>
<hotrod-connector name="hotrod"/>
<rest-connector name="rest"/>
</endpoints>
上記の設定の結果として、Data Grid サーバーは 192.168.0.0/16
および 10.0.0.0/8
CIDR ブロック内のアドレスからのみの接続を受け入れます。Data Grid サーバーは、その他のすべての接続を拒否します。
8.2. Data Grid Server の IP フィルタールールの検査および変更
Server IP フィルタールールは、CLI を介して操作できます。
手順
-
$RHDG_HOME
でターミナルを開きます。 必要に応じて、IP フィルタールール
server connector ipfilter
コマンドを検査して変更します。クラスター全体のコネクターでアクティブな IP フィルタリングルールの一覧を表示します。
[//containers/default]> server connector ipfilter ls endpoint-default
[//containers/default]> server connector ipfilter ls endpoint-default
Copy to Clipboard Copied! クラスター全体で IP フィルタリングルールを設定します。
注記このコマンドは、既存のルールを置き換えます。
[//containers/default]> server connector ipfilter set endpoint-default --rules=ACCEPT/192.168.0.0/16,REJECT/10.0.0.0/8`
[//containers/default]> server connector ipfilter set endpoint-default --rules=ACCEPT/192.168.0.0/16,REJECT/10.0.0.0/8`
Copy to Clipboard Copied! クラスター全体のコネクターですべての IP フィルタリングルールを削除します。
[//containers/default]> server connector ipfilter clear endpoint-default
[//containers/default]> server connector ipfilter clear endpoint-default
Copy to Clipboard Copied!
第9章 ユーザー認証の設定
承認は、ユーザーがキャッシュにアクセスしたり、Data Grid リソースとやり取りしたりする前に、特定の権限を持つ必要があるセキュリティー機能です。読み取り専用アクセスから完全なスーパーユーザー特権まで、さまざまなレベルのパーミッションを提供するロールをユーザーに割り当てます。
9.1. キャッシュ設定での承認の有効化
キャッシュ設定で承認を使用して、ユーザーアクセスを制限します。キャッシュエントリーの読み取りや書き込み、キャッシュの作成または削除を行う前に、ユーザーは十分なレベルのパーミッションを持つロールを持っている必要があります。
手順
-
infinispan.xml
設定を開いて編集します。 まだ宣言されていない場合は、
cache-container
のsecurity
要素内に<authorization />
タグを追加します。これにより、Cache Manager の承認が有効になり、キャッシュが継承できるグローバルロールおよびパーミッションセットが提供されます。
-
Data Grid がユーザーロールに基づいてアクセスを制限する各キャッシュに
<authorization />
タグを追加します。
以下の設定例は、デフォルトのロールおよび権限で暗黙的な承認設定を使用する方法を示しています。
<infinispan> <cache-container default-cache="rbac-cache" name="restricted"> <security> <!-- Enable authorization with the default roles and permissions. --> <authorization /> </security> <local-cache name="rbac-cache"> <security> <!-- Inherit authorization settings from the cache-container. --> <authorization/> </security> </local-cache> </cache-container> </infinispan>
<infinispan>
<cache-container default-cache="rbac-cache" name="restricted">
<security>
<!-- Enable authorization with the default roles and permissions. -->
<authorization />
</security>
<local-cache name="rbac-cache">
<security>
<!-- Inherit authorization settings from the cache-container. -->
<authorization/>
</security>
</local-cache>
</cache-container>
</infinispan>
9.2. ユーザーのロールとパーミッション
Data Grid には、データにアクセスして Data Grid リソースと対話するためのパーミッションをユーザーに付与するデフォルトのロールのセットが含まれています。
ClusterRoleMapper
は、Data Grid がセキュリティープリンシパルを承認ロールに関連付けるために使用するデフォルトのメカニズムです。
ClusterRoleMapper
は、プリンシパル名をロール名に一致させます。admin
という名前のユーザーは admin
パーミッションを自動的に取得し、deployer
という名前のユーザーは deployer
パーミッションを取得する、というようになります。
ロール | パーミッション | 説明 |
---|---|---|
| ALL | Cache Manager ライフサイクルの制御など、すべてのパーミッションを持つスーパーユーザー。 |
| ALL_READ、ALL_WRITE、LISTEN、EXEC、MONITOR、CREATE |
|
| ALL_READ、ALL_WRITE、LISTEN、EXEC、MONITOR |
|
| ALL_READ、MONITOR |
|
| MONITOR |
JMX および |
9.3. セキュリティー承認の仕組み
Data Grid の承認は、ユーザーアクセスを制限することでインストールのセキュリティーを保護します。
ユーザーアプリケーションまたはクライアントは、Cache Manager またはキャッシュで操作を実行する前に、十分なパーミッションが割り当てられたロールに属している必要があります。
たとえば、特定のキャッシュインスタンスで承認を設定して、Cache.get()
を呼び出すには、読み取り権限を持つロールを ID に割り当てる必要があり、Cache.put()
を呼び出すには書き込み権限を持つロールが必要になるようにします。
このシナリオでは、io
ロールが割り当てられたユーザーアプリケーションまたはクライアントがエントリーの書き込みを試みると、Data Grid はリクエストを拒否し、セキュリティー例外を出力します。writer
ロールのあるユーザーアプリケーションまたはクライアントが書き込みリクエストを送信する場合、Data Grid は承認を検証し、後続の操作のためにトークンを発行します。
アイデンティティー
アイデンティティーは java.security.Principal
タイプのセキュリティープリンシパルです。javax.security.auth.Subject
クラスで実装されたサブジェクトは、セキュリティープリンシパルのグループを表します。つまり、サブジェクトはユーザーとそれが属するすべてのグループを表します。
ロールのアイデンティティー
Data Grid はロールマッパーを使用するため、セキュリティープリンシパルが 1 つ以上のパーミッションを割り当てるロールに対応します。
以下の図は、セキュリティープリンシパルがロールにどのように対応するかを示しています。
9.3.1. パーミッション
承認ロールには、Data Grid へのアクセスレベルが異なるさまざまなパーミッションがあります。パーミッションを使用すると、Cache Manager とキャッシュの両方へのユーザーアクセスを制限できます。
9.3.1.1. Cache Manager のパーミッション
パーミッション | 機能 | 説明 |
---|---|---|
設定 |
| 新しいキャッシュ設定を定義します。 |
LISTEN |
| キャッシュマネージャーに対してリスナーを登録します。 |
ライフサイクル |
| キャッシュマネージャーを停止します。 |
CREATE |
| キャッシュ、カウンター、スキーマ、スクリプトなどのコンテナーリソースを作成および削除することができます。 |
MONITOR |
|
JMX 統計および |
ALL | - | すべてのキャッシュマネージャーのアクセス許可が含まれます。 |
9.3.1.2. キャッシュ権限
パーミッション | 機能 | 説明 |
---|---|---|
READ |
| キャッシュからエントリーを取得します。 |
WRITE |
| キャッシュ内のデータの書き込み、置換、削除、エビクト。 |
EXEC |
| キャッシュに対するコードの実行を許可します。 |
LISTEN |
| キャッシュに対してリスナーを登録します。 |
BULK_READ |
| 一括取得操作を実行します。 |
BULK_WRITE |
| 一括書き込み操作を実行します。 |
ライフサイクル |
| キャッシュを開始および停止します。 |
ADMIN |
| 基盤となるコンポーネントと内部構造へのアクセスを許可します。 |
MONITOR |
|
JMX 統計および |
ALL | - | すべてのキャッシュパーミッションが含まれます。 |
ALL_READ | - | READ パーミッションと BULK_READ パーミッションを組み合わせます。 |
ALL_WRITE | - | WRITE パーミッションと BULK_WRITE パーミッションを組み合わせます。 |
9.3.2. ロールマッパー
Data Grid には、サブジェクトのセキュリティープリンシパルをユーザーに割り当てる承認ロールにマップする PrincipalRoleMapper
API が含まれています。
9.3.2.1. クラスターのロールマッパー
ClusterRoleMapper
は永続的にレプリケートされたキャッシュを使用して、デフォルトのロールおよびパーミッションのプリンシパルからロールへのマッピングを動的に保存します。
デフォルトでは、プリンシパル名をロール名として使用し、実行時にロールマッピングを変更するメソッドを公開する org.infinispan.security.MutableRoleMapper
を実装します。
-
Java クラス:
org.infinispan.security.mappers.ClusterRoleMapper
-
宣言型設定:
<cluster-role-mapper />
9.3.2.2. ID ロールマッパー
IdentityRoleMapper
は、プリンシパル名をロール名として使用します。
-
Java クラス:
org.infinispan.security.mappers.IdentityRoleMapper
-
宣言型設定:
<identity-role-mapper />
9.3.2.3. CommonName ロールマッパー
CommonNameRoleMapper
は、プリンシパル名が識別名 (DN) の場合は Common Name (CN) をロール名として使用します。
たとえば、この DN (cn=managers,ou=people,dc=example,dc=com
) は managers
ロールにマッピングします。
-
Java クラス:
org.infinispan.security.mappers.CommonRoleMapper
-
宣言型設定:
<common-name-role-mapper />
9.3.2.4. カスタムロールマッパー
カスタムロールマッパーは org.infinispan.security.PrincipalRoleMapper
の実装です。
-
宣言型設定:
<custom-role-mapper class="my.custom.RoleMapper" />
9.4. アクセス制御リスト (ACL) キャッシュ
Data Grid は、パフォーマンスの最適化のために内部でユーザーに付与するロールをキャッシュします。ロールをユーザーに付与または拒否するたびに、Data Grid は ACL キャッシュをフラッシュして、ユーザーのパーミッションが正しく適用されていることを確認します。
必要に応じて、ACL キャッシュを無効にするか、cache-size
および cache-timeout
属性を使用してこれを設定することができます。
<security cache-size="1000" cache-timeout="300000"> <authorization /> </security>
<security cache-size="1000" cache-timeout="300000">
<authorization />
</security>
9.5. ロールおよびパーミッションのカスタマイズ
Data Grid 設定の認証設定をカスタマイズして、異なるロールとパーミッションの組み合わせでロールマッパーを使用できます。
手順
-
infinispan.xml
設定を開いて編集します。 -
ロールマッパーとロールおよびパーミッションのセットを宣言して、
cache-container
の承認を設定します。 - ユーザーロールに基づいてアクセスを制限するようにキャッシュの承認を設定します。
以下の設定例は、ロールおよびパーミッションでセキュリティー承認を設定する方法を示しています。
<infinispan> <cache-container default-cache="restricted" name="custom-authorization"> <security> <authorization> <!-- Declare a role mapper that associates a security principal to each role. --> <identity-role-mapper /> <!-- Specify user roles and corresponding permissions. --> <role name="admin" permissions="ALL" /> <role name="reader" permissions="READ" /> <role name="writer" permissions="WRITE" /> <role name="supervisor" permissions="READ WRITE EXEC"/> </authorization> </security> <local-cache name="implicit-authorization"> <security> <!-- Inherit roles and permissions from the cache-container. --> <authorization/> </security> </local-cache> <local-cache name="restricted"> <security> <!-- Explicitly define which roles can access the cache. --> <authorization roles="admin supervisor"/> </security> </local-cache> </cache-container> </infinispan>
<infinispan>
<cache-container default-cache="restricted" name="custom-authorization">
<security>
<authorization>
<!-- Declare a role mapper that associates a security principal
to each role. -->
<identity-role-mapper />
<!-- Specify user roles and corresponding permissions. -->
<role name="admin" permissions="ALL" />
<role name="reader" permissions="READ" />
<role name="writer" permissions="WRITE" />
<role name="supervisor" permissions="READ WRITE EXEC"/>
</authorization>
</security>
<local-cache name="implicit-authorization">
<security>
<!-- Inherit roles and permissions from the cache-container. -->
<authorization/>
</security>
</local-cache>
<local-cache name="restricted">
<security>
<!-- Explicitly define which roles can access the cache. -->
<authorization roles="admin supervisor"/>
</security>
</local-cache>
</cache-container>
</infinispan>
9.6. セキュリティー承認の無効化
ローカル開発環境では、ユーザーがロールおよびパーミッションを必要としないように、承認を無効にできます。セキュリティー承認を無効にすると、すべてのユーザーがデータにアクセスでき、Data Grid リソースと対話できます。
手順
-
infinispan.xml
設定を開いて編集します。 -
cache-container
および各キャッシュ設定のsecurity
設定から、authorization
要素をすべて削除します。
9.7. クライアント証明書を使用した承認の設定
クライアント証明書認証を有効にすると、クライアント設定で Data Grid ユーザー認証情報を指定する必要がなくなります。つまり、ロールをクライアント証明書の Common Name (CN) フィールドに関連付ける必要があります。
前提条件
- クライアントに、公開証明書または証明書チェーンの一部 (通常は公開 CA 証明書) のいずれかが含まれる Java キーストアを提供します。
- クライアント証明書認証を実行するように Data Grid Server を設定します。
手順
-
セキュリティー承認設定で
common-name-role-mapper
を有効にします。 クライアント証明書から Common Name (
CN
) に、適切な権限を持つロールを割り当てます。<cache-container name="certificate-authentication" statistics="true"> <security> <authorization> <!-- Declare a role mapper that associates the common name (CN) field in client certificate trust stores with authorization roles. --> <common-name-role-mapper/> <!-- In this example, if a client certificate contains `CN=Client1` then clients with matching certificates get ALL permissions. --> <role name="Client1" permissions="ALL"/> </authorization> </security> </cache-container>
<cache-container name="certificate-authentication" statistics="true"> <security> <authorization> <!-- Declare a role mapper that associates the common name (CN) field in client certificate trust stores with authorization roles. --> <common-name-role-mapper/> <!-- In this example, if a client certificate contains `CN=Client1` then clients with matching certificates get ALL permissions. --> <role name="Client1" permissions="ALL"/> </authorization> </security> </cache-container>
Copy to Clipboard Copied!
第10章 Setting Up Data Grid Clusters
Data Grid には、ノードがクラスターに自動的に参加および離脱できるように、トランスポート層が必要です。また、トランスポート層により、Data Grid ノードはネットワーク上でデータを複製または分散し、リバランスや状態遷移などの操作を実施することができます。
10.1. デフォルトの JGroups スタック
Data Grid は、infinispan-core-12.1.11.Final-redhat-00001.jar
ファイル内の default-configs
ディレクトリーに、デフォルトの JGroups スタックファイル default-jgroups-*.xml
を提供します。
この JAR ファイルは $RHDG_HOME/lib
ディレクトリーにあります。
File name | スタック名 | 説明 |
---|---|---|
|
| トランスポートに UDP を使用し、検出に UDP マルチキャストを使用します。(100 ノードを超える) 大規模なクラスター、またはレプリケートされたキャッシュまたは無効化モードを使用している場合に適しています。オープンソケットの数を最小限に抑えます。 |
|
|
トランスポートには TCP を使用し、検出には |
|
|
トランスポートに TCP を使用し、検出に |
|
|
トランスポートに TCP を使用し、検出に |
|
|
トランスポートに TCP を使用し、検出に |
|
|
トランスポートに TCP を使用し、検出に |
10.2. クラスター検出プロトコル
Data Grid は、ノードがネットワーク上でお互いを自動的に見つけてクラスターを形成できるようにするさまざまなプロトコルをサポートしています。
Data Grid が使用できる 2 種類の検出メカニズムがあります。
- ほとんどのネットワークで機能する汎用検出プロトコルで、外部サービスに依存しません。
-
Data Grid クラスターのトポロジー情報を保存し、取得するために外部サービスに依存する検出プロトコル。
たとえば、DNS_PING プロトコルは DNS サーバーレコードで検出を実行します。
ホスト型プラットフォームで Data Grid を実行するには、個別のクラウドプロバイダーが課すネットワーク制約に適合する検出メカニズムを使用する必要があります。
10.2.1. PING
PING または UDPPING は、UDP プロトコルで動的なマルチキャストを使用する一般的な JGroups 検出メカニズムです。
結合時に、ノードは IP マルチキャストアドレスに PING 要求を送信し、Data Grid クラスターにある他のノードを検出します。各ノードは、コーディネーターノードのアドレスとその独自のアドレスが含まれるパケットで PING リクエストに応答します。C はコーディネーターのアドレスで、A は自分のアドレスです。ノードが PING 要求に応答すると、結合ノードは新しいクラスターのコーディネーターノードになります。
PING 設定の例
<PING num_discovery_runs="3"/>
<PING num_discovery_runs="3"/>
10.2.2. TCPPING
TCPPING は、クラスターメンバーの静的アドレスリストを使用する汎用 JGroups 検索メカニズムです。
TCPPING を使用すると、ノードが相互に動的に検出できるようにするのではなく、JGroups スタックの一部として Data Grid クラスター内の各ノードの IP アドレスまたはホスト名を手動で指定します。
TCPPING 設定の例
<TCP bind_port="7800" /> <TCPPING timeout="3000" initial_hosts="${jgroups.tcpping.initial_hosts:hostname1[port1],hostname2[port2]}" port_range="0" num_initial_members="3"/>
<TCP bind_port="7800" />
<TCPPING timeout="3000"
initial_hosts="${jgroups.tcpping.initial_hosts:hostname1[port1],hostname2[port2]}"
port_range="0"
num_initial_members="3"/>
10.2.3. MPING
MPING は IP マルチキャストを使用して Data Grid クラスターの初期メンバーシップを検出します。
MPING を使用して TCPPING 検出を TCP スタックに置き換え、初期ホストの静的リストの代わりに、検出にマルチキャストを使用できます。ただし、UDP スタックで MPING を使用することもできます。
MPING 設定の例
<MPING mcast_addr="${jgroups.mcast_addr:228.6.7.8}" mcast_port="${jgroups.mcast_port:46655}" num_discovery_runs="3" ip_ttl="${jgroups.udp.ip_ttl:2}"/>
<MPING mcast_addr="${jgroups.mcast_addr:228.6.7.8}"
mcast_port="${jgroups.mcast_port:46655}"
num_discovery_runs="3"
ip_ttl="${jgroups.udp.ip_ttl:2}"/>
10.2.4. TCPGOSSIP
gossip ルーターは、Data Grid クラスターが他のノードのアドレスを取得できるネットワーク上の集中的な場所を提供します。
以下のように、Gosssip ルーターのアドレス (IP:PORT
) を Data Grid ノードに挿入します。
-
このアドレスをシステムプロパティーとして JVM に渡します (例:
-DGossipRouterAddress="10.10.2.4[12001]"
)。 - JGroups 設定ファイルのそのシステムプロパティーを参照します。
Gossip ルーター設定の例
<TCP bind_port="7800" /> <TCPGOSSIP timeout="3000" initial_hosts="${GossipRouterAddress}" num_initial_members="3" />
<TCP bind_port="7800" />
<TCPGOSSIP timeout="3000"
initial_hosts="${GossipRouterAddress}"
num_initial_members="3" />
10.2.5. JDBC_PING
JDBC_PING は共有データベースを使用して Data Grid クラスターに関する情報を保存します。このプロトコルは、JDBC 接続を使用できるすべてのデータベースをサポートします。
ノードは IP アドレスを共有データベースに書き込むため、ノードに結合してネットワーク上の Data Grid クラスターを検索できます。ノードが Data Grid クラスターから離脱すると、そのノードの IP アドレスが共有データベースから削除されます。
JDBC_PING 設定の例
<JDBC_PING connection_url="jdbc:mysql://localhost:3306/database_name" connection_username="user" connection_password="password" connection_driver="com.mysql.jdbc.Driver"/>
<JDBC_PING connection_url="jdbc:mysql://localhost:3306/database_name"
connection_username="user"
connection_password="password"
connection_driver="com.mysql.jdbc.Driver"/>
適切な JDBC ドライバーをクラスパスに追加して、Data Grid が JDBC_PING を使用できるようにします。
10.2.6. DNS_PING
JGroups DNS_PING は DNS サーバーをクエリーし、OKD や Red Hat OpenShift などの Kubernetes 環境で Data Grid クラスターメンバーを検出します。
DNS_PING 設定の例
<dns.DNS_PING dns_query="myservice.myproject.svc.cluster.local" />
<dns.DNS_PING dns_query="myservice.myproject.svc.cluster.local" />
10.2.7. Cloud Discovery プロトコル
Data Grid には、クラウドプロバイダーに固有の検出プロトコル実装を使用するデフォルトの JGroups スタックが含まれています。
検出プロトコル | デフォルトのスタックファイル | アーティファクト | バージョン |
---|---|---|---|
|
|
|
|
|
|
|
|
|
|
|
|
Cloud Discovery プロトコルの依存関係の提供
NATIVE_S3_PING
、GOOGLE_PING2
、または AZURE_PING
の Cloud Discovery プロトコルを使用するには、依存するライブラリーを Data Grid に提供する必要があります。
手順
- アーティファクト JAR ファイルとすべての依存関係をダウンロードします。
アーティファクト JAR ファイルとすべての依存関係を、Data Grid Server インストールの
$RHDG_HOME/server/lib
ディレクトリーに追加します。詳細は、Downloading artifacts for JGroups cloud discover protocols for Data Grid Server(Red Hat ナレッジベースの記事) を参照してください。
続いて、JGroups スタックファイルの一部として、またはシステムプロパティーを使用して、クラウド検出プロトコルを設定できます。
10.3. デフォルトの JGroups スタックの使用
Data Grid は JGroups プロトコルスタックを使用するため、ノードは専用のクラスターチャネルに相互に送信できるようにします。
Data Grid は、UDP
プロトコルおよび TCP
プロトコルに事前設定された JGroups スタックを提供します。これらのデフォルトスタックは、ネットワーク要件向けに最適化されたカスタムクラスタートランスポート設定を構築する際の開始点として使用することができます。
手順
デフォルトの JGroups スタックの 1 つを使用するには、以下のいずれかを行います。
infinispan.xml
ファイルのstack
属性を使用します。<infinispan> <cache-container default-cache="replicatedCache"> <!-- Use the default UDP stack for cluster transport. --> <transport cluster="${infinispan.cluster.name}" stack="udp" node-name="${infinispan.node.name:}"/> </cache-container> </infinispan>
<infinispan> <cache-container default-cache="replicatedCache"> <!-- Use the default UDP stack for cluster transport. --> <transport cluster="${infinispan.cluster.name}" stack="udp" node-name="${infinispan.node.name:}"/> </cache-container> </infinispan>
Copy to Clipboard Copied! Data Grid Server の起動時に、
cluster-stack
引数を使用して JGroups スタックファイルを設定します。bin/server.sh --cluster-stack=udp
$ bin/server.sh --cluster-stack=udp
Copy to Clipboard Copied!
検証
Data Grid は、以下のメッセージをログに記録して、使用するスタックを示します。
[org.infinispan.CLUSTER] ISPN000078: Starting JGroups channel cluster with stack udp
[org.infinispan.CLUSTER] ISPN000078: Starting JGroups channel cluster with stack udp
10.4. JGroups スタックのカスタマイズ
プロパティーを調整してチューニングし、ネットワーク要件に対応するクラスタートランスポート設定を作成します。
Data Grid は、設定を容易にするためにデフォルトの JGroups スタックを拡張する属性を提供します。他のプロパティーを組み合わせてデフォルトスタックからプロパティーの継承、削除、置き換えを行うことができます。
手順
-
infinispan.xml
ファイルに新しい JGroups スタック宣言を作成します。 -
extends
属性を追加し、プロパティーを継承する JGroups スタックを指定します。 -
stack.combine
属性を使用して、継承されたスタックに設定されたプロトコルのプロパティーを変更します。 -
stack.position
属性を使用して、カスタムスタックの場所を定義します。 スタック名を
transport
設定のstack
属性の値として指定します。たとえば、以下のようにデフォルトの TCP スタックで Gosssip ルーターと対称暗号化を使用して評価できます。
<infinispan> <jgroups> <!-- Creates a custom JGroups stack named "my-stack". --> <!-- Inherits properties from the default TCP stack. --> <stack name="my-stack" extends="tcp"> <!-- Uses TCPGOSSIP as the discovery mechanism instead of MPING --> <TCPGOSSIP initial_hosts="${jgroups.tunnel.gossip_router_hosts:localhost[12001]}" stack.combine="REPLACE" stack.position="MPING" /> <!-- Removes the FD_SOCK protocol from the stack. --> <FD_SOCK stack.combine="REMOVE"/> <!-- Modifies the timeout value for the VERIFY_SUSPECT protocol. --> <VERIFY_SUSPECT timeout="2000"/> <!-- Adds SYM_ENCRYPT to the stack after VERIFY_SUSPECT. --> <SYM_ENCRYPT sym_algorithm="AES" keystore_name="mykeystore.p12" keystore_type="PKCS12" store_password="changeit" key_password="changeit" alias="myKey" stack.combine="INSERT_AFTER" stack.position="VERIFY_SUSPECT" /> </stack> <cache-container name="default" statistics="true"> <!-- Uses "my-stack" for cluster transport. --> <transport cluster="${infinispan.cluster.name}" stack="my-stack" node-name="${infinispan.node.name:}"/> </cache-container> </jgroups> </infinispan>
<infinispan> <jgroups> <!-- Creates a custom JGroups stack named "my-stack". --> <!-- Inherits properties from the default TCP stack. --> <stack name="my-stack" extends="tcp"> <!-- Uses TCPGOSSIP as the discovery mechanism instead of MPING --> <TCPGOSSIP initial_hosts="${jgroups.tunnel.gossip_router_hosts:localhost[12001]}" stack.combine="REPLACE" stack.position="MPING" /> <!-- Removes the FD_SOCK protocol from the stack. --> <FD_SOCK stack.combine="REMOVE"/> <!-- Modifies the timeout value for the VERIFY_SUSPECT protocol. --> <VERIFY_SUSPECT timeout="2000"/> <!-- Adds SYM_ENCRYPT to the stack after VERIFY_SUSPECT. --> <SYM_ENCRYPT sym_algorithm="AES" keystore_name="mykeystore.p12" keystore_type="PKCS12" store_password="changeit" key_password="changeit" alias="myKey" stack.combine="INSERT_AFTER" stack.position="VERIFY_SUSPECT" /> </stack> <cache-container name="default" statistics="true"> <!-- Uses "my-stack" for cluster transport. --> <transport cluster="${infinispan.cluster.name}" stack="my-stack" node-name="${infinispan.node.name:}"/> </cache-container> </jgroups> </infinispan>
Copy to Clipboard Copied! Data Grid ログをチェックして、スタックを使用していることを確認します。
[org.infinispan.CLUSTER] ISPN000078: Starting JGroups channel cluster with stack my-stack
[org.infinispan.CLUSTER] ISPN000078: Starting JGroups channel cluster with stack my-stack
Copy to Clipboard Copied!
参照資料
- JGroups cluster transport configuration for Data Grid 8.x (Red Hat ナレッジベースの記事)
10.4.1. 継承属性
JGroups スタックを拡張すると、継承属性により、拡張しているスタックでプロトコルやプロパティーを調整できます。
-
stack.position
は、変更するプロトコルを指定します。 stack.combine
は、次の値を使用して JGroups スタックを拡張します。値 説明 COMBINE
プロトコルプロパティーをオーバーライドします。
REPLACE
プロトコルを置き換えます。
INSERT_AFTER
別のプロトコルの後にプロトコルをスタックに追加します。挿入ポイントとして指定するプロトコルには影響しません。
JGroups スタックのプロトコルは、スタック内の場所を基にして相互に影響します。
NAKACK2
がセキュリティーで保護されるように、たとえば、SYM_ENCRYPT
プロトコルまたはASYM_ENCRYPT
プロトコル後にNAKACK2
などのプロトコルを置く必要があります。INSERT_BEFORE
別のプロトコルの前にプロトコルをスタックに挿入します。挿入ポイントとして指定するプロトコルに影響します。
REMOVE
スタックからプロトコルを削除します。
10.5. JGroups システムプロパティーの使用
起動時にシステムプロパティーを Data Grid に渡して、クラスターのトランスポートを調整します。
手順
-
-D<property-name>=<property-value>
引数を使用して JGroups システムプロパティーを必要に応じて設定します。
たとえば、以下のようにカスタムバインドポートと IP アドレスを設定します。
bin/server.sh -Djgroups.bind.port=1234 -Djgroups.bind.address=192.0.2.0
$ bin/server.sh -Djgroups.bind.port=1234 -Djgroups.bind.address=192.0.2.0
10.5.1. クラスタートランスポートプロパティー
以下のプロパティーを使用して JGroups クラスタートランスポートをカスタマイズします。
システムプロパティー | 説明 | Default Value | 必須/オプション |
---|---|---|---|
| クラスタートランスポートのバインドアドレス。 |
| オプション |
| ソケットのバインドポート。 |
| オプション |
| マルチキャストの IP アドレス (検出およびクラスター間の通信の両方)。IP アドレスは、IP マルチキャストに適した有効なクラス D アドレスである必要があります。 |
| オプション |
| マルチキャストソケットのポート。 |
| オプション |
| IP マルチキャストパケットの Time-to-live (TTL)この値は、パケットが破棄される前にパケットが作成できるネットワークホップの数を定義します。 | 2 | オプション |
| スレッドプールの最小スレッド数 | 0 | オプション |
| スレッドプールの最大スレッド数 | 200 | オプション |
| 結合リクエストが正常に実行されるまで待機する最大時間 (ミリ秒単位)。 | 2000 | オプション |
| スレッドダンプがログに記録される前にスレッドプールが満杯である必要がある回数。 | 10000 | オプション |
10.5.2. Cloud Discovery プロトコルのシステムプロパティー
以下のプロパティーを使用して、ホストされたプラットフォームの JGroups 検出プロトコルを設定します。
10.5.2.1. Amazon EC2
NATIVE_S3_PING
を設定するためのシステムプロパティー。
システムプロパティー | 説明 | Default Value | 必須/オプション |
---|---|---|---|
| Amazon S3 リージョンの名前。 | デフォルト値はありません。 | オプション |
| Amazon S3 バケットの名前。名前は存在し、一意でなければなりません。 | デフォルト値はありません。 | オプション |
10.5.2.2. Google Cloud Platform
GOOGLE_PING2
を設定するためのシステムプロパティー。
システムプロパティー | 説明 | Default Value | 必須/オプション |
---|---|---|---|
| Google Compute Engine バケットの名前。名前は存在し、一意でなければなりません。 | デフォルト値はありません。 | 必須 |
10.5.2.3. Azure
AZURE_PING
のシステムプロパティー。
システムプロパティー | 説明 | Default Value | 必須/オプション |
---|---|---|---|
| Azure ストレージアカウントの名前。名前は存在し、一意でなければなりません。 | デフォルト値はありません。 | 必須 |
| Azure ストレージアクセスキーの名前。 | デフォルト値はありません。 | 必須 |
| ping 情報を格納するコンテナーの有効な DNS 名。 | デフォルト値はありません。 | 必須 |
10.5.2.4. OpenShift
DNS_PING
のシステムプロパティー。
システムプロパティー | 説明 | Default Value | 必須/オプション |
---|---|---|---|
| クラスターメンバーを返す DNS レコードを設定します。 | デフォルト値はありません。 | 必須 |
10.6. インライン JGroups スタックの使用
完全な JGroups スタックの定義を infinispan.xml
ファイルに挿入することができます。
手順
カスタム JGroups スタック宣言を
infinispan.xml
ファイルに埋め込みます。<infinispan> <!-- Contains one or more JGroups stack definitions. --> <jgroups> <!-- Defines a custom JGroups stack named "prod". --> <stack name="prod"> <TCP bind_port="7800" port_range="30" recv_buf_size="20000000" send_buf_size="640000"/> <MPING break_on_coord_rsp="true" mcast_addr="${jgroups.mping.mcast_addr:228.2.4.6}" mcast_port="${jgroups.mping.mcast_port:43366}" num_discovery_runs="3" ip_ttl="${jgroups.udp.ip_ttl:2}"/> <MERGE3 /> <FD_SOCK /> <FD_ALL timeout="3000" interval="1000" timeout_check_interval="1000" /> <VERIFY_SUSPECT timeout="1000" /> <pbcast.NAKACK2 use_mcast_xmit="false" xmit_interval="100" xmit_table_num_rows="50" xmit_table_msgs_per_row="1024" xmit_table_max_compaction_time="30000" /> <UNICAST3 xmit_interval="100" xmit_table_num_rows="50" xmit_table_msgs_per_row="1024" xmit_table_max_compaction_time="30000" /> <pbcast.STABLE stability_delay="200" desired_avg_gossip="2000" max_bytes="1M" /> <pbcast.GMS print_local_addr="false" join_timeout="${jgroups.join_timeout:2000}" /> <UFC max_credits="4m" min_threshold="0.40" /> <MFC max_credits="4m" min_threshold="0.40" /> <FRAG3 /> </stack> </jgroups> <cache-container default-cache="replicatedCache"> <!-- Uses "prod" for cluster transport. --> <transport cluster="${infinispan.cluster.name}" stack="prod" node-name="${infinispan.node.name:}"/> </cache-container> </infinispan>
<infinispan> <!-- Contains one or more JGroups stack definitions. --> <jgroups> <!-- Defines a custom JGroups stack named "prod". --> <stack name="prod"> <TCP bind_port="7800" port_range="30" recv_buf_size="20000000" send_buf_size="640000"/> <MPING break_on_coord_rsp="true" mcast_addr="${jgroups.mping.mcast_addr:228.2.4.6}" mcast_port="${jgroups.mping.mcast_port:43366}" num_discovery_runs="3" ip_ttl="${jgroups.udp.ip_ttl:2}"/> <MERGE3 /> <FD_SOCK /> <FD_ALL timeout="3000" interval="1000" timeout_check_interval="1000" /> <VERIFY_SUSPECT timeout="1000" /> <pbcast.NAKACK2 use_mcast_xmit="false" xmit_interval="100" xmit_table_num_rows="50" xmit_table_msgs_per_row="1024" xmit_table_max_compaction_time="30000" /> <UNICAST3 xmit_interval="100" xmit_table_num_rows="50" xmit_table_msgs_per_row="1024" xmit_table_max_compaction_time="30000" /> <pbcast.STABLE stability_delay="200" desired_avg_gossip="2000" max_bytes="1M" /> <pbcast.GMS print_local_addr="false" join_timeout="${jgroups.join_timeout:2000}" /> <UFC max_credits="4m" min_threshold="0.40" /> <MFC max_credits="4m" min_threshold="0.40" /> <FRAG3 /> </stack> </jgroups> <cache-container default-cache="replicatedCache"> <!-- Uses "prod" for cluster transport. --> <transport cluster="${infinispan.cluster.name}" stack="prod" node-name="${infinispan.node.name:}"/> </cache-container> </infinispan>
Copy to Clipboard Copied!
10.7. 外部 JGroups スタックの使用
infinispan.xml
ファイルでカスタム JGroups スタックを定義する外部ファイルを参照します。
手順
カスタム JGroups スタックファイルを
$RHDG_HOME/server/conf
ディレクトリーに追加します。または、外部スタックファイルを宣言する際に絶対パスを指定することもできます。
stack-file
要素を使用して、外部スタックファイルを参照します。<infinispan> <jgroups> <!-- Creates a "prod-tcp" stack that references an external file. --> <stack-file name="prod-tcp" path="prod-jgroups-tcp.xml"/> </jgroups> <cache-container default-cache="replicatedCache"> <!-- Use the "prod-tcp" stack for cluster transport. --> <transport stack="prod-tcp" /> <replicated-cache name="replicatedCache"/> </cache-container> <!-- Cache configuration goes here. --> </infinispan>
<infinispan> <jgroups> <!-- Creates a "prod-tcp" stack that references an external file. --> <stack-file name="prod-tcp" path="prod-jgroups-tcp.xml"/> </jgroups> <cache-container default-cache="replicatedCache"> <!-- Use the "prod-tcp" stack for cluster transport. --> <transport stack="prod-tcp" /> <replicated-cache name="replicatedCache"/> </cache-container> <!-- Cache configuration goes here. --> </infinispan>
Copy to Clipboard Copied!
10.8. クラスタートランスポートの暗号化
ノードが暗号化されたメッセージと通信できるように、クラスタートランスポートを保護します。また、有効なアイデンティティーを持つノードのみが参加できるように、証明書認証を実行するように Data Grid クラスターを設定することもできます。
10.8.1. Data Grid クラスターのセキュリティー
クラスタートラフィックのセキュリティーを保護するには、Data Grid ノードを設定し、シークレットキーで JGroups メッセージペイロードを暗号化します。
Data Grid ノードは、以下のいずれかから秘密鍵を取得できます。
- コーディネーターノード (非対称暗号化)
- 共有キーストア (対称暗号化)
コーディネーターノードからの秘密鍵の取得
非対称暗号化は、Data Grid 設定の JGroups スタックに ASYM_ENCRYPT
プロトコルを追加して対称暗号化を設定します。これにより、Data Grid クラスターはシークレットキーを生成して配布できます。
非対称暗号化を使用する場合は、ノードが証明書認証を実行し、シークレットキーを安全に交換できるようにキーストアを提供する必要もあります。これにより、中間者 (MitM) 攻撃からクラスターが保護されます。
非対称暗号化は、以下のようにクラスタートラフィックのセキュリティーを保護します。
- Data Grid クラスターの最初のノードであるコーディネーターノードは、秘密鍵を生成します。
- 参加ノードは、コーディネーターとの証明書認証を実行して、相互に ID を検証します。
- 参加ノードは、コーディネーターノードに秘密鍵を要求します。その要求には、参加ノードの公開鍵が含まれています。
- コーディネーターノードは、秘密鍵を公開鍵で暗号化し、参加ノードに返します。
- 参加ノードは秘密鍵を復号してインストールします。
- ノードはクラスターに参加し、秘密鍵でメッセージを暗号化および復号化します。
共有キーストアからの秘密鍵の取得
対称暗号化は、Data Grid 設定の JGroups スタックに SYM_ENCRYPT
プロトコルを追加して対称暗号化を設定します。これにより、Data Grid クラスターは、指定したキーストアから秘密鍵を取得できます。
- ノードは、起動時に Data Grid クラスパスのキーストアから秘密鍵をインストールします。
- ノードはクラスターに参加し、秘密鍵でメッセージを暗号化および復号化します。
非対称暗号化と対称暗号化の比較
証明書認証を持つ ASYM_ENCRYPT
は、SYM_ENCRYPT
と比較して、暗号化の追加の層を提供します。秘密鍵のコーディネーターノードへのリクエストを暗号化するキーストアを提供します。Data Grid は、そのシークレットキーを自動的に生成し、クラスタートラフィックを処理し、秘密鍵の生成時に指定します。たとえば、ノードが離れる場合に新規のシークレットキーを生成するようにクラスターを設定できます。これにより、ノードが証明書認証を回避して古いキーで参加できなくなります。
一方、SYM_ENCRYPT
は ASYM_ENCRYPT
よりも高速です。ノードがクラスターコーディネーターとキーを交換する必要がないためです。SYM_ENCRYPT
への潜在的な欠点は、クラスターのメンバーシップの変更時に新規シークレットキーを自動的に生成するための設定がないことです。ユーザーは、ノードがクラスタートラフィックを暗号化するのに使用するシークレットキーを生成して配布する必要があります。
10.8.2. 非対称暗号化を使用したクラスタートランスポートの設定
Data Grid クラスターを設定し、JGroups メッセージを暗号化するシークレットキーを生成して配布します。
手順
- Data Grid がノードの ID を検証できるようにする証明書チェーンでキーストアを作成します。
クラスター内の各ノードのクラスパスにキーストアを配置します。
Data Grid Server の場合は、$RHDG_HOME ディレクトリーにキーストアを配置します。
以下の例のように、
SSL_KEY_EXCHANGE
プロトコルおよびASYM_ENCRYPT
プロトコルを Data Grid 設定の JGroups スタックに追加します。<infinispan> <jgroups> <!-- Creates a secure JGroups stack named "encrypt-tcp" that extends the default TCP stack. --> <stack name="encrypt-tcp" extends="tcp"> <!-- Adds a keystore that nodes use to perform certificate authentication. --> <!-- Uses the stack.combine and stack.position attributes to insert SSL_KEY_EXCHANGE into the default TCP stack after VERIFY_SUSPECT. --> <SSL_KEY_EXCHANGE keystore_name="mykeystore.jks" keystore_password="changeit" stack.combine="INSERT_AFTER" stack.position="VERIFY_SUSPECT"/> <!-- Configures ASYM_ENCRYPT --> <!-- Uses the stack.combine and stack.position attributes to insert ASYM_ENCRYPT into the default TCP stack before pbcast.NAKACK2. --> <!-- The use_external_key_exchange = "true" attribute configures nodes to use the `SSL_KEY_EXCHANGE` protocol for certificate authentication. --> <ASYM_ENCRYPT asym_keylength="2048" asym_algorithm="RSA" change_key_on_coord_leave = "false" change_key_on_leave = "false" use_external_key_exchange = "true" stack.combine="INSERT_BEFORE" stack.position="pbcast.NAKACK2"/> </stack> </jgroups> <cache-container name="default" statistics="true"> <!-- Configures the cluster to use the JGroups stack. --> <transport cluster="${infinispan.cluster.name}" stack="encrypt-tcp" node-name="${infinispan.node.name:}"/> </cache-container> </infinispan>
<infinispan> <jgroups> <!-- Creates a secure JGroups stack named "encrypt-tcp" that extends the default TCP stack. --> <stack name="encrypt-tcp" extends="tcp"> <!-- Adds a keystore that nodes use to perform certificate authentication. --> <!-- Uses the stack.combine and stack.position attributes to insert SSL_KEY_EXCHANGE into the default TCP stack after VERIFY_SUSPECT. --> <SSL_KEY_EXCHANGE keystore_name="mykeystore.jks" keystore_password="changeit" stack.combine="INSERT_AFTER" stack.position="VERIFY_SUSPECT"/> <!-- Configures ASYM_ENCRYPT --> <!-- Uses the stack.combine and stack.position attributes to insert ASYM_ENCRYPT into the default TCP stack before pbcast.NAKACK2. --> <!-- The use_external_key_exchange = "true" attribute configures nodes to use the `SSL_KEY_EXCHANGE` protocol for certificate authentication. --> <ASYM_ENCRYPT asym_keylength="2048" asym_algorithm="RSA" change_key_on_coord_leave = "false" change_key_on_leave = "false" use_external_key_exchange = "true" stack.combine="INSERT_BEFORE" stack.position="pbcast.NAKACK2"/> </stack> </jgroups> <cache-container name="default" statistics="true"> <!-- Configures the cluster to use the JGroups stack. --> <transport cluster="${infinispan.cluster.name}" stack="encrypt-tcp" node-name="${infinispan.node.name:}"/> </cache-container> </infinispan>
Copy to Clipboard Copied!
検証
Data Grid クラスターを起動した際、以下のログメッセージは、クラスターがセキュアな JGroups スタックを使用していることを示しています。
[org.infinispan.CLUSTER] ISPN000078: Starting JGroups channel cluster with stack <encrypted_stack_name>
[org.infinispan.CLUSTER] ISPN000078: Starting JGroups channel cluster with stack <encrypted_stack_name>
Data Grid ノードは ASYM_ENCRYPT
を使用している場合のみクラスターに参加でき、コーディネーターノードからシークレットキーを取得できます。それ以外の場合は、次のメッセージが Data Grid ログに書き込まれます。
[org.jgroups.protocols.ASYM_ENCRYPT] <hostname>: received message without encrypt header from <hostname>; dropping it
[org.jgroups.protocols.ASYM_ENCRYPT] <hostname>: received message without encrypt header from <hostname>; dropping it
参照資料
この手順の ASYM_ENCRYPT
の設定例は、一般的に使用されるパラメーターを示しています。利用可能なパラメーターの完全なセットについては、JGroups のドキュメントを参照してください。
10.8.3. 対称暗号化を使用したクラスタートランスポートの設定
指定したキーストアからの秘密鍵を使用して JGroups メッセージを暗号化するように Data Grid クラスターを設定します。
手順
- シークレットキーが含まれるキーストアを作成します。
クラスター内の各ノードのクラスパスにキーストアを配置します。
Data Grid Server の場合は、$RHDG_HOME ディレクトリーにキーストアを配置します。
-
Data Grid 設定の JGroups スタックに
SYM_ENCRYPT
プロトコルを追加します。
<infinispan> <jgroups> <!-- Creates a secure JGroups stack named "encrypt-tcp" that extends the default TCP stack. --> <stack name="encrypt-tcp" extends="tcp"> <!-- Adds a keystore from which nodes obtain secret keys. --> <!-- Uses the stack.combine and stack.position attributes to insert SYM_ENCRYPT into the default TCP stack after VERIFY_SUSPECT. --> <SYM_ENCRYPT keystore_name="myKeystore.p12" keystore_type="PKCS12" store_password="changeit" key_password="changeit" alias="myKey" stack.combine="INSERT_AFTER" stack.position="VERIFY_SUSPECT"/> </stack> </jgroups> <cache-container name="default" statistics="true"> <!-- Configures the cluster to use the JGroups stack. --> <transport cluster="${infinispan.cluster.name}" stack="encrypt-tcp" node-name="${infinispan.node.name:}"/> </cache-container> </infinispan>
<infinispan>
<jgroups>
<!-- Creates a secure JGroups stack named "encrypt-tcp" that extends the default TCP stack. -->
<stack name="encrypt-tcp" extends="tcp">
<!-- Adds a keystore from which nodes obtain secret keys. -->
<!-- Uses the stack.combine and stack.position attributes to insert SYM_ENCRYPT into the default TCP stack after VERIFY_SUSPECT. -->
<SYM_ENCRYPT keystore_name="myKeystore.p12"
keystore_type="PKCS12"
store_password="changeit"
key_password="changeit"
alias="myKey"
stack.combine="INSERT_AFTER"
stack.position="VERIFY_SUSPECT"/>
</stack>
</jgroups>
<cache-container name="default" statistics="true">
<!-- Configures the cluster to use the JGroups stack. -->
<transport cluster="${infinispan.cluster.name}"
stack="encrypt-tcp"
node-name="${infinispan.node.name:}"/>
</cache-container>
</infinispan>
検証
Data Grid クラスターを起動した際、以下のログメッセージは、クラスターがセキュアな JGroups スタックを使用していることを示しています。
[org.infinispan.CLUSTER] ISPN000078: Starting JGroups channel cluster with stack <encrypted_stack_name>
[org.infinispan.CLUSTER] ISPN000078: Starting JGroups channel cluster with stack <encrypted_stack_name>
Data Grid ノードは、SYM_ENCRYPT
を使用し、共有キーストアからシークレットキーを取得できる場合に限りクラスターに参加できます。それ以外の場合は、次のメッセージが Data Grid ログに書き込まれます。
[org.jgroups.protocols.SYM_ENCRYPT] <hostname>: received message without encrypt header from <hostname>; dropping it
[org.jgroups.protocols.SYM_ENCRYPT] <hostname>: received message without encrypt header from <hostname>; dropping it
参照資料
この手順の SYM_ENCRYPT
の設定例は、一般的に使用されるパラメーターを示しています。利用可能なパラメーターの完全なセットについては、JGroups のドキュメントを参照してください。
10.9. クラスタートラフィックの TCP および UDP ポート
Data Grid は、クラスタートランスポートメッセージに以下のポートを使用します。
デフォルトのポート | プロトコル | 説明 |
---|---|---|
| TCP/UDP | JGroups クラスターバインドポート |
| UDP | JGroups マルチキャスト |
クロスサイトレプリケーション
Data Grid は、JGroups RELAY2 プロトコルに以下のポートを使用します。
7900
- OpenShift で実行している Data Grid クラスターの向け。
7800
- ノード間のトラフィックに UDP を使用し、クラスター間のトラフィックに TCP を使用する場合。
7801
- ノード間のトラフィックに TCP を使用し、クラスター間のトラフィックに TCP を使用する場合。
第11章 Data Grid キャッシュのリモート作成
データを格納することができるように、Data Grid Server にキャッシュを追加します。
11.1. Data Grid Server でのキャッシュ設定
キャッシュは、Data Grid Server のデータコンテナーを設定します。
実行時にキャッシュを作成するには、コンソール、コマンドラインインターフェイス (CLI)、Hot Rod エンドポイント、または REST エンドポイントを介して org.infinispan
テンプレートまたはデータグリッド設定に基づく定義を追加します。
ランタイム時にキャッシュを作成する場合、Data Grid Server はクラスター全体でキャッシュ定義を複製します。
infinispan.xml
で直接宣言した設定は、Data Grid クラスター全体で自動的に同期されません。この場合、Ansible や Chef などの設定管理ツールを使用して、設定がクラスター内のすべてのノードに伝播されるようにします。
11.2. デフォルトの Cache Manager
Data Grid Server は、デフォルトの Cache Manager 設定を提供します。Data Grid Server の起動時に、Cache Manager がインスタンス化されるため、実行時にキャッシュをリモートで作成できます。
デフォルトの Cache Manager
<!-- Creates a Cache Manager named "default" and exports metrics. --> <cache-container name="default" statistics="true"> <!-- Adds cluster transport that uses the default JGroups TCP stack. --> <transport cluster="${infinispan.cluster.name:cluster}" stack="${infinispan.cluster.stack:tcp}" node-name="${infinispan.node.name:}"/> </cache-container>
<!-- Creates a Cache Manager named "default" and exports metrics. -->
<cache-container name="default"
statistics="true">
<!-- Adds cluster transport that uses the default JGroups TCP stack. -->
<transport cluster="${infinispan.cluster.name:cluster}"
stack="${infinispan.cluster.stack:tcp}"
node-name="${infinispan.node.name:}"/>
</cache-container>
Cache Manager の検証
Data Grid Server を起動し、ユーザーの認証情報を追加したら、以下のようにコマンドラインインターフェイス (CLI) または REST エンドポイントを使用して、デフォルトの Cache Manager にアクセスできます。
CLI: デフォルトのコンテナーで
describe
コマンドを使用します。[//containers/default]> describe
[//containers/default]> describe
Copy to Clipboard Copied! -
REST: 任意のブラウザーで
<server_hostname>:11222/rest/v2/cache-managers/default/
に移動します。
11.3. Data Grid コンソールを使用したキャッシュの作成
Data Grid コンソールを介して、テンプレートまたは設定ファイルからキャッシュを動的に追加します。
前提条件
ユーザーを作成し、少なくとも 1 つの Data Grid サーバーインスタンスを開始している。
手順
-
任意のブラウザーで
<server_hostname>:11222/console/
に移動します。 - コンソールにログインします。
- Data Container ビューを開きます。
- Create Cache を選択し、テンプレートから、または XML もしくは JSON 形式の Data Grid 設定でキャッシュを追加します。
- Data Container ビューに戻り、Data Grid キャッシュを確認します。
11.4. Data Grid コマンドラインインターフェイス (CLI) を使用したキャッシュの作成
Data Grid CLI を使用して、テンプレートから、または XML もしくは JSON 形式の設定ファイルでキャッシュを追加します。
前提条件
ユーザーを作成し、少なくとも 1 つの Data Grid サーバーインスタンスを開始している。
手順
- Data Grid への CLI 接続を作成します。
create cache
コマンドを使用して、キャッシュ定義を追加します。--file
オプションを使用して、XML または JSON ファイルからキャッシュ定義を追加します。[//containers/default]> create cache --file=configuration.xml mycache
[//containers/default]> create cache --file=configuration.xml mycache
Copy to Clipboard Copied! --template
オプションを使用して、テンプレートからキャッシュ定義を追加します。[//containers/default]> create cache --template=org.infinispan.DIST_SYNC mycache
[//containers/default]> create cache --template=org.infinispan.DIST_SYNC mycache
Copy to Clipboard Copied! ヒント--template=
引数の後に Tab キーを押して、利用可能なキャッシュテンプレートをリスト表示します。
ls
コマンドを使用して、キャッシュが存在することを確認します。[//containers/default]> ls caches mycache
[//containers/default]> ls caches mycache
Copy to Clipboard Copied! describe
コマンドを使用して、キャッシュ設定を取得します。[//containers/default]> describe caches/mycache
[//containers/default]> describe caches/mycache
Copy to Clipboard Copied!
11.5. Hot Rod クライアントでのリモートキャッシュの作成
Hot Rod Java クライアントが存在しないキャッシュにアクセスしようとすると、remoteCacheManager.getCache("myCache")
呼び出しに対して null
を返します。このシナリオを回避するには、キャッシュ設定を使用して最初のアクセス時にキャッシュを作成するように Hot Rod クライアントを設定します。
手順
-
ConfigurationBuilder
でremoteCache()
メソッドを使用するか、hotrod-client.properties
でconfiguration
およびconfiguration_uri
プロパティーを使用します。
ConfigurationBuilder
File file = new File("path/to/infinispan.xml") ConfigurationBuilder builder = new ConfigurationBuilder(); builder.remoteCache("another-cache") .configuration("<distributed-cache name=\"another-cache\"/>"); builder.remoteCache("my.other.cache") .configurationURI(file.toURI());
File file = new File("path/to/infinispan.xml")
ConfigurationBuilder builder = new ConfigurationBuilder();
builder.remoteCache("another-cache")
.configuration("<distributed-cache name=\"another-cache\"/>");
builder.remoteCache("my.other.cache")
.configurationURI(file.toURI());
hotrod-client.properties
infinispan.client.hotrod.cache.another-cache.configuration=<distributed-cache name=\"another-cache\"/> infinispan.client.hotrod.cache.[my.other.cache].configuration_uri=file:///path/to/infinispan.xml
infinispan.client.hotrod.cache.another-cache.configuration=<distributed-cache name=\"another-cache\"/>
infinispan.client.hotrod.cache.[my.other.cache].configuration_uri=file:///path/to/infinispan.xml
hotrod-client.properties
を .
文字が含まれるキャッシュ名と共に使用する場合は、前述の例のように、キャッシュ名を角括弧で囲む必要があります。
また、このような XMLStringConfiguration()
メソッドでキャッシュの設定を追加してから getOrCreateCache()
メソッドを呼び出す次の例のように、他の方法で RemoteCacheManager
API を介してリモートキャッシュを作成することができます。
しかし、Data Grid は、XML の有効性を保証することがより困難になる可能性があり、一般にキャッシュを作成するには厄介な方法であるため、このアプローチを推奨しません。複雑なキャッシュ設定を作成する場合は、それらをプロジェクト内の別々のファイルに保存し、Hot Rod クライアント設定で参照する必要があります。
String cacheName = "CacheWithXMLConfiguration"; String xml = String.format("<distributed-cache name=\"%s\" mode=\"SYNC\">" + "<encoding media-type=\"application/x-protostream\"/>" + "<locking isolation=\"READ_COMMITTED\"/>" + "<transaction mode=\"NON_XA\"/>" + "<expiration lifespan=\"60000\" interval=\"20000\"/>" + "</distributed-cache>" , cacheName); remoteCacheManager.administration().getOrCreateCache(cacheName, new XMLStringConfiguration(xml));
String cacheName = "CacheWithXMLConfiguration";
String xml = String.format("<distributed-cache name=\"%s\" mode=\"SYNC\">" +
"<encoding media-type=\"application/x-protostream\"/>" +
"<locking isolation=\"READ_COMMITTED\"/>" +
"<transaction mode=\"NON_XA\"/>" +
"<expiration lifespan=\"60000\" interval=\"20000\"/>" +
"</distributed-cache>" , cacheName);
remoteCacheManager.administration().getOrCreateCache(cacheName, new XMLStringConfiguration(xml));
Hot Rod コードの例
Hot Rod Java クライアントを使用して、さまざまな方法でリモートキャッシュを作成する方法を説明する Data Grid コードチュートリアルをいくつか試してください。
Data Grid code examples にアクセスします。
11.6. HTTP クライアントを使用した Data Grid キャッシュの作成
適切な HTTP クライアントを使用し、REST エンドポイントを介してキャッシュ定義を Data Grid サーバーに追加します。
前提条件
ユーザーを作成し、少なくとも 1 つの Data Grid サーバーインスタンスを開始している。
手順
-
/rest/v2/caches/$cacheName
へのPOST
要求でキャッシュを作成します。
XML または JSON 設定をリクエストのペイロードに含めることにより、それを使用します。
POST /rest/v2/caches/mycache
POST /rest/v2/caches/mycache
?template=
パラメーターを使用して、org.infinispan
テンプレートからキャッシュを作成します。
POST /rest/v2/caches/mycache?template=org.infinispan.DIST_SYNC
POST /rest/v2/caches/mycache?template=org.infinispan.DIST_SYNC
11.7. キャッシュ設定
キャッシュ設定は、XML または JSON 形式で提供できます。
XML
<distributed-cache name="myCache" mode="SYNC"> <encoding media-type="application/x-protostream"/> <memory max-count="1000000" when-full="REMOVE"/> </distributed-cache>
<distributed-cache name="myCache" mode="SYNC">
<encoding media-type="application/x-protostream"/>
<memory max-count="1000000" when-full="REMOVE"/>
</distributed-cache>
JSON
{ "distributed-cache": { "name": "myCache", "mode": "SYNC", "encoding": { "media-type": "application/x-protostream" }, "memory": { "max-count": 1000000, "when-full": "REMOVE" } } }
{
"distributed-cache": {
"name": "myCache",
"mode": "SYNC",
"encoding": {
"media-type": "application/x-protostream"
},
"memory": {
"max-count": 1000000,
"when-full": "REMOVE"
}
}
}
JSON 形式
JSON 形式のキャッシュ設定は、XML 設定の構造に従う必要があります。* XML 要素が JSON オブジェクトになります。* XML 属性は JSON フィールドになります。
第12章 Data Grid Server データソースの設定
管理データソースを作成して、データベース接続用の接続プールおよびパフォーマンスを最適化します。
データベースコネクションプロパティーを JDBC キャッシュストア設定の一部として指定できます。ただし、これはキャッシュ定義ごとに行う必要がありますが、この場合、設定が複製され、複数の個別の接続プールが作成されてリソースが無駄に消費されます。
共有の管理されたデータソースを使用することで、接続設定とプーリングを一元化して、より効率的に使用することができます。
12.1. JDBC キャッシュストアのデータソース設定
データソースの Data Grid サーバー設定は、2 つのセクションで設定されます。
-
データベースへの接続方法を定義する
connection factory
。 -
接続をプールして再利用する方法を定義する
connection pool
。
<data-sources> <!-- Defines a unique name for the datasource, JNDI name, and enables statistics. --> <data-source name="ds" jndi-name="jdbc/datasource" statistics="true"> <!-- Specifies the JDBC driver that creates connections. --> <connection-factory driver="org.database.Driver" username="db_user" password="secret" url="jdbc:db://database-host:10000/dbname" new-connection-sql="SELECT 1" transaction-isolation="READ_COMMITTED"> <!-- Sets optional JDBC driver-specific connection properties. --> <connection-property name="name">value</connection-property> </connection-factory> <!-- Defines connection pool properties. --> <connection-pool initial-size="1" max-size="10" min-size="3" background-validation="1000" idle-removal="1" blocking-timeout="1000" leak-detection="10000"/> </data-source> </data-sources>
<data-sources>
<!-- Defines a unique name for the datasource, JNDI name, and enables statistics. -->
<data-source name="ds" jndi-name="jdbc/datasource" statistics="true">
<!-- Specifies the JDBC driver that creates connections. -->
<connection-factory driver="org.database.Driver"
username="db_user"
password="secret"
url="jdbc:db://database-host:10000/dbname"
new-connection-sql="SELECT 1"
transaction-isolation="READ_COMMITTED">
<!-- Sets optional JDBC driver-specific connection properties. -->
<connection-property name="name">value</connection-property>
</connection-factory>
<!-- Defines connection pool properties. -->
<connection-pool initial-size="1"
max-size="10"
min-size="3"
background-validation="1000"
idle-removal="1"
blocking-timeout="1000"
leak-detection="10000"/>
</data-source>
</data-sources>
接続プールは、以下のパラメーターを使用して調整できます。
-
initial-size
: プールが保持する必要のある最初の接続数。 -
max-size
: プールの最大接続数。 -
min-size
: プールが保持する必要のある接続の最小数。 -
blocking-timeout
: 例外が発生する前に接続を待機している間にブロックする最大時間 (ミリ秒単位)。新しい接続の作成に非常に長い時間がかかる場合は、これによって例外が出力されることはありません。デフォルトは 0 です。これは、呼び出しが無期限に待機することを意味します。 -
background-validation
: バックグラウンド検証の実行の間隔 (ミリ秒単位)。期間 0 は、この機能が無効化されていることを意味します。 -
validate-on-acquisition
: ミリ秒単位で指定された、この時間より長いアイドル状態の接続は、取得される前に検証されます (フォアグラウンド検証)。期間 0 は、この機能が無効化されていることを意味します。 -
idle-removal
: 削除される前の接続がアイドル状態でなくてはならない時間 (分単位)。 -
leak-detection
: リーク警告の前に接続を保持しなければならない時間 (ミリ秒単位)。
12.2. JDBC キャッシュストアでのデータソースの使用
キャッシュ定義ごとに個別の接続プロパティーを指定する代わりに、JDBC キャッシュストア設定で共有の管理データソースを使用します。
前提条件
Data Grid サーバー設定に JDBC キャッシュストアの管理データソースを作成します。
手順
- 以下の例のように、キャッシュ設定の JDBC キャッシュストア設定でデータソースの JNDI 名を参照します。
<distributed-cache-configuration name="persistent-cache" xmlns:jdbc="urn:infinispan:config:store:jdbc:12.1"> <persistence> <jdbc:string-keyed-jdbc-store> <!-- Specifies the JNDI name that you provided for the datasource connection in the server configuration. --> <jdbc:data-source jndi-url="jdbc/postgres"/> <jdbc:string-keyed-table drop-on-exit="true" create-on-start="true" prefix="TBL"> <jdbc:id-column name="ID" type="VARCHAR(255)"/> <jdbc:data-column name="DATA" type="BYTEA"/> <jdbc:timestamp-column name="TS" type="BIGINT"/> <jdbc:segment-column name="S" type="INT"/> </jdbc:string-keyed-table> </jdbc:string-keyed-jdbc-store> </persistence> </distributed-cache-configuration>
<distributed-cache-configuration name="persistent-cache" xmlns:jdbc="urn:infinispan:config:store:jdbc:12.1">
<persistence>
<jdbc:string-keyed-jdbc-store>
<!-- Specifies the JNDI name that you provided for the datasource connection in the server configuration. -->
<jdbc:data-source jndi-url="jdbc/postgres"/>
<jdbc:string-keyed-table drop-on-exit="true"
create-on-start="true"
prefix="TBL">
<jdbc:id-column name="ID" type="VARCHAR(255)"/>
<jdbc:data-column name="DATA" type="BYTEA"/>
<jdbc:timestamp-column name="TS" type="BIGINT"/>
<jdbc:segment-column name="S" type="INT"/>
</jdbc:string-keyed-table>
</jdbc:string-keyed-jdbc-store>
</persistence>
</distributed-cache-configuration>
12.3. データソースのテスト
データソースへの接続が CLI で正しく機能していることを確認します。
手順
CLI を起動します。
bin/cli.sh
$ bin/cli.sh [disconnected]>
Copy to Clipboard Copied! 全データソースをリスト表示します。
[//containers/default]> server datasource ls
[//containers/default]> server datasource ls
Copy to Clipboard Copied! データソース接続をテストします。
[//containers/default]> server datasource test my-datasource
[//containers/default]> server datasource test my-datasource
Copy to Clipboard Copied!
第13章 サーバー側のタスクをリモートで実行
Data Grid コマンドラインインターフェイス、REST API、または Hot Rod クライアントから呼び出すことができる Data Grid サーバーにタスクを定義して追加します。
カスタム Java クラスとしてタスクを実装するか、JavaScript などの言語でスクリプトを定義することができます。
13.1. サーバータスクの作成
カスタムタスクの実装を作成し、それらを Data Grid サーバーに追加します。
13.1.1. サーバータスク
Data Grid サーバータスクは、org.infinispan.tasks.ServerTask
インターフェイスを拡張するクラスであり、一般的に以下のメソッド呼び出しが含まれます。
setTaskContext()
- タスクパラメーター、タスクが実行されるキャッシュ参照などを含む実行コンテキスト情報へのアクセスを許可します。ほとんどの場合、実装はこの情報をローカルに保存し、タスクが実際に実行したときに使用します。
getName()
- タスクの一意の名前を返します。クライアントはこれらの名前でタスクを呼び出します。
getExecutionMode()
タスクの実行モードを返します。
-
TaskExecutionMode.ONE_NODE
は、要求を処理するノードのみがスクリプトを実行します。ただし、スクリプトはクラスター化された操作を引き続き呼び出すことができます。 -
TaskExecutionMode.ALL_NODES
Data Grid は、クラスター化されたエグゼキューターを使用してノード間でスクリプトを実行します。たとえば、ストリーム処理はすべてのノードに分散されるため、ストリーム処理を呼び出したサーバータスクを 1 つのノードで実行する必要があります。
-
call()
-
結果を計算します。このメソッドは
java.util.concurrent.Callable
インターフェイス内で定義され、サーバータスクにより呼び出されます。
サーバータスクの実装は、サービスローダーパターンの要件に準拠する必要があります。たとえば、実装にはゼロ引数のコンストラクターが必要です。
以下の HelloTask
クラス実装は、1 つのパラメーターを持つタスクの例を提供します。
package example; import org.infinispan.tasks.ServerTask; import org.infinispan.tasks.TaskContext; public class HelloTask implements ServerTask<String> { private TaskContext ctx; @Override public void setTaskContext(TaskContext ctx) { this.ctx = ctx; } @Override public String call() throws Exception { String name = (String) ctx.getParameters().get().get("name"); return "Hello " + name; } @Override public String getName() { return "hello-task"; } }
package example;
import org.infinispan.tasks.ServerTask;
import org.infinispan.tasks.TaskContext;
public class HelloTask implements ServerTask<String> {
private TaskContext ctx;
@Override
public void setTaskContext(TaskContext ctx) {
this.ctx = ctx;
}
@Override
public String call() throws Exception {
String name = (String) ctx.getParameters().get().get("name");
return "Hello " + name;
}
@Override
public String getName() {
return "hello-task";
}
}
13.1.2. サーバータスクの Data Grid サーバーへのデプロイメント
カスタムサーバーのタスククラスを Data Grid サーバーに追加します。
前提条件
実行中の Data Grid サーバーを停止します。Data Grid は、カスタムクラスのランタイムデプロイメントをサポートしません。
手順
以下のように、サーバーのタスクの完全修飾名が含まれる
META-INF/services/org.infinispan.tasks.ServerTask
ファイルを追加します。example.HelloTask
example.HelloTask
Copy to Clipboard Copied! - JAR ファイルでサーバータスクの実装をパッケージ化します。
-
JAR ファイルを Data Grid サーバーの
$RHDG_HOME/server/lib
ディレクトリーにコピーします。 - クラスを Data Grid 設定のデシリアライズ許可リストに追加します。または、システムプロパティーを使用して許可リストを設定します。
13.2. サーバースクリプトの作成
カスタムスクリプトを作成して、Data Grid サーバーに追加します。
13.2.1. サーバースクリプト
Data Grid サーバーのスクリプトは javax.script
API をベースとしており、JVM ベースの ScriptEngine 実装と互換性があります。
Hello World スクリプトの例
以下は、1 つの Data Grid サーバーで実行され、1 つのパラメーターを持ち、JavaScript を使用する簡単な例です。
// mode=local,language=javascript,parameters=[greetee] "Hello " + greetee
// mode=local,language=javascript,parameters=[greetee]
"Hello " + greetee
上記のスクリプトを実行するときに、greetee
パラメーターの値を渡すと、Data Grid は "Hello ${value}"
を返します。
13.2.1.1. スクリプトメタデータ
メタデータは、スクリプトの実行中に Data Grid サーバーが使用するスクリプトに関する追加の情報を提供します。
スクリプトメタデータは、スクリプトの最初の行でコメントを追加する property=value
ペアです。以下に例を示します。
// name=test, language=javascript // mode=local, parameters=[a,b,c]
// name=test, language=javascript
// mode=local, parameters=[a,b,c]
-
スクリプト言語 (
//
,;;
,#
) に一致するコメントスタイルを使用してください。 -
コンマで区切られた
property=value
ペア - 値は一重引用符 (') または二重引用符 (") で区切ります。
プロパティー | 説明 |
---|---|
| 実行モードを定義し、以下の値を取ります。
|
| スクリプトを実行する ScriptEngine を指定します。 |
| ScriptEngine を設定する代替方法としてファイル名の拡張子を指定します。 |
| ユーザーがスクリプトを実行する必要があるロールを指定します。 |
| このスクリプトの有効なパラメーター名の配列を指定します。このリストに含まれていないパラメーターを指定する呼び出しによって例外が生じます。 |
| オプションで、データおよびパラメーターおよび戻り値を保存する MediaType(MIME タイプ) を設定します。このプロパティーは、特定のデータフォーマットのみをサポートするリモートクライアントに便利です。
現在、データに String UTF-8 形式を使用するように、 |
13.2.1.2. スクリプトバインディング
Data Grid は、内部オブジェクトをスクリプト実行のバインディングとして公開します。
バインディング | 説明 |
---|---|
| スクリプトが実行されるキャッシュを指定します。 |
| データをキャッシュにシリアル化するために使用するマーシャラーを指定します。 |
|
キャッシュの |
| スクリプトを実行するスクリプトマネージャーのインスタンスを指定します。このバインディングを使用して、スクリプトから他のスクリプトを実行することができます。 |
13.2.1.3. スクリプトパラメーター
Data Grid を使用すると、スクリプトを実行するためのバインディングとして名前付きパラメーターを渡すことができます。
パラメーターは name,value
のペアで、name
は文字列、value
はマーシャラーが解釈できる任意の値になります。
以下のスクリプトの例では、multiplicand
と multiplier
の 2 つのパラメーターがあります。このスクリプトは multiplicand
の値を取り、その値を multiplier
の値で乗算します。
// mode=local,language=javascript multiplicand * multiplier
// mode=local,language=javascript
multiplicand * multiplier
上記のスクリプトを実行すると、Data Grid は式の評価の結果で応答します。
13.2.2. Data Grid Server へのスクリプトの追加
コマンドラインインターフェイスを使用して、Data Grid サーバーにスクリプトを追加します。
前提条件
Data Grid Server は、___script_cache
キャッシュにスクリプトを保存します。キャッシュ承認を有効にする場合、ユーザーは ___script_cache
に追加するための CREATE
パーミッションを持っている必要があります。
デフォルトの承認設定を使用する場合は、ユーザーに少なくとも deployer
ロールを割り当てます。
手順
必要に応じてスクリプトを定義します。
たとえば、単一の Data Grid サーバーで実行し、2 つのパラメーターを持ち、JavaScript を使用して指定の値を掛ける
multiplication.js
という名前のファイルを作成します。// mode=local,language=javascript multiplicand * multiplier
// mode=local,language=javascript multiplicand * multiplier
Copy to Clipboard Copied! - Data Grid への CLI 接続を作成します。
以下の例のように、
task
コマンドを使用してスクリプトをアップロードします。[//containers/default]> task upload --file=multiplication.js multiplication
[//containers/default]> task upload --file=multiplication.js multiplication
Copy to Clipboard Copied! スクリプトが利用可能であることを確認します。
[//containers/default]> ls tasks multiplication
[//containers/default]> ls tasks multiplication
Copy to Clipboard Copied!
13.2.3. プログラムでのスクリプトの作成
以下の例のように、Hot Rod RemoteCache
インターフェイスを使用してスクリプトを追加します。
RemoteCache<String, String> scriptCache = cacheManager.getCache("___script_cache"); scriptCache.put("multiplication.js", "// mode=local,language=javascript\n" + "multiplicand * multiplier\n");
RemoteCache<String, String> scriptCache = cacheManager.getCache("___script_cache");
scriptCache.put("multiplication.js",
"// mode=local,language=javascript\n" +
"multiplicand * multiplier\n");
13.3. サーバー側のタスクとスクリプトの実行
Data Grid サーバーで、タスクとカスタムスクリプトを実行します。
13.3.1. タスクおよびスクリプトの実行
コマンドラインインターフェイスを使用して、Data Grid クラスターでタスクおよびスクリプトを実行します。
手順
- Data Grid への CLI 接続を作成します。
以下の例のように、
task
コマンドを使用して、タスクおよびスクリプトを実行します。multipler.js
という名前のスクリプトを実行して、2 つのパラメーターを指定します。[//containers/default]> task exec multipler.js -Pmultiplicand=10 -Pmultiplier=20 200.0
[//containers/default]> task exec multipler.js -Pmultiplicand=10 -Pmultiplier=20 200.0
Copy to Clipboard Copied! @@cache@names
という名前のタスクを実行して、利用可能なすべてのキャッシュのリストを取得します。//containers/default]> task exec @@cache@names ["___protobuf_metadata","mycache","___script_cache"]
//containers/default]> task exec @@cache@names ["___protobuf_metadata","mycache","___script_cache"]
Copy to Clipboard Copied!
13.3.2. プログラムでのスクリプトの実行
以下の例のように、execute()
を呼び出して、Hot Rod RemoteCache
インターフェイスを使用してスクリプトを実行します。
RemoteCache<String, Integer> cache = cacheManager.getCache(); // Create parameters for script execution. Map<String, Object> params = new HashMap<>(); params.put("multiplicand", 10); params.put("multiplier", 20); // Run the script with the parameters. Object result = cache.execute("multiplication.js", params);
RemoteCache<String, Integer> cache = cacheManager.getCache();
// Create parameters for script execution.
Map<String, Object> params = new HashMap<>();
params.put("multiplicand", 10);
params.put("multiplier", 20);
// Run the script with the parameters.
Object result = cache.execute("multiplication.js", params);
13.3.3. プログラムでのタスクの実行
以下の例のように、execute()
を呼び出して、Hot Rod RemoteCache
インターフェイスを使用してタスクを実行します。
// Add configuration for a locally running server. ConfigurationBuilder builder = new ConfigurationBuilder(); builder.addServer().host("127.0.0.1").port(11222); // Connect to the server. RemoteCacheManager cacheManager = new RemoteCacheManager(builder.build()); // Retrieve the remote cache. RemoteCache<String, String> cache = cacheManager.getCache(); // Create task parameters. Map<String, String> parameters = new HashMap<>(); parameters.put("name", "developer"); // Run the server task. String greet = cache.execute("hello-task", parameters); System.out.println(greet);
// Add configuration for a locally running server.
ConfigurationBuilder builder = new ConfigurationBuilder();
builder.addServer().host("127.0.0.1").port(11222);
// Connect to the server.
RemoteCacheManager cacheManager = new RemoteCacheManager(builder.build());
// Retrieve the remote cache.
RemoteCache<String, String> cache = cacheManager.getCache();
// Create task parameters.
Map<String, String> parameters = new HashMap<>();
parameters.put("name", "developer");
// Run the server task.
String greet = cache.execute("hello-task", parameters);
System.out.println(greet);
第14章 ロギングの有効化およびカスタマイズ
Data Grid は Apache Log4j 2 を使用して、トラブルシューティング目的および根本原因分析のための環境およびレコードキャッシュ操作の詳細を取得する設定可能なロギングメカニズムを提供します。
14.1. サーバーログ
Data Grid は、サーバーログを $RHDG_HOME/server/log
ディレクトリー内の以下のファイルに書き込みます。
server.log
-
サーバーの起動に関連する起動ログなど、人間が判読できる形式のメッセージ。
Data Grid は、サーバーの起動時にこのファイルを作成します。 server.log.json
-
Data Grid ログを解析および分析できる JSON 形式のメッセージ。
JSON-FILE
アペンダーを有効にすると、Data Grid はこのファイルを作成します。
14.1.1. サーバーログの設定
Data Grid は Apache Log4j テクノロジーを使用して、サーバーログメッセージを書き込みます。サーバーログを log4j2.xml
ファイルで設定できます。
手順
-
任意のテキストエディターで
$RHDG_HOME/server/conf/log4j2.xml
を開きます。 - 必要に応じてサーバーロギングを変更します。
-
log4j2.xml
を保存し、閉じます。
14.1.2. ログレベル
ログレベルは、メッセージの性質と重大度を示します。
ログレベル | 説明 |
---|---|
| 粒度の細かいデバッグメッセージ。アプリケーションを介して個々のリクエストのフローをキャプチャーします。 |
| 個々のリクエストと関連性のない、一般的なデバッグのメッセージ。 |
| ライフサイクルイベントを含む、アプリケーションの全体的な進捗状況に関するメッセージ。 |
| エラーやパフォーマンスの低下につながる可能性のあるイベント。 |
| 操作またはアクティビティーの正常な実行を妨げる可能性がありますが、アプリケーションの実行は妨げないエラー状態。 |
| 重大なサービス障害やアプリケーションのシャットダウンを引き起こす可能性のあるイベント。 |
上記の個々のメッセージのレベルに加えて、この設定では、ALL
(すべてのメッセージを含む) と OFF
(すべてのメッセージを除外) のさらに 2 つの値を可能にします。
14.1.3. Data Grid ログカテゴリー
Data Grid は、機能領域ごとにログを整理する INFO
、WARN
、ERROR
、FATAL
のレベルのメッセージのカテゴリーを提供します。
org.infinispan.CLUSTER
- 状態遷移操作、イベントのリバランス、パーティション設定などが含まれる Data Grid クラスタリング固有のメッセージ。
org.infinispan.CONFIG
- Data Grid 設定固有のメッセージ
org.infinispan.CONTAINER
- 有効期限とエビクション操作、キャッシュリスナーの通知、トランザクションなどを含むデータコンテナーに固有のメッセージ。
org.infinispan.PERSISTENCE
- キャッシュローダーとストアに固有のメッセージ。
org.infinispan.SECURITY
- Data Grid のセキュリティーに固有のメッセージ。
org.infinispan.SERVER
- Data Grid Server に固有のメッセージ。
org.infinispan.XSITE
- クロスサイトレプリケーション操作に固有のメッセージ。
14.1.4. ログアペンダー
ログアペンダーは、Data Grid によるログメッセージの記録方法を定義します。
- CONSOLE
-
ログメッセージをホストの標準出力 (
stdout
) または標準エラー (stderr
) ストリームに書き込みます。
デフォルトでorg.apache.logging.log4j.core.appender.ConsoleAppender
クラスを使用します。 - FILE
-
ファイルにログメッセージを書き込みます。
デフォルトでorg.apache.logging.log4j.core.appender.RollingFileAppender
クラスを使用します。 - JSON-FILE
-
ログメッセージを JSON 形式でファイルに書き込みます。
デフォルトでorg.apache.logging.log4j.core.appender.RollingFileAppender
クラスを使用します。
14.1.5. ログパターン
CONSOLE
および FILE
アペンダーは、PatternLayout
を使用して、pattern に従ってログメッセージをフォーマットします。
以下は、FILE アペンダーのデフォルトのパターンになります。%d{yyyy-MM-dd HH:mm:ss,SSS} %-5p (%t) [%c{1}] %m%throwable%n
-
%d{yyyy-MM-dd HH:mm:ss,SSS}
は現在の日時を追加します。 -
%-5p
は、ログレベルを右揃えで指定します。 -
%t
は、現在のスレッドの名前を追加します。 -
%c{1}
はロギングカテゴリーの短縮名を追加します。 -
%m
はログメッセージを追加します。 -
%throwable
は例外スタックトレースを追加します。 -
%n
は改行を追加します。
パターンについては、 PatternLayout
ドキュメント で詳細に説明されています。
14.1.6. JSON ログハンドラーの有効化および設定
Data Grid は、JSON 形式でメッセージを書き込む JSON ログハンドラーを提供します。
前提条件
-
Data Grid Server が実行されている場合は停止します。
ログハンドラーは動的に有効にすることはできません。
手順
-
任意のテキストエディターで
$RHDG_HOME/server/conf/log4j2.xml
を開きます。 JSON-FILE
アペンダーのコメントを解除して、FILE
アペンダーをコメントアウトします。<!--<AppenderRef ref="FILE"/>--> <AppenderRef ref="JSON-FILE"/>
<!--<AppenderRef ref="FILE"/>--> <AppenderRef ref="JSON-FILE"/>
Copy to Clipboard Copied! - 必要に応じて、JSON アペンダーと JSON レイアウトを設定します。
-
log4j2.xml
を保存し、閉じます。
Data Grid を開始すると、各ログメッセージを JSON マップとして $RHDG_HOME/server/log/server.log.json
ファイルに書き込みます。
14.2. アクセスログ
アクセスログは、Hot Rod および REST エンドポイントのすべてのインバウンドクライアント要求を $RHDG_HOME/server/log
ディレクトリー内のファイルを記録します。
org.infinispan.HOTROD_ACCESS_LOG
-
Hot Rod アクセスメッセージを
hotrod-access.log
ファイルに書き込むロギングカテゴリー。 org.infinispan.REST_ACCESS_LOG
-
REST アクセスメッセージを
rest-access.log
ファイルに書き込むロギングカテゴリー。
14.2.1. アクセスログの有効化
Hot Rod および REST エンドポイントアクセスメッセージを記録するには、log4j2.xml
でロギングカテゴリーを有効にする必要があります。
手順
-
任意のテキストエディターで
$RHDG_HOME/server/conf/log4j2.xml
を開きます。 -
org.infinispan.HOTROD_ACCESS_LOG
およびorg.infinispan.REST_ACCESS_LOG
のロギングカテゴリーのレベルをTRACE
に変更します。 -
log4j2.xml
を保存し、閉じます。
<Logger name="org.infinispan.HOTROD_ACCESS_LOG" additivity="false" level="TRACE"> <AppenderRef ref="HR-ACCESS-FILE"/> </Logger>
<Logger name="org.infinispan.HOTROD_ACCESS_LOG" additivity="false" level="TRACE">
<AppenderRef ref="HR-ACCESS-FILE"/>
</Logger>
14.2.2. アクセスログのプロパティー
アクセスログのデフォルト形式は以下のとおりです。
%X{address} %X{user} [%d{dd/MMM/yyyy:HH:mm:ss Z}] "%X{method} %m %X{protocol}" %X{status} %X{requestSize} %X{responseSize} %X{duration}%n
%X{address} %X{user} [%d{dd/MMM/yyyy:HH:mm:ss Z}] "%X{method} %m
%X{protocol}" %X{status} %X{requestSize} %X{responseSize} %X{duration}%n
前述のフォーマットは、以下のようなログエントリーを作成します。
127.0.0.1 - [DD/MM/YYYY:HH:MM:SS +0000] "PUT /rest/v2/caches/default/key HTTP/1.1" 404 5 77 10
ロギングプロパティーは %X{name}
表記を使用し、アクセスログの形式を変更可能にします。以下は、デフォルトのロギングプロパティーです。
プロパティー | 説明 |
---|---|
|
|
| 認証を使用する場合のプリンシパル名。 |
|
使用されるメソッド。 |
|
使用されるプロトコル |
|
REST エンドポイントの HTTP ステータスコード。 |
| リクエストのサイズ (バイト単位)。 |
| 応答のサイズ (バイト単位)。 |
| サーバーによる要求の処理にかかった時間 (ミリ秒数)。 |
h:
で始まるヘッダー名を使用して、リクエストに含まれるヘッダーをログに記録します (例: %X{h:User-Agent}
)。
14.3. 監査ログ
監査ログを使用すると、Data Grid 環境への変更を追跡できるため、変更がいつ発生し、どのユーザーが変更を加えたかを知ることができます。監査ロギングを有効にして、サーバー設定イベントと管理操作を記録するように設定します。
org.infinispan.AUDIT
-
セキュリティー監査メッセージを
$RHDG_HOME/server/log
ディレクトリーのaudit.log
ファイルに書き込むロギングカテゴリー。
14.3.1. 監査ロギングの有効化
セキュリティー監査メッセージを記録するには、log4j2.xml
でロギングカテゴリーを有効にする必要があります。
手順
-
任意のテキストエディターで
$RHDG_HOME/server/conf/log4j2.xml
を開きます。 -
org.infinispan.AUDIT
のロギングカテゴリーのレベルをINFO
に変更します。 -
log4j2.xml
を保存し、閉じます。
<!-- Set to INFO to enable audit logging --> <Logger name="org.infinispan.AUDIT" additivity="false" level="INFO"> <AppenderRef ref="AUDIT-FILE"/> </Logger>
<!-- Set to INFO to enable audit logging -->
<Logger name="org.infinispan.AUDIT" additivity="false" level="INFO">
<AppenderRef ref="AUDIT-FILE"/>
</Logger>
14.3.2. 監査ロギングアペンダーの設定
Apache Log4j は、監査メッセージをデフォルトのログファイル以外の宛先に送信するのに使用するさまざまなアペンダーを提供します。たとえば、監査ログを syslog デーモン、JDBC データベース、または Apache Kafka サーバーに送信する場合は、log4j2.xml
にアペンダーを設定できます。
手順
-
任意のテキストエディターで
$RHDG_HOME/server/conf/log4j2.xml
を開きます。 デフォルトの
AUDIT-FILE
ローリングファイルアペンダーをコメント化するか削除します。<!--RollingFile name="AUDIT-FILE" ... </RollingFile-->
<!--RollingFile name="AUDIT-FILE" ... </RollingFile-->
Copy to Clipboard Copied! 監査メッセージに必要なロギングアペンダーを追加します。
たとえば、以下のように Kafka サーバーのロギングアペンダーを追加できます。
<Kafka name="AUDIT-KAFKA" topic="audit"> <PatternLayout pattern="%date %message"/> <Property name="bootstrap.servers">localhost:9092</Property> </Kafka>
<Kafka name="AUDIT-KAFKA" topic="audit"> <PatternLayout pattern="%date %message"/> <Property name="bootstrap.servers">localhost:9092</Property> </Kafka>
Copy to Clipboard Copied! -
log4j2.xml
を保存し、閉じます。
14.3.3. カスタム監査ロギング実装の使用
Log4j アペンダーの設定がニーズを満たさない場合は、org.infinispan.security.AuditLogger
API のカスタム実装を作成できます。
前提条件
-
必要に応じて
org.infinispan.security.AuditLogger
を実装し、JAR ファイルにパッケージ化します。
手順
-
JAR を Data Grid Server インストールの
server/lib
ディレクトリーに追加します。 カスタム監査ロガーの完全修飾クラス名を、キャッシュコンテナーのセキュリティー設定の
authorization
要素のaudit-logger
属性の値として指定します。たとえば、以下の設定では、ロギング監査メッセージのクラスとして
my.package.CustomAuditLogger
を定義します。<infinispan> <cache-container> <security> <authorization audit-logger="my.package.CustomAuditLogger"/> </security> </cache-container> </infinispan>
<infinispan> <cache-container> <security> <authorization audit-logger="my.package.CustomAuditLogger"/> </security> </cache-container> </infinispan>
Copy to Clipboard Copied!
第15章 Data Grid Server 統計の設定
Data Grid が metrics
ポイントに、または JMX MBean を介してエクスポートする統計を有効にします。JMX MBean を登録すると、リモートで実行できる管理操作も公開されます。
15.1. Data Grid 統計の有効化
Cache Manager およびキャッシュの統計をエクスポートするように Data Grid を設定します。
Data Grid Server は、デフォルトで Cache Manager の統計を有効にします。キャッシュの統計を明示的に有効にする必要があります。
手順
以下のいずれかの方法で、Data Grid 統計が有効化されるように設定を変更します。
-
宣言型:
statistics="true"
属性を追加します。 -
プログラマティック:
.statistics()
メソッドを呼び出します。
宣言型
<!-- Enables statistics for the Cache Manager. --> <cache-container statistics="true"> <!-- Enables statistics for the named cache. --> <local-cache name="mycache" statistics="true"/> </cache-container>
<!-- Enables statistics for the Cache Manager. -->
<cache-container statistics="true">
<!-- Enables statistics for the named cache. -->
<local-cache name="mycache" statistics="true"/>
</cache-container>
プログラマティック
GlobalConfiguration globalConfig = new GlobalConfigurationBuilder() //Enables statistics for the Cache Manager. .cacheContainer().statistics(true) .build(); Configuration config = new ConfigurationBuilder() //Enables statistics for the named cache. .statistics().enable() .build();
GlobalConfiguration globalConfig = new GlobalConfigurationBuilder()
//Enables statistics for the Cache Manager.
.cacheContainer().statistics(true)
.build();
Configuration config = new ConfigurationBuilder()
//Enables statistics for the named cache.
.statistics().enable()
.build();
15.2. Data Grid メトリックの設定
Data Grid を設定して、metrics
エンドポイント経由でゲージとヒストグラムをエクスポートします。
手順
-
必要に応じて、
metrics
設定でゲージとヒストグラムをオンまたはオフにします。
宣言型
<!-- Computes and collects statistics for the Cache Manager. --> <cache-container statistics="true"> <!-- Exports collected statistics as gauge and histogram metrics. --> <metrics gauges="true" histograms="true" /> </cache-container>
<!-- Computes and collects statistics for the Cache Manager. -->
<cache-container statistics="true">
<!-- Exports collected statistics as gauge and histogram metrics. -->
<metrics gauges="true" histograms="true" />
</cache-container>
プログラマティック
GlobalConfiguration globalConfig = new GlobalConfigurationBuilder() //Computes and collects statistics for the Cache Manager. .statistics().enable() //Exports collected statistics as gauge and histogram metrics. .metrics().gauges(true).histograms(true) .build();
GlobalConfiguration globalConfig = new GlobalConfigurationBuilder()
//Computes and collects statistics for the Cache Manager.
.statistics().enable()
//Exports collected statistics as gauge and histogram metrics.
.metrics().gauges(true).histograms(true)
.build();
15.3. Data Grid メトリックの収集
Prometheus などのモニタリングツールを使用して、Data Grid メトリクスを収集します。
前提条件
-
統計を有効にします。統計を有効にしないと、Data Grid はメトリックに
0
と-1
の値を指定します。 - 必要に応じて、ヒストグラムを有効にします。デフォルトでは、Data Grid はゲージを生成しますが、ヒストグラムは生成しません。
手順
Prometheus (OpenMetrics) 形式でメトリックを取得します。
curl -v http://localhost:11222/metrics
$ curl -v http://localhost:11222/metrics
Copy to Clipboard Copied! MicroProfile JSON 形式でメトリックを取得します。
curl --header "Accept: application/json" http://localhost:11222/metrics
$ curl --header "Accept: application/json" http://localhost:11222/metrics
Copy to Clipboard Copied!
次のステップ
Data Grid メトリクスを収集するようにモニタリングアプリケーションを設定します。たとえば、以下を prometheus.yml
に追加します。
static_configs: - targets: ['localhost:11222']
static_configs:
- targets: ['localhost:11222']
参照資料
- Prometheus Configuration
- Data Grid 統計の有効化
15.4. JMX MBean を登録するための Data Grid の設定
Data Grid は、統計の収集と管理操作の実行に使用できる JMX MBean を登録できます。JMX とは別に統計を有効にする必要があります。そうしないと、Data Grid はすべての統計属性に 0
の値を提供します。
手順
以下のいずれかの方法でキャッシュコンテナー設定を変更し、JMX を有効にします。
-
宣言型:
<jmx enabled="true" />
要素をキャッシュコンテナーに追加します。 -
プログラマティック:
.jmx().enable()
メソッドを呼び出します。
宣言型
<cache-container> <jmx enabled="true" /> </cache-container>
<cache-container>
<jmx enabled="true" />
</cache-container>
プログラマティック
GlobalConfiguration globalConfig = new GlobalConfigurationBuilder() .jmx().enable() .build();
GlobalConfiguration globalConfig = new GlobalConfigurationBuilder()
.jmx().enable()
.build();
15.4.1. Data Grid MBean
Data Grid は、管理可能なリソースを表す JMX MBean を公開します。
org.infinispan:type=Cache
- キャッシュインスタンスに使用できる属性および操作。
org.infinispan:type=CacheManager
- Data Grid キャッシュやクラスターのヘルス統計など、Cache Manager で使用できる属性および操作。
使用できる JMX MBean の詳細なリストおよび説明、ならびに使用可能な操作および属性については、Data Grid JMX Components のドキュメントを参照してください。
第16章 ヘルス統計の取得
以下の方法で Data Grid クラスターの正常性を監視します。
-
embeddedCacheManager.getHealth()
メソッド呼び出しでプログラマティックに監視 - JMX MBean
- Data Grid REST Server
16.1. JMX 経由での Health API へのアクセス
JMX 経由で Data Grid クラスターの正常性統計を取得します。
手順
JConsole などの JMX 対応ツールを使用して Data Grid Server に接続し、以下のオブジェクトに移動します。
org.infinispan:type=CacheManager,name="default",component=CacheContainerHealth
org.infinispan:type=CacheManager,name="default",component=CacheContainerHealth
Copy to Clipboard Copied! - 利用可能な MBean を選択し、クラスターの正常性の統計を取得します。
16.2. REST 経由での Health API へのアクセス
REST API 経由で Data Grid クラスターの正常性を取得します。
手順
GET
要求を呼び出して、クラスターの正常性を取得します。GET /rest/v2/cache-managers/{cacheManagerName}/health
GET /rest/v2/cache-managers/{cacheManagerName}/health
Copy to Clipboard Copied!
Data Grid は、以下のような JSON
ドキュメントで応答します。
{ "cluster_health":{ "cluster_name":"ISPN", "health_status":"HEALTHY", "number_of_nodes":2, "node_names":[ "NodeA-36229", "NodeB-28703" ] }, "cache_health":[ { "status":"HEALTHY", "cache_name":"___protobuf_metadata" }, { "status":"HEALTHY", "cache_name":"cache2" }, { "status":"HEALTHY", "cache_name":"mycache" }, { "status":"HEALTHY", "cache_name":"cache1" } ] }
{
"cluster_health":{
"cluster_name":"ISPN",
"health_status":"HEALTHY",
"number_of_nodes":2,
"node_names":[
"NodeA-36229",
"NodeB-28703"
]
},
"cache_health":[
{
"status":"HEALTHY",
"cache_name":"___protobuf_metadata"
},
{
"status":"HEALTHY",
"cache_name":"cache2"
},
{
"status":"HEALTHY",
"cache_name":"mycache"
},
{
"status":"HEALTHY",
"cache_name":"cache1"
}
]
}
以下のように Cache Manager のステータスを取得します。
GET /rest/v2/cache-managers/{cacheManagerName}/health/status
GET /rest/v2/cache-managers/{cacheManagerName}/health/status
参照資料
詳細は、REST v2 (version 2) API ドキュメントを参照してください。
第17章 Data Grid サーバーのローリングアップグレードの実行
Data Grid クラスターのローリングアップグレードを実行して、ダウンタイムやデータの損失なしにバージョン間で変更します。ローリングアップグレードは、Hot Rod 経由で Data Grid サーバーおよびデータの両方をターゲットバージョンに移行します。
17.1. ターゲットクラスターの設定
ターゲット Data Grid バージョンを実行し、リモートキャッシュストアを使用してソースクラスターからデータを読み込むクラスターを作成します。
前提条件
- ターゲットアップグレードバージョンとともに Data Grid クラスターをインストールします。
ターゲットクラスターのネットワークプロパティーはソースクラスターのネットワークプロパティーが重複していないことを確認します。JGroups トランスポート設定でターゲットおよびソースクラスターの一意の名前を指定する必要があります。環境に応じて、異なるネットワークインターフェイスを使用し、ターゲットクラスターとソースクラスターを分離するためにポートオフセットを指定することもできます。
手順
ソースクラスターから移行する各キャッシュについて、ターゲットクラスターに
aRemoteCacheStore
を追加します。リモートキャッシュストアは Hot Rod プロトコルを使用して、リモート Data Grid クラスターからデータを取得します。リモートキャッシュストアをターゲットクラスターに追加する場合は、ソースクラスターからデータをレイジーに読み込み、クライアント要求を処理します。
すべての要求の処理を開始するために、クライアントをターゲットクラスターに切り替えます。
- クライアント設定をターゲットクラスターの場所で更新します。
- クライアントを再起動します。
17.1.1. ローリングアップグレードのリモートキャッシュストア
以下のようにローリングアップグレードを実行するには、特定のリモートキャッシュストア設定を使用する必要があります。
<!-- Remote cache stores for rolling upgrades must disable passivation. --> <persistence passivation="false"> <!-- The value of the cache attribute matches the name of a cache in the source cluster. Target clusters load data from this cache using the remote cache store. --> <!-- The "protocol-version" attribute matches the Hot Rod protocol version of the source cluster. 2.5 is the minimum version and is suitable for any upgrade path. --> <!-- You should enable segmentation for remote cache stores only if the number of segments in the target cluster matches the number of segments for the cache in the source cluster. --> <remote-store xmlns="urn:infinispan:config:store:remote:12.1" cache="myDistCache" protocol-version="2.5" hotrod-wrapping="true" raw-values="true" segmented="false"> <!-- Configures authentication and encryption according to the security realm of the source cluster. --> <security> <authentication server-name="infinispan"> <digest username="admin" password="changeme" realm="default"/> </authentication> </security> <!-- Points to the location of the source cluster. --> <remote-server host="127.0.0.1" port="11222"/> </remote-store> </persistence>
<!-- Remote cache stores for rolling upgrades must disable passivation. -->
<persistence passivation="false">
<!-- The value of the cache attribute matches the name of a cache in the source cluster. Target clusters load data from this cache using the remote cache store. -->
<!-- The "protocol-version" attribute matches the Hot Rod protocol version of the source cluster. 2.5 is the minimum version and is suitable for any upgrade path. -->
<!-- You should enable segmentation for remote cache stores only if the number of segments in the target cluster matches the number of segments for the cache in the source cluster. -->
<remote-store xmlns="urn:infinispan:config:store:remote:12.1"
cache="myDistCache"
protocol-version="2.5"
hotrod-wrapping="true"
raw-values="true"
segmented="false">
<!-- Configures authentication and encryption according to the security realm of the source cluster. -->
<security>
<authentication server-name="infinispan">
<digest username="admin"
password="changeme"
realm="default"/>
</authentication>
</security>
<!-- Points to the location of the source cluster. -->
<remote-server host="127.0.0.1" port="11222"/>
</remote-store>
</persistence>
17.2. ターゲットクラスターへのデータの同期
ターゲットクラスターがリモートキャッシュストアを使用してクライアント要求を実行し、オンデマンドでデータを読み込む場合は、ソースクラスターからターゲットクラスターにデータを同期できます。
この操作はソースクラスターからデータを読み取り、ターゲットクラスターに書き込みます。データは、ターゲットクラスターのすべてのノードに並行して移行され、各ノードはデータのサブセットを受け取ります。Data Grid 設定で、各キャッシュの同期を実行する必要があります。
手順
ターゲットクラスターに移行する Data Grid 設定の各キャッシュの同期操作を開始します。
Data Grid REST API を使用し、
?action=sync- data
パラメーターでPOST
要求を呼び出します。たとえば、myCache という名前のキャッシュ内のデータをソースクラスターからターゲットクラスターに同期するには、以下を実行します。POST /v2/caches/myCache?action=sync-data
POST /v2/caches/myCache?action=sync-data
Copy to Clipboard Copied! 操作が完了すると、Data Grid はターゲットクラスターにコピーされたエントリーの合計数で応答します。
または、
RollingUpgradeManager
MBean でsynchronizeData(migratorName=hotrod)
を呼び出すことで JMX を使用できます。ターゲットクラスター内の各ノードをソースクラスターから切断します。
たとえば、ソースクラスターから myCache キャッシュを切断するには、以下の
POST
要求を呼び出します。POST /v2/caches/myCache?action=disconnect-source
POST /v2/caches/myCache?action=disconnect-source
Copy to Clipboard Copied! JMX を使用するには、
RollingUpgradeManager
MBean でdisconnectSource(migratorName=hotrod)
を呼び出します。
次のステップ
ソースクラスターからすべてのデータを同期すると、ローリングアップグレードプロセスが完了します。ソースクラスターの使用を停止できるようになりました。
第18章 Data Grid Server のトラブルシューティング
Data Grid サーバーのデプロイメントに関する診断情報を収集し、トラブルシューティングの手順を実行して問題を解決します。
18.1. Data Grid Server の診断レポートの取得
Data Grid サーバーは、Data Grid サーバーとホストの両方に関する診断情報が含まれる集計レポートを tar.gz
アーカイブで提供します。レポートは、設定ファイルやログファイルに加えて、CPU、メモリー、オープンファイル、ネットワークソケットとルーティング、スレッドに関する詳細を提供します。
手順
- Data Grid への CLI 接続を作成します。
server report
コマンドを使用してtar.gz
アーカイブをダウンロードします。[//containers/default]> server report Downloaded report 'infinispan-<hostname>-<timestamp>-report.tar.gz'
[//containers/default]> server report Downloaded report 'infinispan-<hostname>-<timestamp>-report.tar.gz'
Copy to Clipboard Copied! -
tar.gz
ファイルをファイルシステムの適切な場所に移動します。 -
任意のアーカイブツールで
tar.gz
ファイルをデプロイメントします。
18.2. ランタイム時の Data Grid Server のロギング設定の変更
ランタイム時に Data Grid サーバーのロギング設定を変更し、ロギングを一時的に調整して問題のトラブルシューティングを行い、根本原因分析を実行します。
CLI を使用したロギング設定の変更は、ランタイム時のみの操作であるため、変更は以下のようになります。
-
log4j2.xml
ファイルに保存されません。サーバーノードまたはクラスター全体を再起動すると、ログ設定がlog4j2.xml
ファイルのデフォルトのプロパティーにリセットされます。 - CLI の呼び出し時に、クラスター内のノードにのみ適用されます。ログ設定を変更した後にクラスターに参加するノードは、デフォルトのプロパティーを使用します。
手順
- Data Grid への CLI 接続を作成します。
ロギング
を使用して、必要な調整を行います。- サーバーで定義されているすべてのアペンダーをリスト表示します。
[//containers/default]> logging list-appenders
[//containers/default]> logging list-appenders
上記のコマンドは以下を返します。
{ "STDOUT" : { "name" : "STDOUT" }, "JSON-FILE" : { "name" : "JSON-FILE" }, "HR-ACCESS-FILE" : { "name" : "HR-ACCESS-FILE" }, "FILE" : { "name" : "FILE" }, "REST-ACCESS-FILE" : { "name" : "REST-ACCESS-FILE" } }
{
"STDOUT" : {
"name" : "STDOUT"
},
"JSON-FILE" : {
"name" : "JSON-FILE"
},
"HR-ACCESS-FILE" : {
"name" : "HR-ACCESS-FILE"
},
"FILE" : {
"name" : "FILE"
},
"REST-ACCESS-FILE" : {
"name" : "REST-ACCESS-FILE"
}
}
- サーバーで定義されているすべてのロガー設定をリスト表示します。
[//containers/default]> logging list-loggers
[//containers/default]> logging list-loggers
上記のコマンドは以下を返します。
[ { "name" : "", "level" : "INFO", "appenders" : [ "STDOUT", "FILE" ] }, { "name" : "org.infinispan.HOTROD_ACCESS_LOG", "level" : "INFO", "appenders" : [ "HR-ACCESS-FILE" ] }, { "name" : "com.arjuna", "level" : "WARN", "appenders" : [ ] }, { "name" : "org.infinispan.REST_ACCESS_LOG", "level" : "INFO", "appenders" : [ "REST-ACCESS-FILE" ] } ]
[ {
"name" : "",
"level" : "INFO",
"appenders" : [ "STDOUT", "FILE" ]
}, {
"name" : "org.infinispan.HOTROD_ACCESS_LOG",
"level" : "INFO",
"appenders" : [ "HR-ACCESS-FILE" ]
}, {
"name" : "com.arjuna",
"level" : "WARN",
"appenders" : [ ]
}, {
"name" : "org.infinispan.REST_ACCESS_LOG",
"level" : "INFO",
"appenders" : [ "REST-ACCESS-FILE" ]
} ]
-
set
サブコマンドを使用して、ロガー設定を追加および変更します。
たとえば、以下のコマンドは、org.infinispan
パッケージのロギングレベルを DEBUG
に設定します。
[//containers/default]> logging set --level=DEBUG org.infinispan
[//containers/default]> logging set --level=DEBUG org.infinispan
-
remove
サブコマンドを使用して、既存のロガー設定を削除します。
たとえば、以下のコマンドは org.infinispan
ロガー設定を削除します。これは、代わりに root 設定が使用されることを意味します。
[//containers/default]> logging remove org.infinispan
[//containers/default]> logging remove org.infinispan
18.3. リソースの統計
stats
コマンドを使用して、Data Grid サーバー内の一部のリソースについて、サーバーが収集した統計を検査できます。
統計を収集するリソース (コンテナー、キャッシュ) のコンテキストから、またはそのようなリソースへのパスを使用して、stats
コマンドを使用します。
[//containers/default]> stats { "statistics_enabled" : true, "number_of_entries" : 0, "hit_ratio" : 0.0, "read_write_ratio" : 0.0, "time_since_start" : 0, "time_since_reset" : 49, "current_number_of_entries" : 0, "current_number_of_entries_in_memory" : 0, "total_number_of_entries" : 0, "off_heap_memory_used" : 0, "data_memory_used" : 0, "stores" : 0, "retrievals" : 0, "hits" : 0, "misses" : 0, "remove_hits" : 0, "remove_misses" : 0, "evictions" : 0, "average_read_time" : 0, "average_read_time_nanos" : 0, "average_write_time" : 0, "average_write_time_nanos" : 0, "average_remove_time" : 0, "average_remove_time_nanos" : 0, "required_minimum_number_of_nodes" : -1 }
[//containers/default]> stats
{
"statistics_enabled" : true,
"number_of_entries" : 0,
"hit_ratio" : 0.0,
"read_write_ratio" : 0.0,
"time_since_start" : 0,
"time_since_reset" : 49,
"current_number_of_entries" : 0,
"current_number_of_entries_in_memory" : 0,
"total_number_of_entries" : 0,
"off_heap_memory_used" : 0,
"data_memory_used" : 0,
"stores" : 0,
"retrievals" : 0,
"hits" : 0,
"misses" : 0,
"remove_hits" : 0,
"remove_misses" : 0,
"evictions" : 0,
"average_read_time" : 0,
"average_read_time_nanos" : 0,
"average_write_time" : 0,
"average_write_time_nanos" : 0,
"average_remove_time" : 0,
"average_remove_time_nanos" : 0,
"required_minimum_number_of_nodes" : -1
}
[//containers/default]> stats /containers/default/caches/mycache { "time_since_start" : -1, "time_since_reset" : -1, "current_number_of_entries" : -1, "current_number_of_entries_in_memory" : -1, "total_number_of_entries" : -1, "off_heap_memory_used" : -1, "data_memory_used" : -1, "stores" : -1, "retrievals" : -1, "hits" : -1, "misses" : -1, "remove_hits" : -1, "remove_misses" : -1, "evictions" : -1, "average_read_time" : -1, "average_read_time_nanos" : -1, "average_write_time" : -1, "average_write_time_nanos" : -1, "average_remove_time" : -1, "average_remove_time_nanos" : -1, "required_minimum_number_of_nodes" : -1 }
[//containers/default]> stats /containers/default/caches/mycache
{
"time_since_start" : -1,
"time_since_reset" : -1,
"current_number_of_entries" : -1,
"current_number_of_entries_in_memory" : -1,
"total_number_of_entries" : -1,
"off_heap_memory_used" : -1,
"data_memory_used" : -1,
"stores" : -1,
"retrievals" : -1,
"hits" : -1,
"misses" : -1,
"remove_hits" : -1,
"remove_misses" : -1,
"evictions" : -1,
"average_read_time" : -1,
"average_read_time_nanos" : -1,
"average_write_time" : -1,
"average_write_time_nanos" : -1,
"average_remove_time" : -1,
"average_remove_time_nanos" : -1,
"required_minimum_number_of_nodes" : -1
}
第19章 参照
19.1. Data Grid Server 8.2.3 Readme
Data Grid Server 12.1.11.Final-redhat-00001 ディストリビューションに関する情報
19.1.1. 要件
Data Grid Server には、JDK 11 以降が必要です。
19.1.2. サーバーの起動
server
スクリプトを使用して Data Grid Server インスタンスを実行します。
Unix / Linux
$RHDG_HOME/bin/server.sh
$RHDG_HOME/bin/server.sh
Windows
$RHDG_HOME\bin\server.bat
$RHDG_HOME\bin\server.bat
コマンド引数を表示するには --help
または -h
オプションを追加します。
19.1.3. サーバーの停止
CLI で shutdown
コマンドを使用して、正常なシャットダウンを実行します。
または、ターミナルから Ctrl-C を入力してサーバープロセスを中断するか、TERM シグナルを介してこれを強制終了します。
19.1.4. 設定
サーバー設定によって、以下のサーバー固有の要素で Data Grid 設定が拡張されます。
cache-container
- キャッシュライフサイクルを管理するためのキャッシュコンテナーを定義します。
endpoints
- クライアントプロトコルのエンドポイントコネクターを有効化および設定します。
security
- エンドポイントセキュリティーレルムを設定します。
socket-bindings
- エンドポイントコネクターをインターフェイスおよびポートにマッピングします。
デフォルトの設定ファイルは $RHDG_HOME/server/conf/infinispan.xml
です。
クラスタリング機能なしでサーバーを起動する以下の例のように、-c
引数を指定してさまざまな設定ファイルを使用します。
Unix / Linux
$RHDG_HOME/bin/server.sh -c infinispan-local.xml
$RHDG_HOME/bin/server.sh -c infinispan-local.xml
Windows
$RHDG_HOME\bin\server.bat -c infinispan-local.xml
$RHDG_HOME\bin\server.bat -c infinispan-local.xml
19.1.5. バインドアドレス
Data Grid Server は、デフォルトでネットワーク上のループバック IP アドレス localhost
にバインドします。
すべてのネットワークインターフェイスにバインドする以下の例のように、-b
引数を使用して別の IP アドレスを設定します。
Unix / Linux
$RHDG_HOME/bin/server.sh -b 0.0.0.0
$RHDG_HOME/bin/server.sh -b 0.0.0.0
Windows
$RHDG_HOME\bin\server.bat -b 0.0.0.0
$RHDG_HOME\bin\server.bat -b 0.0.0.0
19.1.6. バインドポート
Data Grid Server は、デフォルトでポート 11222
をリッスンします。
-p
引数を使用して別のポートを設定します。
Unix / Linux
$RHDG_HOME/bin/server.sh -p 30000
$RHDG_HOME/bin/server.sh -p 30000
Windows
$RHDG_HOME\bin\server.bat -p 30000
$RHDG_HOME\bin\server.bat -p 30000
19.1.7. クラスタリングアドレス
Data Grid Server 設定では、クラスタートランスポートが定義されているため、同じネットワーク上の複数のインスタンスが相互に検出し、自動的にクラスターを形成します。
-k
引数を使用して、クラスタートラフィックの IP アドレスを変更します。
Unix / Linux
$RHDG_HOME/bin/server.sh -k 192.168.1.100
$RHDG_HOME/bin/server.sh -k 192.168.1.100
Windows
$RHDG_HOME\bin\server.bat -k 192.168.1.100
$RHDG_HOME\bin\server.bat -k 192.168.1.100
19.1.8. クラスタースタック
JGroups スタックは、クラスタートランスポートのプロトコルを設定します。Data Grid Server は、デフォルトで tcp
スタックを使用します。
クラスタートランスポートに UDP を使用する以下の例のように、-j
引数を指定して代替クラスタースタックを使用します。
Unix / Linux
$RHDG_HOME/bin/server.sh -j udp
$RHDG_HOME/bin/server.sh -j udp
Windows
$RHDG_HOME\bin\server.bat -j udp
$RHDG_HOME\bin\server.bat -j udp
19.1.9. 認証
Data Grid Server には認証が必要です。
以下のように、CLI を使用してユーザー名およびパスワードを作成します。
Unix / Linux
$RHDG_HOME/bin/cli.sh user create username -p "qwer1234!"
$RHDG_HOME/bin/cli.sh user create username -p "qwer1234!"
Windows
$RHDG_HOME\bin\cli.bat user create username -p "qwer1234!"
$RHDG_HOME\bin\cli.bat user create username -p "qwer1234!"
19.1.10. サーバーのホームディレクトリー
Data Grid Server は infinispan.server.home.path
を使用して、ホストファイルシステム上のサーバーディストリビューションのコンテンツを見つけます。
$RHDG_HOME
と呼ばれるサーバーのホームディレクトリーには、以下のフォルダーが含まれます。
├── bin ├── boot ├── docs ├── lib ├── server └── static
├── bin
├── boot
├── docs
├── lib
├── server
└── static
フォルダー | 説明 |
---|---|
| サーバーおよび CLI を起動するスクリプトが含まれています。 |
|
サーバーを起動するための |
| 設定例、スキーマ、コンポーネントライセンス、およびその他のリソースを提供します。 |
|
サーバーが内部で要求する |
| Data Grid Server インスタンスの root フォルダーを提供します。 |
| Data Grid コンソールの静的リソースが含まれています。 |
19.1.11. サーバー root ディレクトリー
Data Grid Server は infinispan.server.root.path
を使用して、Data Grid Server インスタンスの設定ファイルおよびデータを見つけます。
同じディレクトリーまたは別のディレクトリーに複数のサーバー root フォルダーを作成してから、以下の例に示すように -s
または --server-root
引数を使用して場所を指定できます。
Unix / Linux
$RHDG_HOME/bin/server.sh -s server2
$RHDG_HOME/bin/server.sh -s server2
Windows
$RHDG_HOME\bin\server.bat -s server2
$RHDG_HOME\bin\server.bat -s server2
各サーバー roor ディレクトリーには、以下のフォルダーが含まれます。
├── server │ ├── conf │ ├── data │ ├── lib │ └── log
├── server
│ ├── conf
│ ├── data
│ ├── lib
│ └── log
フォルダー | 説明 | システムプロパティーの上書き |
---|---|---|
| サーバー設定ファイルが含まれています。 |
|
| コンテナー名別に整理されたデータファイルが含まれます。 |
|
|
サーバー拡張ファイルが含まれます。 |
|
| サーバーのログファイルが含まれます。 |
|
19.1.12. ロギング
server/conf
フォルダーの log4j2.xml
ファイルを使用して、Data Grid Server のロギングを設定します。
以下のように --logging-config=<path_to_logfile>
引数を使用してカスタムパスを使用します。
Unix / Linux
$RHDG_HOME/bin/server.sh --logging-config=/path/to/log4j2.xml
$RHDG_HOME/bin/server.sh --logging-config=/path/to/log4j2.xml
カスタムパスを確実に有効にするには、~
ショートカットを使用しないでください。
Windows
$RHDG_HOME\bin\server.bat --logging-config=path\to\log4j2.xml
$RHDG_HOME\bin\server.bat --logging-config=path\to\log4j2.xml