Red Hat Data Grid for OpenShift
Data Grid on OpenShift の実行
概要
第1章 Red Hat Data Grid
Data Grid は、Red Hat OpenShift に伸縮性および拡張性の高いインメモリーデータストアを提供します。
- スキーマレスデータ構造
- さまざまなオブジェクトをキーと値のペアとして格納する柔軟性があります。
- グリッドベースのデータストレージ
- クラスター間でデータを分散および複製するように設計されています。
- エラスティックスケーリング
- サービスを中断することなく、ノードの数を動的に調整して要件を満たします。
- データの相互運用性
- さまざまなエンドポイントからグリッド内のデータを保存、取得、およびクエリーします。
1.1. Data Grid のドキュメント
Red Hat Data Grid のドキュメント は、Red Hat カスタマーポータルから入手できます。
1.2. Data Grid リポジトリー
- Data Grid 7 OpenShift イメージは、Data Grid for OpenShift のコンテナーイメージおよびリソースを保持します。
- OpenShift クイックスタートチュートリアルでは、Data Grid for OpenShift を実行するための方法およびベストプラクティスのデモなど、コードサンプルを提供します。
1.3. Data Grid イメージの詳細
Red Hat Data Grid for OpenShift イメージは Red Hat Container Registry でホストされており、このレジストリーには、タグ付けされた各バージョンに関する情報と、イメージのヘルスインデックスがあります。
第2章 はじめに
2.1. システム要件
Red Hat Data Grid for OpenShift を使用するには、以下が必要です。
実行中の Red Hat OpenShift クラスター
サポート対象の Red Hat OpenShift Container Platform バージョンは、「Red Hat Data Grid でサポートされる構成」を参照してください。
ヒントRed Hat Container Development Kit を使用して、minishift でローカルの OpenShift クラスターを作成します。
-
$PATH
にある oc クライアント。
2.2. Data Grid for OpenShift プロジェクトの作成
Data Grid for OpenShift Pod を実行できる、OpenShift プロジェクトを設定します。
OpenShift クラスターにログインします。
OpenShift を初めて使用する場合は、OpenShift クラスターへのログイン の以下のチュートリアルを試してください。
以下の例のように、
oc new-project
コマンドを使用して OpenShift プロジェクトを作成します。$ oc new-project rhdg-helloworld --display-name="Red Hat Data Grid"
2.3. レジストリー認証の設定
Data Grid イメージをプルするには、Red Hat Container Catalog registry.redhat.io で認証する必要があります。
以下のいずれかを使用します。
-
Red Hat カスタマーアカウントのユーザー名とパスワード。
docker login
コマンドを使用して、registry.redhat.io からリソースをプルします。 レジストリーサービスアカウントトークン認証トークンを使用して複数のホストを設定します。以下を行います。
- registry.redhat.io にログインします。
- Registry Service Account を作成するか、または選択します。
- 認証トークンを生成します。
2.3.1. 認証トークンを使用したホストの設定
以下のように、レジストリーサービスアカウント からホストに認証トークンを追加します。
- Docker Login タブを選択し、コマンドをコピーします。
-
registry.redhat.io からプルする各ホストで
docker login
コマンドを実行します。 Docker 設定を確認します。
$ cat ~/.docker/config.json ... "registry.redhat.io": { "auth": "MTEwMDkx..." }
2.3.2. プルシークレットの作成
OpenShift の内部レジストリーで利用できないセキュリティー保護されたコンテナーイメージをプルするには、以下を実行します。
- OpenShift クラスターにログインします。
以下のように、作業プロジェクトを選択します。
$ oc project rhdg-helloworld
Docker 設定で汎用のプルシークレットを作成します。
$ oc create secret generic ${SECRET_NAME} \ --from-file=.dockerconfigjson=path/to/.docker/config.json \ --type=kubernetes.io/dockerconfigjson
プルシークレットをサービスアカウントにリンクします。
$ oc secrets link default ${SECRET_NAME} --for=pull
シークレットをマウントします。
$ oc secrets link builder ${SECRET_NAME}
トラブルシューティング手順などの詳細は、「Red Hat コンテナーレジストリーの認証」を参照してください。
第3章 認証および暗号化の設定
カスタムテンプレートを使用している場合や、Data Grid デプロイメント設定テンプレートで独自のキーストアを使用する場合にのみ、認証と暗号化を設定する必要があります。
3.1. キーストアのシークレットへの追加
認証および暗号化を設定するには、以下を行います。
信頼できる証明書でキーストア(
.jks
)を作成します。HTTPS および Hot Rod サービスはいずれも同じキーストアを使用するか、別のキーストアを作成できます。
キーストアを OpenShift シークレットとして追加します。
シークレットを作成します。たとえば、
rhdg-https.jks
という名前のキーストアからrhdg-https-secret
という名前のシークレットを作成するには、以下を実行します。$ oc create secret generic rhdg-https-secret \ --from-file=rhdg-https.jks
シークレットをデフォルトのサービスアカウントにリンクします。
$ oc secrets link default rhdg-https-secret
3.2. デプロイメントの設定
以下のパラメーターでセキュアなテンプレートのいずれかをインスタンス化します。
HTTP および HTTPS ホスト名を設定します。
HOSTNAME_HTTP=my.example.hostname
HOSTNAME_HTTPS=secure-my.example.hostname
-
キーストアの名前を指定します (
HTTPS_KEYSTORE=keystore.jks
)。 -
キーストアへのパスを指定します(
HTTPS_KEYSTORE_DIR=/etc/datagrid-secret-volume
)。 -
シークレットの名前を指定します(
HTTPS_SECRET=rhdg-https-secret
)。 キーストアの認証情報を指定します。
HTTPS_NAME=${USERNAME}
HTTPS_PASSWORD=${PASSWORD}
-
ユーザーの HTTP セキュリティードメインを設定します(
REST_SECURITY_DOMAIN=SecurityRealm
)。 -
クライアント証明書認証を有効にします(
ENCRYPTION_REQUIRE_SSL_CLIENT_AUTH=true
)。 Hot Rod プロトコルの認証および暗号化を有効にします (
HOTROD_AUTHENTICATION=true
)。注記HOSTNAME_HTTPS
の値を設定すると、テンプレートは自動的にHOTROD_ENCRYPTION=true
と設定します。
3.3. Hot Rod プロトコルの一意のキーストアの設定
Hot Rod プロトコルに一意のキーストアを使用するには、以下を実行します。
-
キーストアへのパスを指定します(
SSL_KEYSTORE_PATH=hr_keystore.jks
)。 -
キーストアのパスワードを指定します(
SSL_KEYSTORE_PASSWORD=${PASSWORD}
)。 必要な場合は、以下を実行します。
-
キーストアへの相対パスを設定します(
SSL_KEYSTORE_RELATIVE_TO=path/to/keystore/
)。 -
キーストアパスワードと異なる場合は、秘密鍵のパスワードを指定します(
SSL_KEY_PASSWORD=${PASSWORD})
)。 -
複数のエントリーが含まれる場合には、キーストアに正しいエイリアスを設定します(
SSL_KEYSTORE_ALIAS=cert_alias
)。
-
キーストアへの相対パスを設定します(
承認の認証情報がない場合は、以下を実行します。
USERNAME=${USERNAME}
PASSWORD=${PASSWORD}
注記Hot Rod エンドポイントは、常に
ApplicationRealm
を使用してユーザーを認証します。Hot Rod および REST エンドポイントに別のキーストアを使用する場合は、USERNAME
とPASSWORD
パラメーターで認証情報を設定する必要があります。次に、テンプレートはjdg-openshift
セキュリティーレルムを使用するように REST エンドポイントを設定します。この場合、REST_SECURITY_DOMAIN
環境変数が有効になっていません。
第4章 Data Grid for OpenShift サービスの設定
4.1. Data Grid for OpenShift サービス
Data Grid サービスは、データを失うことなく簡単にスケールアップまたはスケールダウンできるステートフルなアプリケーションです。
cache-service
使いやすい Data Grid for OpenShift クラスターで、高パフォーマンスキャッシングでアプリケーションの応答時間を加速するように設計されています。
- メモリーのデータはノード間で均等に分散されます。サービスの作成時に、Data Grid クラスターの初期サイズを定義します。また、ディストリビューションも同期できます。データを別のノードに伝播する場合には、送信ノードは操作が完了するまで待ってからスレッドを続行します。
- キャッシュエントリーの単一コピー (デフォルト)。Pod が再起動すると、その Pod のデータが失われます。データに対する回復性をさらに強化するには、サービスの作成時にレプリケーションを簡単に有効にできます。
-
JVM の効率化を図るため、キャッシュエントリーはオフヒープに保存されます。キャッシュサイズが Pod で利用可能なメモリー量に達すると、エントリーはエビクトされます。オプションで、エビクションポリシーを
ContainerFullException
をスローするよう変更できます。
datagrid-service
- 複数のキャッシュ設定を作成できる Data Grid for OpenShift の完全なディストリビューション。インデックスの作成やクエリー、Prometheus モニタリングなどの高度な機能を提供します。
4.1.1. コンテナーストレージ
cache-service
および datagrid-service
コンテナーでは、ストレージボリュームが /opt/datagrid/standalone/data
にマウントされます。
ボリュームのサイズは、デフォルトで 1 GB です。datagrid-service
を使用してサイズを調整できますが、cache-service
は調整できません。
- 一時または永続
- キャッシュをリモートで作成するときに、一時的または永続的であるかどうかを制御します。永続キャッシュは、キャッシュの定義がストレージボリュームに保存されるため、コンテナーの再起動後も維持されます。デフォルトのキャッシュは常に永続的です。
- Persistent (永続)
-
DataGrid-service
を使用すると、キャッシュエントリーが永続化され、ストレージボリュームのインデックスを作成します。データを確実に保存する必要がある場合には、キャッシュストアを使用して、オプションで外部ファイルベースのストレージまたはデータベースに永続化できます。
4.1.2. パーティション処理
デフォルトでは、OpenShift サービスの Data Grid は、パーティション処理の設定を使用してデータの一貫性を確保します。
-
セグメントの所有者がすべて同じパーティションにある場合を除き、キャッシュエントリーの読み取りおよび書き込み操作を拒否する
DENY_READ_WRITES
競合解決ストラテジー。 -
競合が検出されると、キャッシュからエントリーを削除する
REMOVE_ALL
マージポリシー。
ネットワーク分割は、データがクラスター全体に複製される場合にのみ適用されます。
4.1.3. サービスの可用性の確認
cache-service
および datagrid-service
のテンプレートは、openshift
namespace の Red Hat OpenShift Online および Red Hat OpenShift Container Platform で利用できます。
以下のコマンドを実行して、サービステンプレートが利用可能であることを確認します。
$ oc get templates -n openshift | grep 'cache-service\|datagrid-service'
4.1.3.1. テンプレートのインポート
必要に応じて、以下のように cache-service
および datagrid-service
をインポートします。
- OpenShift クラスターにログインします。
サービステンプレートをインポートします。
$ for resource in cache-service-template.yaml \ datagrid-service-template.yaml do oc create -n openshift -f \ https://raw.githubusercontent.com/jboss-container-images/jboss-datagrid-7-openshift-image/7.3-v1.9/services/${resource} done
ヒント既存のテンプレートを
oc replace --force
で上書きします。
4.2. キャッシュサービスの作成
cache-service
を使用して、最小限の設定でパフォーマンスを最適化して、使用性を高めるクラスターを迅速に設定します。
-
new-app
コマンドでサービスを作成します。 - 必要に応じて、テンプレートパラメーターおよび環境変数を設定します。
以下に例を示します。
最小設定で
cache-service
を作成します。$ oc new-app cache-service \ -p APPLICATION_USER=${USERNAME} \ -p APPLICATION_PASSWORD=${PASSWORD}
3 つのノードとデータレプリケーションを使用して、
cache-service
クラスターを作成します。$ oc new-app cache-service \ -p APPLICATION_USER=${USERNAME} \ -p APPLICATION_PASSWORD=${PASSWORD} \ -p NUMBER_OF_INSTANCES=3 \ -p REPLICATION_FACTOR=2
テンプレートパラメーター
-
APPLICATION_NAME
はアプリケーションの名前を指定します。デフォルトはcache-service
です。 -
NUMBER_OF_INSTANCES
は、OpenShift クラスターの Data Grid のノード数を設定します。デフォルトは1
です。 -
TOTAL_CONTAINER_MEM
は、コンテナーで利用可能なメモリーの合計量(MiB 単位)を設定します。デフォルトは512
です。 -
APPLICATION_USER
は、キャッシュにセキュアにアクセスするためのユーザーを作成します。デフォルト値はありません。常にユーザーを作成する必要があります。 -
APPLICATION_PASSWORD
はユーザーのパスワードを指定します。パスワードを設定しない場合には、サービステンプレートにより、パスワードが無作為に生成されてシークレットとして保存されます。 -
REPLICATION_FACTOR
は各キャッシュエントリーのコピー数を指定します。デフォルトは1
です。 EVICTION_POLICY
は、キャッシュのサイズが Pod で利用可能なメモリー量に達した時のcache-service
の動作を定義します。2 つの値を使用できます。-
evict
はエントリーをキャッシュから削除します。これがデフォルトになります。 -
reject
は、新規エントリーを追加する代わりにContainerFullException
をスローします。
-
環境変数
AB_PROMETHEUS_ENABLE
を使用すると、JMX メトリクスを収集して Data Grid を監視および分析でき、以下の値を指定できます。false
- デフォルトの Prometheus エージェントを使用したモニタリングを無効にします。
true
- デフォルトの Prometheus エージェントでモニタリングを有効にします。Prometheus Operator がインストールされ、実行されている必要があります。サービスの作成後に モニタリングを設定 する必要もあります。
-
AB_PROMETHEUS_JMX_EXPORTER_PORT
は、Data Grid が JMX メトリクスを公開するポートを定義します。デフォルトは9779
です。
アプリケーションの確認
以下の例のように、cache-service
の作成時に、コマンドの出力にパラメーター値およびリソースが表示されます。
--> Deploying template "rhdg-helloworld/cache-service" to project rhdg-helloworld Red Hat Cache Service --------- Red Hat Data Grid is an in-memory, distributed key/value store. * With parameters: ... --> Creating resources ... secret "cache-service" created service "cache-service-ping" created service "cache-service" created statefulset "cache-service" created --> Success ...
Hello World Quickstart のチュートリアル を試してください。
4.3. Data Grid サービスの作成
datagrid-service
を使用してクラスターを設定し、異なるキャッシュ設定とより複雑な Data Grid 機能で使用できるようにします。
-
new-app
コマンドでサービスを作成します。 - 必要に応じて、テンプレートパラメーターおよび環境変数を設定します。
以下に例を示します。
最小設定で
datagrid-service
を作成します。$ oc new-app datagrid-service \ -p APPLICATION_USER=${USERNAME} \ -p APPLICATION_PASSWORD=${PASSWORD}
3 つのノードとモニタリングを有効にして
datagrid-service
クラスターを作成します。$ oc new-app datagrid-service \ -p APPLICATION_USER=${USERNAME} \ -p APPLICATION_PASSWORD=${PASSWORD} \ -p NUMBER_OF_INSTANCES=3 -e AB_PROMETHEUS_ENABLE=true
テンプレートパラメーター
-
APPLICATION_NAME
はアプリケーションの名前を指定します。デフォルトはdatagrid-service
です。 -
NUMBER_OF_INSTANCES
は、OpenShift クラスターの Data Grid のノード数を設定します。デフォルトでは 1 回です。 -
TOTAL_CONTAINER_MEM
は、コンテナーで利用可能なメモリーの合計量(MiB 単位)を設定します。デフォルトは 512 です。 -
APPLICATION_USER
は、キャッシュにセキュアにアクセスするためのユーザーを作成します。デフォルト値はありません。常にユーザーを作成する必要があります。 -
APPLICATION_PASSWORD
はユーザーのパスワードを指定します。パスワードを設定しない場合には、サービステンプレートにより、パスワードが無作為に生成されてシークレットとして保存されます。 -
REPLICATION_FACTOR
は各キャッシュエントリーのコピー数を指定します。デフォルトは 2 です。 -
TOTAL_CONTAINER_STORAGE
は、ファイルベースのストレージボリュームのサイズ(GiB 単位)を設定します。デフォルトでは 1 回です。
環境変数
AB_PROMETHEUS_ENABLE
を使用すると、JMX メトリクスを収集して Data Grid を監視および分析でき、以下の値を指定できます。false
- デフォルトの Prometheus エージェントを使用したモニタリングを無効にします。
true
- デフォルトの Prometheus エージェントでモニタリングを有効にします。Prometheus Operator がインストールされ、実行されている必要があります。サービスの作成後に モニタリングを設定 する必要もあります。
-
AB_PROMETHEUS_JMX_EXPORTER_PORT
は、Data Grid が JMX メトリクスを公開するポートを定義します。デフォルトは9779
です。
アプリケーションの確認
以下の例のように、datagrid-service
の作成時に、コマンドの出力にパラメーター値およびリソースが表示されます。
--> Deploying template "rhdg-helloworld/datagrid-service" to project rhdg-helloworld Red Hat Data Grid Service --------- Red Hat Data Grid is an in-memory, distributed key/value store. * With parameters: ... --> Creating resources ... secret "datagrid-service" created service "datagrid-service-ping" created service "datagrid-service" created statefulset "datagrid-service" created --> Success ...
Hello World Quickstart のチュートリアル を試してください。
第5章 Data Grid REST API の呼び出し
Data Grid サービスは、ポート 8443
で REST エンドポイントを公開します。
デフォルトでは、Data Grid はクライアント接続のデータアクセスと暗号化にユーザー認証を必要とします。
- 認証
-
Data Grid は、
APPLICATION_USER
とAPPLICATION_PASSWORD
パラメーターで指定する認証情報でデータアクセス要求を承認します。 - 暗号化
-
Data Grid Pod が起動すると、TLS 証明書/キーのペアを生成し、それらを
サービス証明書シークレット
に保存します。TLS 証明書は OpenShift 認証局(CA)により署名されます。
5.1. REST API への外部ルートの作成
OpenShift の外部で実行されている REST クライアントは、reencrypt
中断が含まれるルートを使用して Data Grid Pod にアクセスします。
手順
reencrypt
中断を含めてルートを作成します。$ oc create route reencrypt ${ROUTE_NAME} \ --port=https \ --service ${APPLICATION_NAME}
以下に例を示します。
$ oc create route reencrypt cache-service-https-route \ --port=https \ --service cache-service
以下のように、
oc get routes
を実行して HTTPS ルートのホスト名を検索します。$ oc get routes NAME HOST/PORT cache-service-https-route cache-service-https-route-rhdg-helloworld.192.0.2.0.nip.io
5.2. REST 呼び出しの作成
前提条件
認証および暗号化用に REST クライアントを設定する。
- OpenShift の場合
-
Pod にマウントされた CA バンドル(
)/var/run/secrets/kubernetes.io/serviceaccount/service-ca.crt
を使用してトラストストアを作成します。 - OpenShift の外部
- OpenShift 環境の CA でトラストストアを作成する。
手順
必要に応じて Data Grid REST API を起動します。
たとえば、
PUT
呼び出しを行い、key:value ペアを追加します。curl -X PUT \ -u ${USERNAME}:${PASSWORD} \ -H 'Content-type: text/plain' \ -d 'world' \ https://${HOSTNAME_FOR_HTTPS_ROUTE}/rest/default/hello
5.2.1. OpenShift CA を使用した REST 呼び出しの確保
ローカルの OpenShift クラスターや Red Hat OpenShift Container Platform 開発インストールなど、CA 証明書が有効でない場合は、service-ca.crt
を使用して REST 呼び出しを行うことができます。
手順
Data Grid Pod から
service-ca.crt
を取得します。$ oc rsync ${pod_name}:/var/run/secrets/kubernetes.io/serviceaccount/..data/service-ca.crt .
REST の呼び出し時に
service-ca.crt
を渡します。curl -X PUT \ -u ${USERNAME}:${PASSWORD} \ --cacert service-ca.crt \ -H 'Content-type: text/plain' \ -d 'world' \ https://${HOSTNAME_FOR_HTTPS_ROUTE}/rest/default/hello
第6章 Hot Rodクライアントの設定
Data Grid サービスは、ポート 11222
で Hot Rod エンドポイントを公開します。
デフォルトでは、Data Grid はクライアント接続のデータアクセスと暗号化にユーザー認証を必要とします。
- 認証
-
Data Grid は、
APPLICATION_USER
とAPPLICATION_PASSWORD
パラメーターで指定する認証情報でデータアクセス要求を承認します。 - 暗号化
-
Data Grid Pod が起動すると、TLS 証明書/キーのペアを生成し、それらを
サービス証明書シークレット
に保存します。TLS 証明書は OpenShift 認証局(CA)により署名されます。
6.1. Hot Rod を使用したトラストストアの設定
trustStorePath
は、Hot Rod クライアント設定の有効な証明書の場所に PEM 形式で設定します。Hot Rod Java クライアントは、パスにあるすべての証明書を使用してインメモリー Java キーストアをビルドします。
OpenShift の場合
-
OpenShift 認証局(CA)バンドルを指定します。
/var/run/secrets/kubernetes.io/serviceaccount/service-ca.crt
OpenShift の外部
service-certs
シークレットからtls.crt
を取得します。$ oc get secret service-certs \ -o jsonpath='{.data.tls\.crt}' \ | base64 -d > tls.crt
-
クライアント設定で
tls.crt
へのパスを指定します。
6.2. クライアントのインテリジェンス
クライアントインテリジェンスとは、クライアントが Data Grid ノードにリクエストを見つけて送信できるように、Hot Rod プロトコルが提供するメカニズムを指します。
OpenShift の場合
クライアントは Pod の内部 IP アドレスにアクセスできるため、任意のクライアントのインテリジェンスを使用できます。デフォルトのインテリジェンスである HASH_DISTRIBUTION_AWARE
が推奨されます。これにより、クライアントはリクエストをプライマリオーナーにルーティングできるようになり、パフォーマンスが向上します。
OpenShift の外部
BASIC
インテリジェンスのみを使用します。
6.3. Hot Rod の外部ルートの作成
OpenShift の外部で実行されている Hot Rod クライアントは、passthrough
中断が含まれるルートを使用して Data Grid Pod にアクセスします。
前提条件
- クライアント接続を暗号化するように Data Grid Server を設定します。
手順
passthrough
中断を含めてルートを作成します。$ oc create route passthrough ${ROUTE_NAME} \ --port=hotrod \ --service ${APPLICATION_NAME}
以下に例を示します。
$ oc create route passthrough cache-service-hotrod-route \ --port=hotrod \ --service cache-service
.spec.host
から Hot Rod ルートホスト名を取得します。$ oc get route cache-service-hotrod-route -o jsonpath="{.spec.host}" cache-service-hotrod-route-rhdg-helloworld.192.0.2.0.nip.io
6.4. Data Grid サービスのホスト名
Hot Rod クライアントの場所に対応する Data Grid のホスト名を使用します。
同じ OpenShift namespace:
APPLICATION_NAME
を使用します。
以下に例を示します。
.host("cache-service")
異なる OpenShift namespace:
APPLICATION_NAME.SERVICE_NAMESPACE.svc
の形式で内部サービス DNS 名を使用します。
以下に例を示します。
.host("cache-service.rhdg-helloworld.svc")
OpenShift の外部
Hot Rod ルートホスト名を使用します。
以下に例を示します。
.host("cache-service-hotrod-route-rhdg-helloworld.192.0.2.0.nip.io")
6.5. プログラムで Hot Rod クライアントの設定
ConfigurationBuilder
クラスを使用して、Data Grid クラスターにアクセスするように Hot Rod クライアントをプログラムで設定します。
-
create()
メソッドを呼び出して、RemoteCacheManager
に渡すことができる設定 Bean を作成します。 -
authentication()
とssl()
メソッドを使用して認証と暗号化を設定します。
6.5.1. OpenShift の Hot Rod 設定ビルダー
OpenShift で実行されている Hot Rod クライアントの設定 Bean:
ConfigurationBuilder builder = new ConfigurationBuilder(); builder.addServer() // Connection .host("${APPLICATION_NAME}.${SERVICE_NAMESPACE}.svc").port(11222) .security() // Authentication .authentication().enable() .username("${USERNAME}") .password("${PASSWORD}") .serverName("${APPLICATION_NAME}") .saslMechanism("DIGEST-MD5") .saslQop(SaslQop.AUTH) // Encryption .ssl() .trustStorePath(/var/run/secrets/kubernetes.io/serviceaccount/service-ca.crt);
6.5.2. Outside OpenShift 外の Hot Rod 設定ビルダー
OpenShift の外部で実行されている Hot Rod クライアントの設定 Bean:
ConfigurationBuilder builder = new ConfigurationBuilder(); builder.addServer() // Connection .host("${HOTROD_ROUTE_HOSTNAME}").port(443) // Use BASIC client intelligence. .clientIntelligence(ClientIntelligence.BASIC) .security() // Authentication .authentication().enable() .username("${USERNAME}") .password("${PASSWORD}") .serverName("${APPLICATION_NAME}") .saslMechanism("DIGEST-MD5") .saslQop(SaslQop.AUTH) // Encryption .ssl() .sniHostName("${HOTROD_ROUTE_HOSTNAME}") .trustStorePath(path/to/tls.crt);
6.6. Hot Rod クライアントプロパティーの設定
Hot Rod クライアント設定プロパティーを使用して、Data Grid ホスト名とポート、認証情報、および TLS 証明書を指定します。
手順
-
Hot Rod クライアント設定が含まれる
hotrod-client.properties
ファイルを作成します。 -
hotrod-client.properties
をクラスパスに追加します。
6.6.1. OpenShift での Hot Rod 設定プロパティー
OpenShift で実行される Hot Rod クライアントの設定プロパティー:
# Connection infinispan.client.hotrod.server_list=${APPLICATION_NAME}.${SERVICE_NAMESPACE}.svc:11222 # Authentication infinispan.client.hotrod.use_auth=true infinispan.client.hotrod.auth_username=${USERNAME} infinispan.client.hotrod.auth_password=${PASSWORD} infinispan.client.hotrod.auth_server_name=${APPLICATION_NAME} infinispan.client.hotrod.sasl_mechanism=DIGEST-MD5 infinispan.client.hotrod.sasl_properties.javax.security.sasl.qop=auth # Encryption infinispan.client.hotrod.trust_store_path=/var/run/secrets/kubernetes.io/serviceaccount/service-ca.crt
6.6.2. OpenShift 外の Hot Rod 設定プロパティー
OpenShift の外部で実行される Hot Rod クライアントの設定プロパティー:
# Connection infinispan.client.hotrod.server_list=${HOTROD_ROUTE_HOSTNAME}:443 # Use BASIC client intelligence. infinispan.client.hotrod.client_intelligence=BASIC # Authentication infinispan.client.hotrod.use_auth=true infinispan.client.hotrod.auth_username=${USERNAME} infinispan.client.hotrod.auth_password=${PASSWORD} infinispan.client.hotrod.auth_server_name=${APPLICATION_NAME} infinispan.client.hotrod.sasl_mechanism=DIGEST-MD5 infinispan.client.hotrod.sasl_properties.javax.security.sasl.qop=auth # Encryption infinispan.client.hotrod.sni_host_name=${HOTROD_ROUTE_HOSTNAME} infinispan.client.hotrod.trust_store_path=path/to/tls.crt
第7章 キャッシュのリモート作成
cache-service
でキャッシュをリモートで作成する場合は、キャッシュを一時的か、永続的か、さらにデータをクラスター全体に複製するかどうかを設定できます。
datagrid-service
を使用してキャッシュをリモートで作成する場合にカスタム設定を定義できます。
以下のように、Hot Rod プロトコルを使用して、cache-service
と datagrid-service
を使用して、キャッシュ定義をリモートで作成します。
-
RemoteCacheManager
クラスをインスタンス化して、サービスに接続します。 以下の例のように
createCache()
メソッドを呼び出してキャッシュを作成します。private static void createCache(String appName) { //Connect to the Hot Rod service. final String host = appName; //Use the configuration bean. ConfigurationBuilder cfg = ... System.out.printf("--- Connecting to %s ---%n", appName); //Create a new RemoteCacheManager and start it. final RemoteCacheManager remote = new RemoteCacheManager(cfg.build()); //Set a name for the cache. final String cacheName = "custom"; System.out.printf("--- Creating cache in %s ---%n", appName); //Perform remote administration operations. remote.administration() //Include a flag to make the cache permanent. .withFlags(CacheContainerAdmin.AdminFlag.PERMANENT) //Create a cache on the remote server. //Pass null instead of XML to use the default cache configuration. .createCache(cacheName, null); System.out.printf("--- Cache '%s' created in '%s' ---%n", cacheName, appName); }
注記名前付きキャッシュがすでに存在する場合には、例外が発生します。別の方法は以下のとおりです。
-
RemoteCacheManagerAdmin
のgetOrCreateCache
メソッドを呼び出し、例外をスローせずにキャッシュ名を返します。 -
RemoteCacheManagerAdmin
でremoveCache
メソッドを呼び出してキャッシュを破棄してから、再度createCache
を呼び出します。
-
クイックスタートチュートリアルの 1 つを試してください。
第8章 ファイルベースのキャッシュストアの定義
datagrid-service
を使用してファイルベースのキャッシュストアを定義して、データを外部ストレージに永続化します。
XMLStringConfiguration
クラスを使用して、Hot Rod インターフェースを介して XML 設定を文字列として提供します。
- XML は Data Grid 設定スキーマで有効である必要があります。
-
data
フォルダーはPersistentVolume
でコンテナーが再起動されても有効なままであるため、ファイルストアの場所として、/opt/datagrid/standalone/data
にマウントされるストレージボリュームに配置する必要があります。
たとえば、以下の main
メソッドは、ファイルストアを含む分散設定でキャッシュを作成します。
public static void main(String[] args) { ConfigurationBuilder cfg = ... RemoteCacheManager rcm = new RemoteCacheManager(build); String xml = String.format( "<infinispan>" + "<cache-container>" + "<distributed-cache name=\"%1$s\">" + "<persistence passivation=\"false\">" + "<file-store " + "shared=\"false\" " + "fetch-state=\"true\" " + "path=\"${jboss.server.data.dir}/datagrid-infinispan/%1$s\"" + "/>" + "</persistence>" + "</distributed-cache>" + "</cache-container>" + "</infinispan>", "cacheName" ); RemoteCache<Object, Object> index = rcm.administration() //Include a flag to make the cache permanent. .withFlags(CacheContainerAdmin.AdminFlag.PERMANENT) //Create a cache with the XML configuration .createCache("cacheName", new XMLStringConfiguration(xml)); System.out.println(index.size()); }
有効な file-store
設定オプションの詳細は、「Data Grid 設定スキーマ」を参照してください。
詳細は、Javadoc を参照してください。
第9章 Data Grid デプロイメント設定テンプレートの使用
9.1. Data Grid デプロイメント設定テンプレート
Data Grid は、さまざま設定で Data Grid for OpenShift をデプロイできるようにする一連のテンプレートを提供します。
Data Grid 7.3 以降、これらのデプロイメント設定テンプレートが非推奨になりました。代わりに cache-service
または datagrid-service
サービステンプレートを使用する必要があります。詳細は、「 Red Hat Data Grid でサポートされる構成 」を参照してください。
Template | 詳細 |
---|---|
| 認証または暗号化なしで、OpenShift 向けの Data Grid を実行します。 |
| HTTPS ルートのある Data Grid for OpenShift を実行して、キャッシュに安全にアクセスします。ネットワークトラフィックの暗号化に OpenShift シークレット が必要です。 |
| MySQL データベースを使用する Data Grid for OpenShift を一時キャッシュストアとして実行します。ネットワークトラフィックの暗号化に OpenShift シークレット が必要です。 |
| MySQL データベースを使用する Data Grid for OpenShift を永続キャッシュストアとして実行します。ネットワークトラフィックの暗号化に OpenShift シークレット が必要です。 |
| PostgreSQL データベースを使用する Data Grid for OpenShift を一時キャッシュストアとして実行します。ネットワークトラフィックの暗号化に OpenShift シークレット が必要です。 |
| PostgreSQL データベースを使用する Data Grid for OpenShift を永続キャッシュストアとして実行します。ネットワークトラフィックの暗号化に OpenShift シークレット が必要です。 |
| パーティション設定されたデータディレクトリーで Data Grid for OpenShift を実行します。このディレクトリーは、Pod の再起動時にキャッシュエントリーのメタデータを保存します。 |
9.2. デプロイメント設定テンプレートのインポート
以下のように、OpenShift デプロイメント設定テンプレートを OpenShift にインポートします。
- OpenShift クラスターにログインします。
特定のテンプレートまたはすべてのテンプレートをインポートします。
特定のテンプレートをインポートします。
$ oc create -f \ https://raw.githubusercontent.com/jboss-container-images/jboss-datagrid-7-openshift-image/7.3-v1.8/templates/datagrid73-mysql.json
すべてのテンプレートをインポートします。
$ for resource in datagrid73-image-stream.json \ datagrid73-basic.json \ datagrid73-https.json \ datagrid73-mysql-persistent.json \ datagrid73-mysql.json \ datagrid73-partition.json \ datagrid73-postgresql.json \ datagrid73-postgresql-persistent.json do oc create -f \ https://raw.githubusercontent.com/jboss-container-images/jboss-datagrid-7-openshift-image/7.3-v1.8/templates/${resource} done
ヒントoc create
を使用して新規テンプレートをインポートします。oc replace --force
を使用して、既存のテンプレートを上書きします。-n
オプションを使用して、テンプレートをインポートする namespace を指定します。たとえば、-n openshift
はリソースをグローバルopenshift
namespace にインポートします。また、これには管理者権限が必要です。
Data Grid イメージをインポートします。
$ oc -n openshift import-image jboss-datagrid73-openshift:1.9
テンプレートが OpenShift で利用可能であることを確認します。
$ oc get templates -n openshift | grep datagrid73
9.3. OpenShift シークレットのインポート
Data Grid for OpenShift デプロイメント設定によっては、HTTPS および JGroups キーストアが必要です。
Data Grid for OpenShift には、評価目的でインポートできる HTTPS および JGroups キーストアが同梱されます。ただし、実稼働環境ではこのシークレットを使用しないでください。
以下のように、キーストアでシークレットをプロジェクトの namespace にインポートします。
$ oc create \ -f https://raw.githubusercontent.com/jboss-openshift/application-templates/master/secrets/datagrid-app-secret.json
詳細は、以下を参照してください。
9.4. Data Grid for OpenShift のデプロイ
-
new-app
コマンドで新規デプロイメントを作成します。 -
--template
オプションでテンプレートを指定します。 -e
オプションを使用してデプロイメントを設定するには、環境変数を設定します。一括起動の
mycache
という名前のキャッシュを含む datagrid73-basic テンプレートでデプロイメントを作成するには、以下のコマンドを実行します。$ oc new-app --template=datagrid73-basic \ -p USERNAME=${USERNAME} \ -p PASSWORD=${PASSWORD} \ -p CACHE_NAMES=mycache \ -e MYCACHE_CACHE_START=EAGER
サポート対象の環境変数の詳細は、環境変数を参照してください。
9.5. Data Grid for OpenShift の設定
Data Grid for OpenShift デプロイメントを作成したら、環境変数を使用して設定できます。
たとえば、名前 が mycache
のキャッシュを含む datagrid-app
という名前のデプロイメント設定 (dc
) があります。以下のように mycache
を設定して遅延起動します。
$ oc env dc/datagrid-app -e MYCACHE_CACHE_START=LAZY
デプロイメント設定を変更すると、レプリケーションコントローラーは新規バージョンをデプロイします。以下のように更新されたデプロイメント設定を取得します。
$ oc get pods NAME READY STATUS RESTARTS AGE datagrid-app-2-<id> 0/1 Running 0 58s datagrid-app-2-deploy 1/1 Running 0 59s
以下のように設定の変更を確認します。
$ oc env pods/datagrid-app-2-<id> --list # pods datagrid-app-2-<id>, container datagrid-app CACHE_NAMES=mycache MYCACHE_CACHE_START=LAZY PASSWORD=${PASSWORD} USERNAME=${USERNAME} ...
第10章 モニタリングの設定
Prometheus Operator で JMX メトリクスの収集、イベントの監視、Data Grid クラスターの統計を取得します。
ハイレベルでは、以下のようにモニタリング機能を設定します。
-
AB_PROMETHEUS_ENABLE
環境変数をtrue
に設定して、Data Grid を設定します。 - Prometheus Operator をインストールし、Prometheus Web UI を公開します。
- Data Grid メトリクスを Prometheus にエクスポートします。
- Prometheus を有効にして、メトリクスがないか Data Grid を監視します。
10.1. Prometheus Operator のデプロイ
Prometheus Operator をインストールするには、以下のドキュメントを参照してください。
Monitoring Data Grid Quickstart Tutorial を試してください。
10.2. Data Grid メトリクスの Prometheus への公開
Data Grid から Prometheus に JMX メトリクスを公開するサービスを追加します。
メトリクスサービスを定義する
service-metrics.yaml
ファイルを作成します。apiVersion: v1 kind: Service metadata: annotations: description: Expose Data Grid metrics to Prometheus. labels: app: datagrid-service application: datagrid-service template: datagrid-service metrics: datagrid name: datagrid-app-metrics spec: ClusterIP: None ports: # Set the port name where Data Grid publishes metrics. # You add the port name to service-monitor.yaml. - name: web port: 8080 protocol: TCP targetPort: 9779 selector: deploymentConfig: datagrid-service sessionAffinity: None
service-metrics.yaml
を適用します。$ oc apply -f service-metrics.yaml
10.3. Prometheus による Data Grid の監視の有効化
サービスモニターを使用することで、Prometheus は Data Grid メトリクスサービスに接続できます。
ServiceMonitor
オブジェクトの定義を保持するservice-monitor.yaml
ファイルを作成します。apiVersion: monitoring.coreos.com/v1 kind: ServiceMonitor metadata: name: datagrid-service-monitor labels: team: frontend spec: selector: matchLabels: metrics: datagrid endpoints: # Set the name of the port where Data Grid publishes metrics. # You create this port in service-metrics.yaml. - port: web
service-monitor.yaml
を適用します。$ oc apply -f service-monitor.yaml
第11章 Data Grid for OpenShift クラスターの設定
11.1. クラスター検出の設定
Data Grid for OpenShift は、クラスタリングに Kubernetes または DNS 検出メカニズムのいずれかを使用できます。これらの検出メカニズムにより、イメージはクラスターに自動的に参加できます。
Data Grid for OpenShift テンプレートとサービスはデフォルトで DNS を使用します。イメージまたはカスタムテンプレートから Data Grid for OpenShift を直接デプロイする場合には、適切な検出メカニズムを設定する必要があります。
11.1.1. DNS_PING の設定
クラスタリングに DNS 検出メカニズムを設定するには、以下の手順を実施します。
openshift.DNS_PING
をJGROUPS_PING_PROTOCOL
環境変数の値として設定します。JGROUPS_PING_PROTOCOL=openshift.DNS_PING
クラスターの ping サービスの名前を
OPENSHIFT_DNS_PING_SERVICE_NAME
環境変数の値として指定します。OPENSHIFT_DNS_PING_SERVICE_NAME=${PING_SERVICE_NAME}
ping サービスを
OPENSHIFT_DNS_PING_SERVICE_PORT
環境変数の値として公開するポート番号を指定します。デフォルト値は8888
です。OPENSHIFT_DNS_PING_SERVICE_PORT=${PING_SERVICE_NAME}
以下の例のように、ping ポートを公開する ping サービスを定義します。
apiVersion: v1 kind: Service spec: clusterIP: None ports: - name: ping port: 8888 protocol: TCP targetPort: 8888 selector: deploymentConfig=datagrid-service metadata: annotations: description: The JGroups ping port for clustering. service.alpha.kubernetes.io/tolerate-unready-endpoints: 'true'
重要clusterIP: None
を設定して、サービスがヘッドレスになるようにする必要があります。同様に、ping ポートの名前を指定して、service.alpha.kubernetes.io/tolerate-unready-endpoints: 'true'
アノテーションを追加する必要があります。
11.1.2. KUBE_PING の設定
クラスタリングに Kubernetes 検出メカニズムを設定するには、以下の手順を実施します。
openshift.KUBE_PING
をJGROUPS_PING_PROTOCOL
環境変数の値として設定します。JGROUPS_PING_PROTOCOL=openshift.KUBE_PING
OpenShift プロジェクト名を
OPENSHIFT_KUBE_PING_NAMESPACE
環境変数の値として指定します。この変数を設定しない場合には、サーバーは単一ノードのクラスターのように動作します。OPENSHIFT_KUBE_PING_NAMESPACE=${PING_NAMESPACE}
OPENSHIFT_KUBE_PING_LABELS
環境変数でクラスターラベルを指定します。この変数を設定しない場合には、アプリケーションの外部ではあるが、同じ namespace 内にある Pod が参加使用とします。OPENSHIFT_KUBE_PING_LABELS=labelKey=labelValue
Kubernetes REST API にアクセスできるように、Pod が実行されているサービスアカウントに認可を付与します。たとえば、以下のように datagrid-service-account に認可を付与します。
oc policy add-role-to-user view \ system:serviceaccount:$(oc project -q):datagrid-service-account \ -n $(oc project -q)
ポート
8888
が Pod コンテナーの ping ポートとして定義されていることを確認します。ports: - containerPort: 8888 name: ping protocol: TCP
11.2. JGroups 暗号化の設定
Data Grid for OpenShift は JGroups テクノロジーを使用して、以下のオプションを使用してクラスター化されたサーバー間のトラフィックを保護します。
- 認証
クラスターへの参加時にノードがパスワードで認証する必要がある JGroups
AUTH
プロトコルを使用します。JGROUPS_CLUSTER_PASSWORD
環境変数を使用して認証を設定します。この環境変数は、クラスターへの参加時に使用するノードのパスワードを設定します。パスワードはクラスター全体で同じである必要があります。- 対称の暗号化
JGroups
SYM_ENCRYPT
プロトコルを使用して、JGroups キーストア(.jceks
)でトラフィックを保護します。これはデフォルトの暗号化プロトコルです。JGroups
AUTH
プロトコルは対称暗号化では任意です。JGroups キーストアには、通信のセキュリティーを確保するために、クラスターの各ノードが使用する認証情報が含まれます。
- 非対称の暗号化
JGroups
ASYM_ENCRYPT
プロトコルを使用して、公開鍵/秘密鍵の暗号化でトラフィックのセキュリティを保護します。JGroups
AUTH
プロトコルと非対称暗号化が必要です。コーディネーターノードはシークレットキーを生成します。ノードがクラスターに参加すると、コーディネーターからシークレットキーを要求し、その公開鍵を提供します。コーディネーターは公開鍵で秘密鍵を暗号化し、ノードに返します。次にノードはシークレットを復号化してインストールし、クラスター内の他のノードとセキュアに通信できるようにします。
11.2.1. 対称暗号化の設定
対称暗号化を使用するには、以下を実行します。
トラフィックを暗号化する認証情報を含めて JGroups キーストア(
.jceks
)を作成します。Java keytool を使用して JGroups キーストアを生成できます。
JGroups キーストアをシークレットとして OpenShift にデプロイします。
- OpenShift クラスターにログインします。
JGroups キーストアのシークレットを作成します。たとえば、名前が
jgroups.jceks
のキーストアからjgroups-secret
という名前のシークレットを作成するには、以下を実行します。$ oc create secret generic jgroups-secret \ --from-file=jgroups.jceks
シークレットをデフォルトのサービスアカウントにリンクします。
$ oc secrets link default jgroups-secret
シークレットをコンテナーにマウントします。
$ oc set volumes dc/datagrid \ --add -t secret \ --secret-name='jgroups-secret' \ --mount-path='/keystores/jgroups'
-
クラスター内のノードごとに、
JGROUPS_ENCRYPT_PROTOCOL
環境変数の値をSYM_ENCRYPT
に設定します。 以下の環境変数と JGroups キーストアを使用するように、クラスターの各ノードを設定します。
JGROUPS_ENCRYPT_KEYSTORE
- クラスタートラフィックを暗号化するために JGroups キーストアを指定します。
JGROUPS_ENCRYPT_KEYSTORE_DIR
- JGroups キーストアが存在するディレクトリーを指定します。
JGROUPS_ENCRYPT_SECRET
- キーストアの OpenShift シークレットと同じものを指定します。
JGROUPS_ENCRYPT_NAME
- キーストアのユーザー名と同じものを指定します。
JGROUPS_ENCRYPT_PASSWORD
- キーストアのパスワードと同じものを指定します。
-
必要な場合は、
JGROUPS_CLUSTER_PASSWORD
環境変数でクラスターへの参加時に使用するノードのパスワードを設定します。
11.2.2. 非対称暗号化の設定
非対称暗号化を使用するには、以下を行います。
-
JGROUPS_CLUSTER_PASSWORD
環境変数で認証を設定します。 -
クラスター内のノードごとに、
JGROUPS_ENCRYPT_PROTOCOL
環境変数をASYM_ENCRYPT
に設定します。
第12章 Data Grid for OpenShift のカスタマイズ
Source-to-Image(S2I)プロセスまたは ConfigMap
API を使用して、カスタム設定で Data Grid イメージを使用します。
Red Hat は、Data Grid for OpenShift イメージおよび datagrid-service
と cache-service
テンプレートを使用して、Data Grid クラスターを作成することを推奨します。カスタム設定で Data Grid Pod を作成できますが、datagrid-service
および cache-service
はパフォーマンスが高くなるように設計されており、設定がほぼ必要でないさまざまなユースケースに適しています。
Setting Up Data Grid for OpenShift Services に移動し、Data Grid クラスターをすばやく作成する方法を確認してください。
- Source-to-Image (S2I)
S2I プロセスおよびバイナリービルドを使用して、カスタム Data Grid イメージを作成します。
キャッシュ定義とエンドポイント設定を
openshift-clustered.xml
に追加し、S2I 機能を使用してその設定ファイルを使用するカスタム Data Grid イメージをビルドします。その後、必要に応じてイメージで Data Grid Pod を作成できます。設定を変更するには、新規イメージを構築する必要があります。ただし、カスタムイメージを再構築すると、新しい設定変更で Data Grid Pod が自動的に再デプロイされます。
- ConfigMap API
Red Hat OpenShift
ConfigMap
API を使用して、Data Grid Pod を動的に設定します。namespace の
ConfigMap
オブジェクトに Data Grid Pod としてマッピングするstandalone.xml
でカスタム設定を定義します。Data Grid 設定を変更してから、Pod を再デプロイして設定変更を読み込むことができます。ただし、standalone.xml
を変更しても、Data Grid Pod は自動的に再デプロイされません。設定の変更を読み込むには、Pod を手動で再デプロイする必要があります。Data Grid Pod を作成する前に、
standalone.xml
ですべてのキャッシュおよびエンドポイント設定を明示的に定義する必要があります。デプロイメントの前にプレースホルダーが存在しない限り、キャッシュおよびエンドポイント設定の環境変数は有効になりません。たとえば、以下は
JGROUPS_PING_PROTOCOL
のプレースホルダーになります。<!-- ##JGROUPS_PING_PROTOCOL## -->
利用可能なプレースホルダーを確認するには、clustered-openshift.xml を参照してください。
-
クライアントをサーバートラフィックに暗号化するには、
standalone.xml
でサーバーアイデンティティーを設定する必要があります。 -
DATAGRID_SPLIT
環境変数は、ConfigMap
API 経由でカスタマイズする Data Grid for OpenShift Pod には影響を与えません。これらの Pod はDATAGRID_SPLIT
で共有永続ボリュームを使用できません。
12.1. Data Grid のクローン作成例
Data Grid for OpenShift イメージソースリポジトリーのクローンを作成します。
$ git clone git@github.com:jboss-container-images/jboss-datagrid-7-openshift-image.git .
以下のように、
docs/examples
ディレクトリーの内容を表示します。$ cd jboss-datagrid-7-openshift-image/docs/examples/s2i/configuration $ tree . ├── s2i │ └── configuration │ └── clustered-openshift.xml └── user-configuration ├── standalone.xml └── user-config-template.yaml
- S2I
clustered-openshift.xml
を、Data Grid for OpenShift イメージ内の${JBOSS_HOME}/standalone/configuration/
に挿入します。ヒントカスタムの logging.properties および application-role.properties を
設定ディレクトリー
に追加して、カスタムイメージのビルド時に追加します。- ConfigMap
-
standalone.xml
を、Data Grid for OpenShift 内の/opt/datagrid/standalone/configuration/user
ディレクトリーにマッピングします。
12.2. カスタム設定を使用した S2I ビルドの作成
12.2.1. Data Grid イメージの設定
カスタマイズのソースとして、OpenShift イメージの Data Grid が必要です。
Data Grid for OpenShift イメージが利用可能かどうかを確認します。
$ oc get images | grep jboss-datagrid73-openshift
イメージが利用できない場合は、イメージストリームを作成してインポートします。
$ oc create -f https://raw.githubusercontent.com/jboss-container-images/jboss-datagrid-7-openshift-image/7.3-v1.9/templates/datagrid73-image-stream.json $ oc import-image jboss-datagrid73-openshift --from='registry.redhat.io/jboss-datagrid-7/datagrid73-openshift:1.9'
12.2.2. カスタム Data Grid イメージの作成
Data Grid for OpenShift イメージを使用して、新しいバイナリービルドを作成します。
$ oc new-build jboss-datagrid73-openshift:1.9 --binary=true --name=custom-datagrid
--from-dir="."
を指定できるように、s2i
ディレクトリーに移動します。S2I プロセスがカスタム設定を検出できるように、configuration
ディレクトリーを追加する必要があります。設定例を使用するには、以下を行います。
$ cd jboss-datagrid-7-openshift-image/docs/examples/s2i/
カスタム設定で Data Grid for OpenShift イメージをビルドします。
$ oc start-build custom-datagrid --from-dir="." --follow Uploading directory "." as binary input for the build ... ... Push successful
イメージが利用可能であることを確認します。
$ oc get images | grep custom-datagrid
12.2.3. カスタム Data Grid イメージの確認
ビルド Pod が実行されていることを確認します。
$ oc get pods NAME READY STATUS RESTARTS AGE custom-datagrid-1-build 0/1 Completed 0 38s
カスタム設定で Data Grid アプリケーションを作成します。
$ oc new-app custom-datagrid \ -p APPLICATION_USER=${USERNAME} \ -p APPLICATION_PASSWORD=${PASSWORD}
カスタムの Data Grid アプリケーションが実行を開始するまで待機します。
$ oc get pods -w NAME READY STATUS RESTARTS AGE custom-datagrid-1-build 0/1 Completed 0 8m custom-datagrid-1-<id> 1/1 Running 0 11s
カスタム Data Grid Pod の bash シェルにリモートでアクセスします。
$ oc exec -it ${pod-name} -- /bin/bash
以下のように
clustered-openshift.xml
を表示して、設定を確認します。$ cat /opt/datagrid/configuration/clustered-openshift.xml
clustered-openshift.xml
にカスタム設定が含まれる場合は、Data Grid Pod はそれを使用します。必要に応じて、以下のように、Data Grid コマンドラインインターフェースを使用して、設定を確認できます。$ /opt/datagrid/bin/cli.sh -c
設定を確認してから、リモートセッションを終了します。
$ exit
12.3. ConfigMap API を使用した OpenShift Pod のカスタム Data Grid の作成
Data Grid for OpenShift Pod のカスタムテンプレートを作成します。
- テンプレートに必要なポートおよびサービスを公開します。
-
configMap
オブジェクトをカスタムテンプレートに追加します。 -
コンテナーの設定ボリュームを
/opt/datagrid/standalone/configuration/user
に追加します。 カスタムテンプレートを OpenShift にインポートします。
サンプルテンプレートを使用するには、以下を実行します。
$ cd jboss-datagrid-7-openshift-image/docs/examples/user-configuration/
$ oc create -f user-config-template.yaml
以下のように、OpenShift プロジェクトに ConfigMap を作成します。
$ oc create configmap user-config --from-file="."
カスタム設定で Data Grid Pod を作成します。
$ oc new-app user-config \ -p APPLICATION_NAME=${USERNAME} \ -e USER_CONFIG_MAP=true
ここで、
-
APPLICATION_NAME
はサンプルのテンプレートで必須のパラメーターで、custom-datagrid
にデフォルト設定されます。 USER_CONFIG_MAP=true
は ConfigMap を Data Grid Pod に適用します。以下のように、サンプルテンプレートでこれを設定します。- env: - name: USER_CONFIG_MAP value: "true"
-
12.3.1. ConfigMap API を使用したカスタムの Data Grid for OpenShift Pod の確認
カスタムの Data Grid アプリケーションが実行を開始するまで待機します。
$ oc get pods -w NAME READY STATUS RESTARTS AGE user-config-0 0/1 Running 7 17m
コンテナーログを確認します。
$ oc logs ${pod-name} | grep standalone.xml INFO Running jboss-datagrid-7/datagrid73-openshift image, version 1.9 with user standalone.xml
12.4. 永続データソースの設定
Data Grid を使用すると、キャッシュに保存されているデータをデータソースに永続化できます。Red Hat Data Grid for OpenShift には、以下の 2 種類のデータソースがあります。
OpenShift で実行される内部データソース。これらのデータソースは Red Hat Container Registry から入手でき、追加の環境ファイルを設定する必要はありません。
注記内部データソースには、PostgreSQL、MySQL、および MongoDB が含まれます。ただし、現在、Red Hat Data Grid for OpenShift は PostgreSQL と MySQL のみをサポートしています。
- OpenShift で実行されない外部データソース。これらの外部データソースは、OpenShift のシークレットに追加する環境ファイルで設定する必要があります。
12.4.1. 内部データソースの設定
DB_SERVICE_PREFIX_MAPPING
環境変数は、内部データソースの JNDI マッピングを定義します。
複数の JNDI マッピングを、DB_SERVICE_PREFIX_MAPPING
環境変数のコンマ区切りの値として定義できます。Data Grid for OpenShift イメージのを実行すると、起動スクリプトは JNDI マッピングごとに個別のデータソースを作成します。次に、Data Grid for OpenShift は各データソースを自動的に検出します。
JNDI マッピングを定義するには、以下の形式で環境変数の値を指定します。
${POOL_NAME}-${DATABASE_TYPE}=${PREFIX}
-
${POOL_NAME}
はデータソースのpool-name
属性です。簡単に識別でき、分かりやすい英数字値を使用します。この値には特殊文字を使用できません。同様に、値には小文字以外は使用できません。 ${DATABASE_TYPE}
は使用するデータベースドライバーを指定します。同様に、値には小文字以外は使用できません。注記{$DATABASE_TYPE}
でサポートされる値はmysql
およびpostgresql
のみです。-
${PREFIX}
は、データソースを設定する環境変数の名前に使用します。
12.4.1.1. 単一データソースの例
test-postgresql=TEST
を DB_SERVICE_PREFIX_MAPPING
環境変数の値として指定すると、次の名前でデータソースが作成されます。
java:jboss/datasources/test_postgresql
データソースの他の環境変数を指定する場合は、TEST
プレフィックスを使用する必要があります。たとえば、ユーザー名とパスワードを設定するには、TEST_USERNAME
と TEST_PASSWORD
を環境変数として使用します。
12.4.1.2. 複数のデータソースの例
cloud-postgresql=CLOUD,test-mysql=TEST_MYSQL
を DB_SERVICE_PREFIX_MAPPING
環境変数の値として指定すると、以下の名前で 2 つのデータソースが作成されます。
-
java:jboss/datasources/test_mysql
-
java:jboss/datasources/cloud_postgresql
データソースの他の環境変数を指定する場合には、TEST_MYSQL
プレフィックスを使用して MySQL データソースを設定する必要があります。たとえば、TEST_MYSQL_USERNAME
を環境変数として使用し、ユーザー名を指定します。
同様に、CLOUD
プレフィックスを使用して PostgreSQL データソースを設定する必要があります。たとえば、CLOUD_USERNAME
を環境変数として使用し、ユーザー名を指定します。
12.4.2. 外部データソースの設定
外部データソースを使用するには、カスタムイメージテンプレートを定義し、次に Source-to-Image(S2I)ビルドツールを使用してイメージを作成します。S2I は、アプリケーションのソースコードをインプットとして取り、組み立てられたアプリケーションをアウトプットとして実行する新規イメージを作成するフレームワークです。
以下にプロセスの概要を説明します。
イメージテンプレート JSON で
CUSTOM_INSTALL_DIRECTORIES
環境変数を指定します。この変数は、以下の例のように S2I アーティファクトの場所を定義します。{ "name": "CUSTOM_INSTALL_DIRECTORIES", "value": "extensions/*" }
そのディレクトリーに
install.sh
スクリプトを作成します。このスクリプトは、イメージに外部データソースのモジュールおよびドライバーをインストールします。以下は、
install.sh
スクリプトの例になります。#!/bin/bash # Import the common functions for # installing modules and configuring drivers source /usr/local/s2i/install-common.sh # Directory where this script is located injected_dir=$1 # Install the modules for the datasource install_modules ${injected_dir}/modules # Configure the drivers for the datasource configure_drivers ${injected_dir}/drivers.properties
データソースの
module.xml
ファイルとドライバーが含まれるmodules
サブディレクトリーを含めます。作成されたイメージはモジュールを使用してクラスを読み込み、依存関係を定義します。たとえば、外部データソースとして Derby を使用する計画を立てます。
derby-10.12.1.1.jar
などのドライバーを取得して、そのドライバーをmodules/org/apache/derby/main/
ディレクトリーに配置する必要があります。同じディレクトリーで、リソースとしてドライバーを定義し、依存関係を宣言する
module.xml
ファイルも作成する必要があります。以下は
module.xml
ファイルの例になります。<?xml version="1.0" encoding="UTF-8"?> <module xmlns="urn:jboss:module:1.3" name="org.apache.derby"> <resources> <resource-root path="derby-10.12.1.1.jar"/> <resource-root path="derbyclient-10.12.1.1.jar"/> </resources> <dependencies> <module name="javax.api"/> <module name="javax.transaction.api"/> </dependencies> </module>
drivers.property
環境変数ファイルで、ドライバー設定プロパティーを定義します。以下は、
drivers.property
ファイルの例です。#DRIVERS DRIVERS=DERBY DERBY_DRIVER_NAME=derby DERBY_DRIVER_MODULE=org.apache.derby DERBY_DRIVER_CLASS=org.apache.derby.jdbc.EmbeddedDriver DERBY_XA_DATASOURCE_CLASS=org.apache.derby.jdbc.EmbeddedXADataSource
イメージのビルドおよびデプロイ後に、データソースの環境変数を指定します。
次は、
DATASOURCES
環境変数でのデータソースの定義例を示しています。# Set a unique prefix for the datasource DATASOURCES=ACCOUNTS_DERBY # Specify other environment variables using the prefix ACCOUNTS_DERBY_DATABASE=accounts ACCOUNTS_DERBY_JNDI=java:/accounts-ds ACCOUNTS_DERBY_DRIVER=derby ACCOUNTS_DERBY_JTA=true ACCOUNTS_DERBY_NONXA=false ACCOUNTS_DERBY_USERNAME=${USERNAME} ACCOUNTS_DERBY_PASSWORD=${PASSWORD} ACCOUNTS_DERBY_XA_CONNECTION_PROPERTY_DatabaseName=/opt/eap/standalone/data/databases/derby/accounts # _HOST and _PORT are required but not used ACCOUNTS_ORACLE_HOST=dummy ACCOUNTS_ORACLE_PORT=1527
12.4.3. データソースの環境変数
DB_SERVICE_PREFIX_MAPPING
設定するデータソースのコンマ区切りリストを定義します。
たとえば、
DB_SERVICE_PREFIX_MAPPING=test-mysql=TEST_MYSQL
です。詳細は、「永 データソースの設定」を参照してください。${NAME}_${DATABASE_TYPE}_SERVICE_HOST
データソースの
connection_url
プロパティーのデータベースサーバーのホスト名または IP を定義します。例:
EXAMPLE_MYSQL_SERVICE_HOST=192.0.2.0
${NAME}_${DATABASE_TYPE}_SERVICE_PORT
- データベースサーバーポートを定義します。
${PREFIX}_USERNAME
- データソースのユーザーを定義します。
${PREFIX}_PASSWORD
- データソースのパスワードを定義します。
${PREFIX}_DATABASE
データソースのデータベース名を定義します。
たとえば、
CLOUD_DATABASE=myDatabase
です。${PREFIX}_DRIVER
データソースの Java データベースドライバーを定義します。
たとえば、
CLOUD_DRIVER=postgresql
です。${PREFIX}_BACKGROUND_VALIDATION
-
バックグラウンドスレッドが、使用前にデータベース接続を検証するかどうかを指定します。この値は
true
またはfalse
(デフォルト)です。デフォルトでは、<validate-on-match>
メソッドが有効です。 ${PREFIX}_BACKGROUND_VALIDATION_MILLIS
-
${PREFIX}_BACKGROUND_VALIDATION
環境変数をtrue
に設定した場合には、検証の発生頻度をミリ秒単位で指定します。デフォルト値は10000
です。 ${PREFIX}_CONNECTION_CHECKER
データベースへの接続を検証する接続チェッカークラスを指定します。
たとえば、
CLOUD_CONNECTION_CHECKER=org.jboss.jca.adapters.jdbc.extensions.postgres.PostgreSQLValidConnectionChecker
です。${PREFIX}_EXCEPTION_SORTER
致命的なデータベース接続例外の発生後に検出およびクリーンアップを行う例外ソータークラスを指定します。
たとえば、
CLOUD_EXCEPTION_SORTER=org.jboss.jca.adapters.jdbc.extensions.mysql.MySQLExceptionSorter
です。${PREFIX}_JNDI
データソースの JNDI 名を定義します。
デフォルトは
java:jboss/datasources/<name>_<database_type>
です。起動スクリプトは、DB_SERVICE_PREFIX_MAPPING
環境変数から値を自動的に生成します。たとえば、
CLOUD_JNDI=java:jboss/datasources/test-postgresql
です。${PREFIX}_JTA
-
非 XA データソースの Java Transaction API(JTA)オプションを定義します。値は
true
(デフォルト)またはfalse
です。 ${PREFIX}_MAX_POOL_SIZE
- データソースの最大プールサイズを定義します。
${PREFIX}_MIN_POOL_SIZE
- データソースの最小プールサイズを定義します。
${PREFIX}_NONXA
-
データソースを非 XA データソースとして定義します。この値は
true
またはfalse
(デフォルト)です。 ${PREFIX}_TX_ISOLATION
データベースの java.sql.Connection トランザクション分離レベルを定義します。
たとえば、
CLOUD_TX_ISOLATION=TRANSACTION_READ_UNCOMMITTED
です。${PREFIX}_URL
非 XA データソースの接続 URL を定義します。
接続 URL を指定しない場合には、起動スクリプトは、
url="jdbc:${DRIVER}://${HOST}:${PORT}/${DATABASE}"
のように他の環境変数からこれを自動的に生成します。ただし、起動スクリプトは、PostgreSQL や MySQL などの内部データソースに対してのみ正しい接続 URL を構築します。他の非 XA データソースを使用する場合は、接続 URL を指定する必要があります。
たとえば、
CLOUD_URL=jdbc:postgresql://localhost:5432/postgresdb
です。${PREFIX}_XA_CONNECTION_PROPERTY_<PROPERTY_NAME>
XA データソースの接続プロパティーを定義します。
データソースに適切なドライバーのドキュメントを参照し、接続に設定できる XA プロパティーを確認してください。
たとえば、
CLOUD_XA_CONNECTION_PROPERTY_DatabaseName=/opt/eap/standalone/data/databases/db/accounts
です。この例では、以下を設定に追加します。
<xa-datasource-property name="DatabaseName">/opt/eap/standalone/data/databases/db/accounts</xa-datasource-property>
第13章 組み込み Data Grid(ライブラリーモード)
Data Grid のカスタム OpenShift アプリケーションへの埋め込み、またはライブラリーモードでの実行は、特定の用途のみを目的としています。
- カスタム Java アプリケーションでローカルキャッシュまたは分散キャッシュを使用して、キャッシュライフサイクルの完全な制御を維持します。さらに、分散ストリームなど、埋め込み Data Grid でのみ使用可能な機能を使用する場合。
- ネットワーク遅延を減らして、キャッシュ操作の速度を向上させます。Hot Rod プロトコルは、標準のクライアントサーバーアーキテクチャーと同等のパフォーマンスを実現するニアキャッシュ機能を提供することに注意してください。
Data Grid を埋め込む場合には、いくつかの制限があります。
- キャッシュストアへの永続性は現在サポートされていません。インメモリーキャッシングに対してのみ Data Grid を埋め込むことができます。
-
DNS_PING
のみがクラスタリングでサポートされます。 -
TCP
は ping ポートでサポートされます。 -
UDP
は、組み込みの Data Grid ではサポートされていません。
Red Hat は、Data Grid を埋め込み、カスタムのキャッシュサーバーを構築してリモートクライアント要求を処理することは全く推奨していません。datagrid-service
サーバー実装を使用してください。この実装は、完全にサポートされており、パフォーマンスの向上やセキュリティー修正が含まれる、通常の更新からの利点を享受できます。
埋め込み Data Grid クイックスタートを試してください。
第14章 Data Grid for OpenShift のトラブルシューティング
14.1. コマンドラインインターフェース (CLI) の起動
Data Grid Management CLI にアクセスし、以下のように Data Grid for OpenShift のトラブルシューティングを行います。
実行中の Pod にリモートシェルセッションを開きます。
$ oc rsh ${POD_NAME}
リモートシェルから Data Grid CLI を起動します。
$ /opt/datagrid/bin/cli.sh
Data Grid Management CLI は、この CLI を実行する Pod にバインドされています。コンテナーの再起動時には、CLI で行った変更は保存されません。
14.2. Pod ログの表示
以下のコマンドを実行して、実行中の Pod のログメッセージを表示します。
$ oc logs -f ${POD_NAME}
第15章 参照資料
15.1. プローブ
Data Grid for OpenShift には、コンテナーヘルスチェックを実行するための Readiness Probe と Liveness Probe が含まれます。
- Liveness Probe
Liveness Probe はコンテナーの
/opt/datagrid/bin/livenessProbe.sh
に配置されています。Liveness Probe は、以下のイベントが発生した場合にサーバーのステータスをテストし、Pod を再起動します。
- Data Grid for OpenShift がエラーで起動する。
- カスタムデプロイメント設定が正常にデプロイされない。
- 1 つ以上のキャッシュのインスタンス化に失敗する。これは通常、キャッシュ設定が有効ではない場合に発生します。
- Readiness Probe
Readiness Probeはコンテナーの
/opt/datagrid/bin/readinessProbe.sh
にあります。Readiness Probe は Pod が要求を受信する準備ができているかどうかを判別し、Data Grid キャッシュレベルの
MBean
をチェックして以下を行われていることを確認します。- すべてのキャッシュインスタンスが初期化されている。
- 分散キャッシュモードを使用している場合は、すべてのキャッシュインスタンスがクラスターに参加している。
- 初期状態遷移が完了している。状態遷移が進行中の場合に、Pod が ready とマークされていない。
- Cache Manager のすべてのキャッシュインスタンスが実行中である。
Readiness Probe と Liveness Probe を使用するようにカスタムデプロイメントを設定するには、以下のコマンドを実行します。
$ oc set probe dc/datagrid \ --readiness \ -- /bin/bash \ -c /opt/datagrid/bin/readinessProbe.sh $ oc set probe dc/datagrid \ --liveness \ -- /bin/bash \ -c /opt/datagrid/bin/livenessProbe.sh
15.2. ポート
Data Grid for OpenShift は以下のポートを使用します。
ポート番号 | プロトコル | 使用方法 |
---|---|---|
8080 | TCP | HTTP アクセス |
8443 | TCP | HTTPS アクセス |
8888 | TCP | JGroups Ping |
11222 | TCP | Hot Rod アクセス |
Data Grid デプロイメント設定テンプレートでは、以下のポートも使用します。
ポート番号 | プロトコル | 使用方法 |
---|---|---|
11211 | TCP | Memcached アクセス |
11333 | TCP | 外部 Hot Rod アクセス |
8778 | TCP | リモート JMX アクセス |
デプロイメント設定テンプレートで HOTROD_SERVICE_NAME 環境変数を設定する場合には、Hot Rod 外部コネクターはエンドポイントに ${service_name}:11333
を返します。
15.3. 管理コンソール
Data Grid 管理コンソールは、Red Hat OpenShift ではサポートされていません。
Data Grid for OpenShift クラスターのイベントを監視して統計情報を取得するには、Prometheus を使用する必要があります。「モニタリングのセットアップ」を参照してください。
管理 CLI を使用して、Data Grid for OpenShift Pod のトラブルシューティングを行うこともできます。「コマンドラインインターフェースの起動」を参照してください。
15.4. 環境変数
15.4.1. 監視およびロギング
AB_PROMETHEUS_ENABLE
JMX メトリクスを収集し、Data Grid を監視および分析できます。デフォルト値は
false
です。デフォルトの Prometheus エージェントでモニタリングを有効にするには、値をtrue
に設定します。Prometheus Operator がインストールされ、実行されている必要があります。また、モニタリングを設定する必要もあります。
AB_PROMETHEUS_JMX_EXPORTER_PORT
-
Data Grid が JMX メトリクスを公開するポートを定義します。デフォルトは
9779
です。 LOGGING_CATEGORIES
以下のように、Data Grid がログメッセージをキャプチャーするカテゴリーとレベルを調整します。
$ LOGGING_CATEGORIES=org.infinipan.core=WARN,org.infinispan.config=DEBUG
ログカテゴリーは Java パッケージ名に対応し、標準ログレベル(
TRACE
,DEBUG
、INFO
、WARN
、ERROR
、およびFATAL
)を使用します。重要LOGGING_CATEGORIES
を指定した場合には、Data Grid では以下のデフォルトのロガーは設定されません。代わりに、Data Grid は、LOGGING_CATEGORIES
で明示的に指定しないすべてのパッケージに対して、デフォルトのレベルのINFO
を使用します。表15.1 デフォルトのロガー
Category レベル com.arjuna
WARN
sun.rmi
WARN
org.jboss.as.config
DEBUG
15.4.2. コンテナー
USERNAME
データへのアクセスが許可されるセキュリティーレルムでユーザーを作成します。
注記デフォルトでは、Hot Rod エンドポイントは
ApplicationRealm
セキュリティーレルムを、REST エンドポイントはjdg-openshift
セキュリティーレルムを使用します。PASSWORD
- ユーザーのパスワードを指定します。
DATAGRID_SPLIT
各ノードのデータディレクトリーをメッシュに分割する必要があるかどうかを決定します。この値は
true
またはfalse
(デフォルト)です。値を
true
に設定する場合は、/opt/datagrid/standalone/partitioned_data
にマウントされる永続ボリュームも設定する必要があります。JAVA_OPTS_APPEND
起動時に
JAVA_OPTS
環境変数にオプションを追加します。例:
JAVA_OPTS_APPEND=-Dfoo=bar
OPENSHIFT_KUBE_PING_LABELS
クラスタリングラベルセレクターを指定します。
たとえば、
OPENSHIFT_KUBE_PING_LABELS=application=eap-app
です。OPENSHIFT_KUBE_PING_NAMESPACE
- クラスタリングプロジェクト namespace を指定します。
TRANSPORT_LOCK_TIMEOUT
分散ロックの取得を待つ時間を設定します。デフォルト値は
240000
です。Data Grid は分散ロックを使用して、状態遷移または再ハッシュ中に一貫したトランザクションログを維持します。つまり、1 つのキャッシュのみが、一度に状態遷移または再ハッシュを実行できます。複数のキャッシュをトランザクションで使用できるため、この制約が採用されます。
15.4.3. キャッシュ
cache-service
および datagrid-service
を使用したキャッシュの作成および設定
環境変数を使用して cache-service
または datagrid-service
でキャッシュを作成および設定しないでください。
これらの環境変数は、デプロイメント設定のテンプレートだけで使用することを目的としており、非推奨となっています。
Hot Rod エンドポイントを使用して、キャッシュを動的に cache-service
および datagrid-service
でキャッシュを作成する必要があります。詳細は、「キャッシュのリモート作成」を参照してください。
CACHE_NAMES
設定でキャッシュインスタンスを定義します。
Data Grid デプロイメント設定テンプレートを使用して、キャッシュインスタンスを定義していない場合に、起動スクリプトは
SYNC
モードでデフォルトの分散キャッシュを追加します。ヒント設定の各キャッシュインスタンスに一意の名前を指定します。キャッシュインスタンス間の区別に役立つアンダースコア(_)と説明ラベルを使用します。これにより、キャッシュ固有の設定を適用する時に競合が発生しないようにします。
たとえば、
CACHE_NAMES=addressbook,addressbook_indexed
です。CACHE_CONTAINER_START
キャッシュコンテナーの起動方法を設定します。以下のいずれかを指定します。
-
LAZY
: サービスまたはデプロイメントで要求されたときにキャッシュコンテナーを開始します。これがデフォルトになります。 -
EAGER
: サーバーの起動時にキャッシュコンテナーを起動します。
-
CACHE_CONTAINER_STATISTICS
-
統計を収集するようにキャッシュコンテナーを設定します。値は
true
(デフォルト)またはfalse
です。パフォーマンスを向上させるために、値をfalse
に設定します。 DEFAULT_CACHE
- キャッシュコンテナーのデフォルトキャッシュを設定します。
15.4.3.1. キャッシュコンテナーのセキュリティー設定
CONTAINER_SECURITY_CUSTOM_ROLE_MAPPER_CLASS
ロールマッパーにカスタムプリンシパルのクラスを指定します。
例:
CONTAINER_SECURITY_CUSTOM_ROLE_MAPPER_CLASS=com.acme.CustomRoleMapper
CONTAINER_SECURITY_ROLE_MAPPER
以下の値を使用して、このキャッシュコンテナーのロールマッパーを設定します。
-
identity-role-mapper
: プリンシパル名をロール名として使用します。指定がない場合は、これがデフォルトのロールマッパーになり、CONTAINER_SECURITY_ROLES
環境変数を使用してロール名を定義します。 -
common-name-role-mapper
: プリンシパル名が識別名 (DN) の場合は Common Name (CN) をロール名として使用します。たとえば、DNcn=managers,ou=people,dc=example,dc=com
はmanager
のロール名にマッピングされます。 -
cluster-role-mapper
はClusterRegistry
を使用してプリンシパル名をロールマッピングに保存します。 -
custom-role-mapper
:org.infinispan.security.impl.PrincipalRoleMapper
インターフェースの実装の完全修飾クラス名を使用します。
-
CONTAINER_SECURITY_ROLES
ロール名を定義し、パーミッションを割り当てます。
例:
CONTAINER_SECURITY_ROLES=admin=ALL,reader=READ,writer=WRITE
15.4.3.2. 名前付きキャッシュ設定
キャッシュ名を環境変数の接頭辞として大文字で指定します。このように指定しないと、設定は反映されません。
たとえば、MyCache
と MYCACHE
の 2 つのキャッシュインスタンスを作成します。次に、MyCache_CACHE_TYPE=replicated
を設定して MyCache
インスタンスを設定します。この設定は有効ではありません。ただし、MYCACHE_CACHE_TYPE=replicated
を設定すると、MyCache
と MYCACHE
インスタンスの両方で設定が有効になります。
${CACHE_NAME}_CACHE_TYPE
-
このキャッシュを分散するか、複製するかどうかを決定します。
Distributed
(デフォルト)またはReplicated
のいずれかを指定できます。 ${CACHE_NAME}_CACHE_START
キャッシュの起動方法を設定します。以下のいずれかを指定します。
-
LAZY
: サービスまたはデプロイメントで要求されたときにキャッシュを開始します。これがデフォルトになります。 -
EAGER
: サーバーの起動時にキャッシュを起動します。
-
${CACHE_NAME}_CACHE_BATCHING
-
このキャッシュの呼び出しのバッチ処理を有効にします。この値は
true
またはfalse
(デフォルト)です。 ${CACHE_NAME}_CACHE_STATISTICS
-
統計を収集するようにキャッシュを設定します。値は
true
(デフォルト)またはfalse
です。パフォーマンスを向上させるために、値をfalse
に設定します。 ${CACHE_NAME}_CACHE_MODE
クラスター化されたキャッシュモードを設定します。以下のいずれかを指定します。
-
非同期操作の場合:
ASYNC
。 -
同期操作の場合:
SYNC
。
-
非同期操作の場合:
${CACHE_NAME}_CACHE_QUEUE_SIZE
-
キャッシュが
ASYNC
モードの場合は、レプリケーションキューをフラッシュするしきい値を設定します。デフォルト値は0
(フラッシュは無効)です。 ${CACHE_NAME}_CACHE_QUEUE_FLUSH_INTERVAL
-
ASYNC
モードでレプリケーションキューをフラッシュするスレッドの起動時間をミリ秒単位で指定します。デフォルト値は10
です。 ${CACHE_NAME}_CACHE_REMOTE_TIMEOUT
-
SYNC
モードでリモート呼び出しを行うときにタイムアウトまで確認応答を待つ時間をミリ秒単位で指定します。タイムアウトに達すると、リモート呼び出しが中断され、例外が発生します。デフォルト値は17500
です。 ${CACHE_NAME}_CACHE_OWNERS
-
各キャッシュエントリーのクラスター全体のレプリカの数を指定します。デフォルト値は
2
です。 ${CACHE_NAME}_CACHE_SEGMENTS
-
クラスターごとにハッシュ領域セグメントの数を指定します。推奨値は
10 * クラスターサイズ
です。デフォルト値は80
です。 ${CACHE_NAME}_CACHE_L1_LIFESPAN
-
L1 キャッシュに置かれたエントリーの最大有効期間をミリ秒単位で指定します。デフォルト値は
0
(L1 は無効)です。 ${CACHE_NAME}_CACHE_MEMORY_EVICTION_TYPE
キャッシュ内のエントリーの最大制限を定義します。以下の値を設定できます。
-
COUNT
は、キャッシュ内のエントリーの数を測定します。数が最大値を超えると、Data Grid は未使用のエントリーをエビクトします。 -
MEMORY
は、キャッシュ内のすべてのエントリーが占めるメモリの量を測定します。メモリーの合計サイズが最大値を超えると、Data Grid は未使用のエントリーをエビクトします。
-
${CACHE_NAME}_CACHE_MEMORY_STORAGE_TYPE
Data Grid がエントリーをキャッシュに保存する方法を定義します。以下の値を設定できます。
ストレージタイプ 詳細 エビクションタイプ ポリシー object
エントリーをオブジェクトとして Java ヒープに格納します。これはデフォルトのストレージタイプです。
カウント
TinyLFU
バイナリー
エントリーを
bytes[]
として Java ヒープに格納します。COUNT
またはMEMORY
TinyLFU
off-heap
エントリーを
bytes[]
として Java 外のネイティブメモリーに保存します。COUNT
またはMEMORY
LRU
${CACHE_NAME}_CACHE_MEMORY_EVICTION_SIZE
エビクションの開始前にキャッシュのサイズを設定します。この値は、ゼロよりも大きい数に設定します。
-
COUNT
の場合: サイズはエビクションの開始前にキャッシュが保持できるエントリーの最大数になります。 MEMORY
の場合: サイズはエビクションの開始前にキャッシュがメモリーから消費できる最大バイト数です。たとえば、10000000000
の値は 10 GB です。異なるキャッシュサイズを試し、最適な設定を決定します。キャッシュサイズが大きすぎることが原因で、Data Grid がメモリー不足になる可能性があります。同時に、キャッシュサイズが小さすぎる場合には、利用可能なメモリーを無駄にします。
注記JDBC ストアを設定する場合には、エビクションサイズをゼロより大きい値に設定するとパッシベーションは自動的に有効になります。
-
${CACHE_NAME}_CACHE_MEMORY_EVICTION_STRATEGY
Data Grid がエビクションを実行する方法を制御します。以下の値を設定できます。
ストラテジー 説明 NONE
Data Grid はエントリーを削除しません。これは、エビクションを構成しない限り、デフォルト設定です。
REMOVE
Data Grid は、キャッシュが構成されたサイズを超えないように、メモリーからエントリーを削除します。これは、エビクションを構成するときのデフォルト設定です。
MANUAL
Data Grid は削除を実行しません。削除は、
evict()
メソッドをCache
API から呼び出すことによって手動で行われます。EXCEPTION
Data Grid は、設定されたサイズを超える場合、キャッシュに新しいエントリーを書き込みません。キャッシュに新しいエントリーを書き込む代わりに、Data Grid は
ContainerFullException
スローします。${CACHE_NAME}_CACHE_MEMORY_OFF_HEAP_ADDRESS_COUNT
OFFHEAP
ストレージの使用時に競合を防ぐためにハッシュマップで利用可能なポインターの数を指定します。ハッシュマップの競合を防ぐことで、パフォーマンスが向上します。この値は、キャッシュエントリーの数よりも大きい数に設定します。デフォルトでは、
address-count
は 2^20 または 1048576 です。このパラメーターは常に 2 の累乗に丸められます。
${CACHE_NAME}_CACHE_EXPIRATION_LIFESPAN
-
キャッシュエントリーの最大有効期限(ミリ秒単位)を指定します。この有効期限をすぎると、エントリーはクラスター全体で無効になります。デフォルト値は
-1
(エントリーの有効期限なし)です。 ${CACHE_NAME}_CACHE_EXPIRATION_MAX_IDLE
-
キャッシュエントリーがキャッシュ内で保持される、最大アイドル時間(ミリ秒単位)を指定します。アイドル時間を超えると、エントリー全体が期限切れになります。デフォルト値は
-1
(有効期限なし)です。 ${CACHE_NAME}_CACHE_EXPIRATION_INTERVAL
-
メモリーおよびキャッシュストアから期限切れのエントリーをパージする間隔をミリ秒単位で指定します。デフォルト値は
5000
です。有効期限を無効にするには-1
を設定します。 ${CACHE_NAME}_JDBC_STORE_TYPE
設定する JDBC ストアのタイプを指定します。以下の値を設定できます。
-
string
-
バイナリー
-
${CACHE_NAME}_JDBC_STORE_DATASOURCE
データソースの jndiname を定義します。
たとえば、
MYCACHE_JDBC_STORE_DATASOURCE=java:jboss/datasources/ExampleDS
です。${CACHE_NAME}_KEYED_TABLE_PREFIX
-
キャッシュエントリーテーブルの名前の作成時に使用されるキャッシュ名の先頭にプレフィックスを定義します。defaule 値は
ispn_entry
です。 ${CACHE_NAME}_CACHE_INDEX
キャッシュのインデックスモードを設定します。以下の値を設定できます。
-
NONE
: これはデフォルトです。 -
LOCAL
-
ALL
-
${CACHE_NAME}_INDEXING_PROPERTIES
インデックスシステムに渡すプロパティーのコンマ区切りリストを指定します。
例:
MYCACHE_INDEXING_PROPERTIES=default.directory_provider=ram
${CACHE_NAME}_CACHE_SECURITY_AUTHORIZATION_ENABLED
-
このキャッシュの承認チェックを有効にします。この値は
true
またはfalse
(デフォルト)です。 ${CACHE_NAME}_CACHE_SECURITY_AUTHORIZATION_ROLES
このキャッシュへのアクセスに必要なロールを設定します。
例:
MYCACHE_CACHE_SECURITY_AUTHORIZATION_ROLES=admin, reader, writer
${CACHE_NAME}_CACHE_PARTITION_HANDLING_WHEN_SPLIT
ネットワークイベントを使用してノード間を分離する場合に、クラスターのノード間でパーティションを処理するためのストラテジーを設定します。Data Grid がキャッシュエントリーをマージして単一のクラスターを再形成するまで、パーティションは独立したクラスターとして機能します。以下の値を設定できます。
パーティション処理ストラテジー 詳細 ALLOW_READ_WRITES
任意のパーティションのノードは、キャッシュエントリーを読み書きできます。これはデフォルト値です。
DENY_READ_WRITES
以下の場合に、ノードは degraded モードになります。
* パーティションの 1 つ以上のハッシュスペースセグメントに所有者がない。
所有者
は、キャッシュエントリーのクラスター全体のレプリカ数です。* パーティションに含まれるノードの半分未満が直近の安定したクラスタートポロジーからである。
degraded モードでは、同じパーティションのノードのみがキャッシュエントリーを読み書きできます。キャッシュエントリーの所有者またはコピーがすべて同じパーティションに存在する必要があります。存在しない場合には、
AvailabilityException
で、読み取りまたは書き込み操作に失敗します。ALLOW_READS
ノードは、
DENY_READ_WRITES
ストラテジーと同様に degraded モードになります。任意のパーティションのノードは、キャッシュエントリーを読み取ることができます。degraded モードでは、同じパーティションのノードのみがキャッシュエントリーを書き込みできます。キャッシュエントリーの所有者またはコピーがすべて同じパーティションに存在する必要があります。存在しない場合には、
AvailabilityException
で、書き込み操作に失敗します。${CACHE_NAME}_CACHE_PARTITION_MERGE_POLICY
Data Grid がパーティションのマージ時に、キャッシュエントリー間で競合を解決する方法を設定します。以下の値を設定できます。
マージポリシー 詳細 NONE
パーティションをマージする時に、競合解決は実行されません。これはデフォルト値です。
PREFERRED_ALWAYS
常に
preferredEntry
を使用します。preferredEntry
は、ほとんどのノードが含まれるパーティションに存在するキャッシュエントリーのプライマリーレプリカです。パーティションにあるノードの数が同じ場合には、preferredEntry
は、トポロジー ID が最も高いパーティション (トポロジーが最も新しいパーティション) に存在するキャッシュエントリーになります。PREFERRED_NON_NULL
値(null 以外)がある場合は、
preferredEntry
を使用します。preferredEntry
に値がない場合は、otherEntries
で定義された最初のエントリーを使用します。REMOVE_ALL
競合が存在する場合は、キャッシュからエントリー(キーと値)を削除します。
${CACHE_NAME}_STATE_TRANSFER_TIMEOUT
クラスターの他のキャッシュインスタンスが状態をキャッシュに転送するまで待機する時間(ミリ秒単位)を設定します。タイムアウトが発生する前に他のキャッシュインスタンスが移行状態にならないと、アプリケーションは例外をスローし、起動を中止します。デフォルト値は
240000
(4 分)です。この環境変数を設定するには、カスタムテンプレートを使用する必要があります。デフォルトの Data Grid for OpenShift テンプレートで状態遷移タイムアウトを設定した場合には、有効になりません。
15.4.4. セキュリティードメイン
SECDOMAIN_NAME
-
追加のセキュリティードメインを定義します。例:
SECDOMAIN_NAME=myDomain
SECDOMAIN_PASSWORD_STACKING
-
パスワードステーキングモジュールを有効にし、
useFirstPass
オプションを設定します。この値はtrue
またはfalse
(デフォルト)です。 SECDOMAIN_LOGIN_MODULE
-
使用するログインモジュールを指定します。デフォルト値は
UsersRoles
です。 SECDOMAIN_USERS_PROPERTIES
-
ユーザー定義が含まれるプロパティーファイルを指定します。デフォルト値は
users.properties
です。 SECDOMAIN_ROLES_PROPERTIES
-
ロール定義が含まれるプロパティーファイルを指定します。デフォルト値は
roles.properties
です。
15.4.5. エンドポイント
クライアントは、キャッシュ設定で定義する REST、Hot Rod、および Memcached エンドポイント経由で Data Grid にアクセスできます。
Data Grid for OpenShift と同じプロジェクトで実行されるクライアントは、Hot Rod を介してキャッシュにアクセスし、全クラスタービューを受け取ることができます。これらのクライアントは、一貫性のあるハッシュ機能を使用することもできます。
ただし、クライアントが Data Grid for OpenShift とは別のプロジェクトで実行する場合は、Hot Rod エンドポイントを外部に公開する OpenShift サービスを使用して Data Grid クラスターにアクセスする必要があります。ネットワーク設定によっては、クライアントは一部の Pod にアクセスできない可能性があり、BASIC
クライアントのインテリジェンスを使用する必要があります。この場合、クライアントはデータにアクセスするために追加のネットワークホップが必要になる可能性があり、ネットワークレイテンシーが長くなる可能性があります。
OpenShift で実行されているクライアントへの外部アクセスには、パススルー暗号化中断が含まれるルートが必要です。クライアントは、BASIC
クライアントインテリジェンスと完全修飾ドメイン名も TLS/SNI ホスト名として使用する必要があります。または、外部で利用可能なロードバランサーサービスの背後にある Data Grid クラスターを公開できます。
以下の環境変数でエンドポイントを設定します。
INFINISPAN_CONNECTORS
-
設定するコネクターのコンマ区切りリストを定義します。デフォルトは
hotrod
、memcached
、rest
です。認可または認証がキャッシュで有効になっている場合には、このプロトコルは本来、安全ではないため、memcached
を削除する必要があります。 MEMCACHED_CACHE
-
Memcached コネクターのキャッシュ名を設定します。
CACHE_NAMES
環境変数でキャッシュ名が指定されていない場合には、デフォルトでmemcached
に設定されます。 HOTROD_SERVICE_NAME
外部 Hot Rod コネクターの OpenShift サービスの名前を定義します。
外部の Hot Rod コネクターは、この環境変数を定義する場合に限りデプロイメント設定のテンプレートで使用できます。
cache-service
およびdatagrid-service
は、外部の Hot Rod コネクターを使用しません。たとえば、
HOTROD_SERVICE_NAME=DATAGRID_APP_HOTROD
を設定すると、Hot Rod 外部コネクターはDATAGRID_APP_HOTROD:11333
を返します。REST_STORE_AS_STRING
REST API 経由でキャッシュに書き込まれたときに、Data Grid がエントリーを Java 文字列として保存するかどうかを指定します。この値は
true
またはfalse
(デフォルト)です。以前のバージョンからイメージをアップグレードして、永続化されたキャッシュエントリーを読み取る予定がある場合は、値を
true
に設定します。注記Data Grid バージョン 7.1 以前: REST エンドポイント経由でキャッシュにエントリーを書き込むと、Data Grid は Java 文字列として格納します。
Data Grid バージョン 7.2 以降: Data Grid は、キャッシュエントリーを
bytes[]
として保存し、クライアントとプロトコル間のデータの相互運用性を有効にします。Data Grid for OpenShift イメージをバージョン 7.2 以降にアップグレードする場合は、データストアに永続化されたキャッシュエントリーを読み取ろうとすると、Data Grid は null 値を返します。null 値を解決するには、
REST_STORE_AS_STRING=true
を設定します。