Red Hat Data Grid for OpenShift

Red Hat Data Grid 7.3

Data Grid on OpenShift の実行

概要

Red Hat OpenShift での Red Hat Data Grid コンテナーの設定、カスタマイズ、実行方法を説明します。

第1章 Red Hat Data Grid

Data Grid は、Red Hat OpenShift に伸縮性および拡張性の高いインメモリーデータストアを提供します。

スキーマレスデータ構造
さまざまなオブジェクトをキーと値のペアとして格納する柔軟性があります。
グリッドベースのデータストレージ
クラスター間でデータを分散および複製するように設計されています。
エラスティックスケーリング
サービスを中断することなく、ノードの数を動的に調整して要件を満たします。
データの相互運用性
さまざまなエンドポイントからグリッド内のデータを保存、取得、およびクエリーします。

1.1. Data Grid のドキュメント

Red Hat Data Grid のドキュメント は、Red Hat カスタマーポータルから入手できます。

1.2. Data Grid リポジトリー

1.3. Data Grid イメージの詳細

Red Hat Data Grid for OpenShift イメージは Red Hat Container Registry でホストされており、このレジストリーには、タグ付けされた各バージョンに関する情報と、イメージのヘルスインデックスがあります。

第2章 はじめに

2.1. システム要件

Red Hat Data Grid for OpenShift を使用するには、以下が必要です。

2.2. Data Grid for OpenShift プロジェクトの作成

Data Grid for OpenShift Pod を実行できる、OpenShift プロジェクトを設定します。

  1. OpenShift クラスターにログインします。

    OpenShift を初めて使用する場合は、OpenShift クラスターへのログイン の以下のチュートリアルを試してください。

  2. 以下の例のように、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 からリソースをプルします。
  • レジストリーサービスアカウントトークン認証トークンを使用して複数のホストを設定します。以下を行います。

    1. registry.redhat.io にログインします。
    2. Registry Service Account を作成するか、または選択します。
    3. 認証トークンを生成します。

2.3.1. 認証トークンを使用したホストの設定

以下のように、レジストリーサービスアカウント からホストに認証トークンを追加します。

  1. Docker Login タブを選択し、コマンドをコピーします。
  2. registry.redhat.io からプルする各ホストで docker login コマンドを実行します。
  3. Docker 設定を確認します。

    $ cat ~/.docker/config.json
    ...
    "registry.redhat.io": {
    			"auth": "MTEwMDkx..."
    		}

2.3.2. プルシークレットの作成

OpenShift の内部レジストリーで利用できないセキュリティー保護されたコンテナーイメージをプルするには、以下を実行します。

  1. OpenShift クラスターにログインします。
  2. 以下のように、作業プロジェクトを選択します。

    $ oc project rhdg-helloworld
  3. Docker 設定で汎用のプルシークレットを作成します。

    $ oc create secret generic ${SECRET_NAME} \
      --from-file=.dockerconfigjson=path/to/.docker/config.json \
      --type=kubernetes.io/dockerconfigjson
  4. プルシークレットをサービスアカウントにリンクします。

    $ oc secrets link default ${SECRET_NAME} --for=pull
  5. シークレットをマウントします。

    $ oc secrets link builder ${SECRET_NAME}

トラブルシューティング手順などの詳細は、「Red Hat コンテナーレジストリーの認証」を参照してください。

第3章 Data Grid for OpenShift サービスの設定

3.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 モニタリングなどの高度な機能を提供します。

3.1.1. コンテナーストレージ

cache-service および datagrid-service コンテナーでは、ストレージボリュームが /opt/datagrid/standalone/data にマウントされます。

ボリュームのサイズは、デフォルトで 1 GB です。datagrid-service を使用してサイズを調整できますが、cache-service は調整できません。

一時または永続
キャッシュをリモートで作成するときに、一時的または永続的であるかどうかを制御します。永続キャッシュは、キャッシュの定義がストレージボリュームに保存されるため、コンテナーの再起動後も維持されます。デフォルトのキャッシュは常に永続的です。
Persistent (永続)
DataGrid-service を使用すると、キャッシュエントリーが永続化され、ストレージボリュームのインデックスを作成します。データを確実に保存する必要がある場合には、キャッシュストアを使用して、オプションで外部ファイルベースのストレージまたはデータベースに永続化できます。

3.1.2. パーティション処理

デフォルトでは、OpenShift サービスの Data Grid は、パーティション処理の設定を使用してデータの一貫性を確保します。

  • セグメントの所有者がすべて同じパーティションにある場合を除き、キャッシュエントリーの読み取りおよび書き込み操作を拒否する DENY_READ_WRITES 競合解決ストラテジー。
  • 競合が検出されると、キャッシュからエントリーを削除する REMOVE_ALL マージポリシー。
注記

ネットワーク分割は、データがクラスター全体に複製される場合にのみ適用されます。

3.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'

3.1.3.1. テンプレートのインポート

必要に応じて、以下のように cache-service および datagrid-service をインポートします。

  1. OpenShift クラスターにログインします。
  2. サービステンプレートをインポートします。

    $ 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.8/services/${resource}
    done
    ヒント

    既存のテンプレートを oc replace --force で上書きします。

3.2. キャッシュサービスの作成

cache-service を使用して、最小限の設定でパフォーマンスを最適化して、使用性を高めるクラスターを迅速に設定します。

  1. new-app コマンドでサービスを作成します。
  2. 必要に応じて、テンプレートパラメーターおよび環境変数を設定します。

以下に例を示します。

  • 最小設定で 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 をスローします。
注記

IBM Z または IBM Power の場合は、IMAGE=registry.redhat.io/jboss-datagrid-7/datagrid73-openj9-11-openshift:latest パラメーターを指定する必要があります。

環境変数

  • 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
    ...
ヒント

3.3. Data Grid サービスの作成

datagrid-service を使用してクラスターを設定し、異なるキャッシュ設定とより複雑な Data Grid 機能で使用できるようにします。

  1. new-app コマンドでサービスを作成します。
  2. 必要に応じて、テンプレートパラメーターおよび環境変数を設定します。

以下に例を示します。

  • 最小設定で 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 回です。
注記

IBM Z または IBM Power の場合は、IMAGE=registry.redhat.io/jboss-datagrid-7/datagrid73-openj9-11-openshift:latest パラメーターを指定する必要があります。

環境変数

  • 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
    ...
ヒント

第4章 Data Grid REST API の呼び出し

Data Grid サービスは、ポート 8443 で REST エンドポイントを公開します。

デフォルトでは、Data Grid はクライアント接続のデータアクセスと暗号化にユーザー認証を必要とします。

認証
Data Grid は、APPLICATION_USERAPPLICATION_PASSWORD パラメーターで指定する認証情報でデータアクセス要求を承認します。
暗号化
Data Grid Pod が起動すると、TLS 証明書/キーのペアを生成し、それらを サービス証明書シークレット に保存します。TLS 証明書は OpenShift 認証局(CA)により署名されます。

4.1. REST API への外部ルートの作成

OpenShift の外部で実行されている REST クライアントは、reencrypt 中断が含まれるルートを使用して Data Grid Pod にアクセスします。

手順

  1. 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
  2. 以下のように、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

4.2. REST 呼び出しの作成

前提条件

  • 認証および暗号化用に REST クライアントを設定する。

    OpenShift の場合

    /var/run/secrets/kubernetes.io/serviceaccount/service-ca.crt に、Pod にマウントされた CA バンドルでトラストストアを作成する。
    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

4.2.1. OpenShift CA を使用した REST 呼び出しの確保

ローカルの OpenShift クラスターや Red Hat OpenShift Container Platform 開発インストールなど、CA 証明書が有効でない場合は、service-ca.crt を使用して REST 呼び出しを行うことができます。

手順

  1. Data Grid Pod から service-ca.crt を取得します。

    $ oc rsync ${pod_name}:/var/run/secrets/kubernetes.io/serviceaccount/..data/service-ca.crt .
  2. 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

第5章 Hot Rodクライアントの設定

Data Grid サービスは、ポート 11222 で Hot Rod エンドポイントを公開します。

デフォルトでは、Data Grid はクライアント接続のデータアクセスと暗号化にユーザー認証を必要とします。

認証
Data Grid は、APPLICATION_USERAPPLICATION_PASSWORD パラメーターで指定する認証情報でデータアクセス要求を承認します。
暗号化
Data Grid Pod が起動すると、TLS 証明書/キーのペアを生成し、それらを サービス証明書シークレット に保存します。TLS 証明書は OpenShift 認証局(CA)により署名されます。

5.1. Hot Rod を使用したトラストストアの設定

trustStorePath は、Hot Rod クライアント設定の有効な証明書の場所に PEM 形式で設定します。Hot Rod Java クライアントは、パスにあるすべての証明書を使用してインメモリー Java キーストアをビルドします。

OpenShift の場合

  • OpenShift 認証局(CA)バンドルを指定します (
    /var/run/secrets/kubernetes.io/serviceaccount/service-ca.crt)。

OpenShift の外部

  1. service-certs シークレットから tls.crt を取得します。

    $ oc get secret service-certs \
      -o jsonpath='{.data.tls\.crt}' \
      | base64 -d > tls.crt
  2. クライアント設定で tls.crt へのパスを指定します。

5.2. クライアントのインテリジェンス

クライアントインテリジェンスとは、クライアントが Data Grid ノードにリクエストを見つけて送信できるように、Hot Rod プロトコルが提供するメカニズムを指します。

OpenShift の場合

クライアントは Pod の内部 IP アドレスにアクセスできるため、任意のクライアントのインテリジェンスを使用できます。デフォルトのインテリジェンスである HASH_DISTRIBUTION_AWARE が推奨されます。これにより、クライアントはリクエストをプライマリオーナーにルーティングできるようになり、パフォーマンスが向上します。

OpenShift の外部

BASIC インテリジェンスのみを使用します。

5.3. Hot Rod の外部ルートの作成

OpenShift の外部で実行されている Hot Rod クライアントは、passthrough 中断が含まれるルートを使用して Data Grid Pod にアクセスします。

手順

  1. 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
  2. .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

5.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")

5.5. プログラムで Hot Rod クライアントの設定

ConfigurationBuilder クラスを使用して、Data Grid クラスターにアクセスするように Hot Rod クライアントをプログラムで設定します。

  1. create() メソッドを呼び出して、RemoteCacheManager に渡すことができる設定 Bean を作成します。
  2. authentication()ssl() メソッドを使用して認証と暗号化を設定します。

5.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);

5.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);

5.6. Hot Rod クライアントプロパティーの設定

Hot Rod クライアント設定プロパティーを使用して、Data Grid ホスト名とポート、認証情報、および TLS 証明書を指定します。

手順

  1. Hot Rod クライアント設定が含まれる hotrod-client.properties ファイルを作成します。
  2. hotrod-client.properties をクラスパスに追加します。

5.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

5.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

第6章 キャッシュのリモート作成

cache-service でキャッシュをリモートで作成する場合は、キャッシュを一時的か、永続的か、さらにデータをクラスター全体に複製するかどうかを設定できます。

datagrid-service を使用してキャッシュをリモートで作成する場合にカスタム設定を定義できます。

以下のように、Hot Rod プロトコルを使用して、cache-servicedatagrid-service を使用して、キャッシュ定義をリモートで作成します。

  1. RemoteCacheManager クラスをインスタンス化して、サービスに接続します。
  2. 以下の例のように 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);
    }
    注記

    名前付きキャッシュがすでに存在する場合には、例外が発生します。別の方法は以下のとおりです。

    • RemoteCacheManagerAdmingetOrCreateCache メソッドを呼び出し、例外をスローせずにキャッシュ名を返します。
    • RemoteCacheManagerAdminremoveCache メソッドを呼び出してキャッシュを破棄してから、再度 createCache を呼び出します。
ヒント

クイックスタートチュートリアルの 1 つを試してください。

第7章 ファイルベースのキャッシュストアの定義

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 を参照してください。

第8章 Data Grid デプロイメント設定テンプレートの使用

8.1. Data Grid デプロイメント設定テンプレート

Data Grid は、さまざま設定で Data Grid for OpenShift をデプロイできるようにする一連のテンプレートを提供します。

重要

Data Grid 7.3 以降、これらのデプロイメント設定テンプレートが非推奨になりました。代わりに cache-service または datagrid-service サービステンプレートを使用する必要があります。

Template詳細

datagrid73-basic

認証または暗号化なしで、OpenShift 向けの Data Grid を実行します。

datagrid73-https

HTTPS ルートのある Data Grid for OpenShift を実行して、キャッシュに安全にアクセスします。ネットワークトラフィックの暗号化に OpenShift シークレット が必要です。

datagrid73-mysql

MySQL データベースを使用する Data Grid for OpenShift を一時キャッシュストアとして実行します。ネットワークトラフィックの暗号化に OpenShift シークレット が必要です。

datagrid73-mysql-persistent

MySQL データベースを使用する Data Grid for OpenShift を永続キャッシュストアとして実行します。ネットワークトラフィックの暗号化に OpenShift シークレット が必要です。

datagrid73-postgresql

PostgreSQL データベースを使用する Data Grid for OpenShift を一時キャッシュストアとして実行します。ネットワークトラフィックの暗号化に OpenShift シークレット が必要です。

datagrid73-postgresql-persistent

PostgreSQL データベースを使用する Data Grid for OpenShift を永続キャッシュストアとして実行します。ネットワークトラフィックの暗号化に OpenShift シークレット が必要です。

datagrid73-partition

パーティション設定されたデータディレクトリーで Data Grid for OpenShift を実行します。このディレクトリーは、Pod の再起動時にキャッシュエントリーのメタデータを保存します。

8.2. デプロイメント設定テンプレートのインポート

以下のように、OpenShift デプロイメント設定テンプレートを OpenShift にインポートします。

  1. OpenShift クラスターにログインします。
  2. 特定のテンプレートまたはすべてのテンプレートをインポートします。

    • 特定のテンプレートをインポートします。

      $ 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 にインポートします。また、これには管理者権限が必要です。

  3. Data Grid イメージをインポートします。

    $ oc -n openshift import-image jboss-datagrid73-openshift:1.8
  4. テンプレートが OpenShift で利用可能であることを確認します。

    $ oc get templates -n openshift | grep datagrid73

8.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

詳細は、以下を参照してください。

8.4. Data Grid for OpenShift のデプロイ

  1. new-app コマンドで新規デプロイメントを作成します。
  2. --template オプションでテンプレートを指定します。
  3. -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

    サポート対象の環境変数の詳細は、環境変数を参照してください。

8.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}
...

第9章 モニタリングの設定

Prometheus Operator で JMX メトリクスの収集、イベントの監視、Data Grid クラスターの統計を取得します。

ハイレベルでは、以下のようにモニタリング機能を設定します。

  1. AB_PROMETHEUS_ENABLE 環境変数を true に設定して、Data Grid を設定します。
  2. Prometheus Operator をインストールし、Prometheus Web UI を公開します。
  3. Data Grid メトリクスを Prometheus にエクスポートします。
  4. Prometheus を有効にして、メトリクスがないか Data Grid を監視します。

9.1. Prometheus Operator のデプロイ

Prometheus Operator をインストールするには、以下のドキュメントを参照してください。

ヒント

Monitoring Data Grid Quickstart Tutorial を試してください。

9.2. Data Grid メトリクスの Prometheus への公開

Data Grid から Prometheus に JMX メトリクスを公開するサービスを追加します。

  1. メトリクスサービスを定義する 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
  2. service-metrics.yaml を適用します。

    $ oc apply -f service-metrics.yaml

9.3. Prometheus による Data Grid の監視の有効化

サービスモニターを使用することで、Prometheus は Data Grid メトリクスサービスに接続できます。

  1. 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
  2. service-monitor.yaml を適用します。

    $ oc apply -f service-monitor.yaml

第10章 認証および暗号化の設定

カスタムテンプレートを使用している場合や、Data Grid デプロイメント設定テンプレートで独自のキーストアを使用する場合にのみ、認証と暗号化を設定する必要があります。

10.1. キーストアのシークレットへの追加

認証および暗号化を設定するには、以下を行います。

  1. 信頼できる証明書でキーストア(.jks)を作成します。

    HTTPS および Hot Rod サービスはいずれも同じキーストアを使用するか、別のキーストアを作成できます。

  2. キーストアを OpenShift シークレットとして追加します。

    1. シークレットを作成します。たとえば、rhdg-https.jks という名前のキーストアから rhdg-https-secret という名前のシークレットを作成するには、以下を実行します。

      $ oc create secret generic rhdg-https-secret \
        --from-file=rhdg-https.jks
    2. シークレットをデフォルトのサービスアカウントにリンクします。

      $ oc secrets link default rhdg-https-secret

10.2. デプロイメントの設定

以下のパラメーターでセキュアなテンプレートのいずれかをインスタンス化します。

  1. HTTP および HTTPS ホスト名を設定します。

    HOSTNAME_HTTP=my.example.hostname

    HOSTNAME_HTTPS=secure-my.example.hostname

  2. キーストアの名前を指定します (HTTPS_KEYSTORE=keystore.jks)。
  3. キーストアへのパスを指定します(HTTPS_KEYSTORE_DIR=/etc/datagrid-secret-volume)。
  4. シークレットの名前を指定します(HTTPS_SECRET=rhdg-https-secret)。
  5. キーストアの認証情報を指定します。

    HTTPS_NAME=${USERNAME}

    HTTPS_PASSWORD=${PASSWORD}

  6. ユーザーの HTTP セキュリティードメインを設定します(REST_SECURITY_DOMAIN=SecurityRealm)。
  7. クライアント証明書認証を有効にします(ENCRYPTION_REQUIRE_SSL_CLIENT_AUTH=true)。
  8. Hot Rod プロトコルの認証および暗号化を有効にします (HOTROD_AUTHENTICATION=true)。

    注記

    HOSTNAME_HTTPS の値を設定すると、テンプレートは自動的に HOTROD_ENCRYPTION=true と設定します。

10.3. Hot Rod プロトコルの一意のキーストアの設定

Hot Rod プロトコルに一意のキーストアを使用するには、以下を実行します。

  1. キーストアへのパスを指定します(SSL_KEYSTORE_PATH=hr_keystore.jks)。
  2. キーストアのパスワードを指定します(SSL_KEYSTORE_PASSWORD=${PASSWORD})。
  3. 必要な場合は、以下を実行します。

    1. キーストアへの相対パスを設定します(SSL_KEYSTORE_RELATIVE_TO=path/to/keystore/)。
    2. キーストアパスワードと異なる場合は、秘密鍵のパスワードを指定します(SSL_KEY_PASSWORD=${PASSWORD}))。
    3. 複数のエントリーが含まれる場合には、キーストアに正しいエイリアスを設定します(SSL_KEYSTORE_ALIAS=cert_alias)。
  4. 承認の認証情報がない場合は、以下を実行します。

    USERNAME=${USERNAME}

    PASSWORD=${PASSWORD}

    注記

    Hot Rod エンドポイントは、常に ApplicationRealm を使用してユーザーを認証します。Hot Rod および REST エンドポイントに別のキーストアを使用する場合は、USERNAMEPASSWORD パラメーターで認証情報を設定する必要があります。次に、テンプレートは jdg-openshift セキュリティーレルムを使用するように REST エンドポイントを設定します。この場合、REST_SECURITY_DOMAIN 環境変数が有効になっていません。

第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 検出メカニズムを設定するには、以下の手順を実施します。

  1. openshift.DNS_PINGJGROUPS_PING_PROTOCOL 環境変数の値として設定します。

    JGROUPS_PING_PROTOCOL=openshift.DNS_PING
  2. クラスターの ping サービスの名前を OPENSHIFT_DNS_PING_SERVICE_NAME 環境変数の値として指定します。

    OPENSHIFT_DNS_PING_SERVICE_NAME=${PING_SERVICE_NAME}
  3. ping サービスを OPENSHIFT_DNS_PING_SERVICE_PORT 環境変数の値として公開するポート番号を指定します。デフォルト値は 8888 です。

    OPENSHIFT_DNS_PING_SERVICE_PORT=${PING_SERVICE_NAME}
  4. 以下の例のように、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 検出メカニズムを設定するには、以下の手順を実施します。

  1. openshift.KUBE_PINGJGROUPS_PING_PROTOCOL 環境変数の値として設定します。

    JGROUPS_PING_PROTOCOL=openshift.KUBE_PING
  2. OpenShift プロジェクト名を OPENSHIFT_KUBE_PING_NAMESPACE 環境変数の値として指定します。この変数を設定しない場合には、サーバーは単一ノードのクラスターのように動作します。

    OPENSHIFT_KUBE_PING_NAMESPACE=${PING_NAMESPACE}
  3. OPENSHIFT_KUBE_PING_LABELS 環境変数でクラスターラベルを指定します。この変数を設定しない場合には、アプリケーションの外部ではあるが、同じ namespace 内にある Pod が参加使用とします。

    OPENSHIFT_KUBE_PING_LABELS=labelKey=labelValue
  4. 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)
  5. ポート 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. 対称暗号化の設定

対称暗号化を使用するには、以下を実行します。

  1. トラフィックを暗号化する認証情報を含めて JGroups キーストア(.jceks)を作成します。

    Java keytool を使用して JGroups キーストアを生成できます。

  2. JGroups キーストアをシークレットとして OpenShift にデプロイします。

    1. OpenShift クラスターにログインします。
    2. JGroups キーストアのシークレットを作成します。たとえば、名前が jgroups.jceks のキーストアから jgroups-secret という名前のシークレットを作成するには、以下を実行します。

      $ oc create secret generic jgroups-secret \
        --from-file=jgroups.jceks
    3. シークレットをデフォルトのサービスアカウントにリンクします。

      $ oc secrets link default jgroups-secret
    4. シークレットをコンテナーにマウントします。

      $ oc set volumes dc/datagrid \
        --add -t secret \
        --secret-name='jgroups-secret' \
        --mount-path='/keystores/jgroups'
  3. クラスター内のノードごとに、JGROUPS_ENCRYPT_PROTOCOL 環境変数の値を SYM_ENCRYPT に設定します。
  4. 以下の環境変数と JGroups キーストアを使用するように、クラスターの各ノードを設定します。

    JGROUPS_ENCRYPT_KEYSTORE
    クラスタートラフィックを暗号化するために JGroups キーストアを指定します。
    JGROUPS_ENCRYPT_KEYSTORE_DIR
    JGroups キーストアが存在するディレクトリーを指定します。
    JGROUPS_ENCRYPT_SECRET
    キーストアの OpenShift シークレットと同じものを指定します。
    JGROUPS_ENCRYPT_NAME
    キーストアのユーザー名と同じものを指定します。
    JGROUPS_ENCRYPT_PASSWORD
    キーストアのパスワードと同じものを指定します。
  5. 必要な場合は、JGROUPS_CLUSTER_PASSWORD 環境変数でクラスターへの参加時に使用するノードのパスワードを設定します。

11.2.2. 非対称暗号化の設定

非対称暗号化を使用するには、以下を行います。

  1. JGROUPS_CLUSTER_PASSWORD 環境変数で認証を設定します。
  2. クラスター内のノードごとに、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-servicecache-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 のクローン作成例

  1. Data Grid for OpenShift イメージソースリポジトリーのクローンを作成します。

    $ git clone git@github.com:jboss-container-images/jboss-datagrid-7-openshift-image.git .
  2. 以下のように、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 が必要です。

  1. Data Grid for OpenShift イメージが利用可能かどうかを確認します。

    $ oc get images | grep jboss-datagrid73-openshift
  2. イメージが利用できない場合は、イメージストリームを作成してインポートします。

    $ oc create -f https://raw.githubusercontent.com/jboss-container-images/jboss-datagrid-7-openshift-image/7.3-v1.8/templates/datagrid73-image-stream.json
    
    $ oc import-image jboss-datagrid73-openshift --from='registry.redhat.io/jboss-datagrid-7/datagrid73-openshift:1.8'

12.2.2. カスタム Data Grid イメージの作成

  1. Data Grid for OpenShift イメージを使用して、新しいバイナリービルドを作成します。

    $ oc new-build jboss-datagrid73-openshift:1.8 --binary=true --name=custom-datagrid
  2. --from-dir="." を指定できるように、s2i ディレクトリーに移動します。S2I プロセスがカスタム設定を検出できるように、configuration ディレクトリーを追加する必要があります。

    設定例を使用するには、以下を行います。

    $ cd jboss-datagrid-7-openshift-image/docs/examples/s2i/
  3. カスタム設定で Data Grid for OpenShift イメージをビルドします。

    $ oc start-build custom-datagrid --from-dir="." --follow
    
    Uploading directory "." as binary input for the build ...
    
    ...
    Push successful
  4. イメージが利用可能であることを確認します。

    $ oc get images | grep custom-datagrid

12.2.3. カスタム Data Grid イメージの確認

  1. ビルド Pod が実行されていることを確認します。

    $ oc get pods
    
    NAME                      READY     STATUS      RESTARTS   AGE
    custom-datagrid-1-build   0/1       Completed   0          38s
  2. カスタム設定で Data Grid アプリケーションを作成します。

    $ oc new-app custom-datagrid \
      -p APPLICATION_USER=${USERNAME} \
      -p APPLICATION_PASSWORD=${PASSWORD}
  3. カスタムの 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
  4. カスタム Data Grid Pod の bash シェルにリモートでアクセスします。

    $ oc exec -it ${pod-name} -- /bin/bash
  5. 以下のように clustered-openshift.xml を表示して、設定を確認します。

    $ cat /opt/datagrid/configuration/clustered-openshift.xml

    clustered-openshift.xml にカスタム設定が含まれる場合は、Data Grid Pod はそれを使用します。必要に応じて、以下のように、Data Grid コマンドラインインターフェースを使用して、設定を確認できます。

    $ /opt/datagrid/bin/cli.sh -c
  6. 設定を確認してから、リモートセッションを終了します。

    $ exit

12.3. ConfigMap API を使用した OpenShift Pod のカスタム Data Grid の作成

  1. Data Grid for OpenShift Pod のカスタムテンプレートを作成します。

    1. テンプレートに必要なポートおよびサービスを公開します。
    2. configMap オブジェクトをカスタムテンプレートに追加します。
    3. コンテナーの設定ボリュームを /opt/datagrid/standalone/configuration/user に追加します。
    4. カスタムテンプレートを OpenShift にインポートします。

      サンプルテンプレートを使用するには、以下を実行します。

      $ cd jboss-datagrid-7-openshift-image/docs/examples/user-configuration/
      $ oc create -f user-config-template.yaml
  2. 以下のように、OpenShift プロジェクトに ConfigMap を作成します。

    $ oc create configmap user-config --from-file="."
  3. カスタム設定で 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 の確認

  1. カスタムの Data Grid アプリケーションが実行を開始するまで待機します。

    $ oc get pods -w
    
    NAME                READY     STATUS    RESTARTS   AGE
    user-config-0   0/1       Running   7          17m
  2. コンテナーログを確認します。

    $ oc logs ${pod-name} | grep standalone.xml
    
    INFO Running jboss-datagrid-7/datagrid73-openshift image, version 1.8 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=TESTDB_SERVICE_PREFIX_MAPPING 環境変数の値として指定すると、次の名前でデータソースが作成されます。

java:jboss/datasources/test_postgresql

データソースの他の環境変数を指定する場合は、TESTプレフィックスを使用する必要があります。たとえば、ユーザー名とパスワードを設定するには、TEST_USERNAMETEST_PASSWORD を環境変数として使用します。

12.4.1.2. 複数のデータソースの例

cloud-postgresql=CLOUD,test-mysql=TEST_MYSQLDB_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 は、アプリケーションのソースコードをインプットとして取り、組み立てられたアプリケーションをアウトプットとして実行する新規イメージを作成するフレームワークです。

以下にプロセスの概要を説明します。

  1. イメージテンプレート JSON で CUSTOM_INSTALL_DIRECTORIES 環境変数を指定します。この変数は、以下の例のように S2I アーティファクトの場所を定義します。

    {
        "name": "CUSTOM_INSTALL_DIRECTORIES",
        "value": "extensions/*"
    }
  2. そのディレクトリーに 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
  3. データソースの 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>
  4. 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
  5. イメージのビルドおよびデプロイ後に、データソースの環境変数を指定します。

    次は、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 サーバー実装を使用してください。この実装は、完全にサポートされており、パフォーマンスの向上やセキュリティー修正が含まれる、通常の更新からの利点を享受できます。

ヒント

第14章 Data Grid for OpenShift のトラブルシューティング

14.1. コマンドラインインターフェース (CLI) の起動

Data Grid Management CLI にアクセスし、以下のように Data Grid for OpenShift のトラブルシューティングを行います。

  1. 実行中の Pod にリモートシェルセッションを開きます。

    $ oc rsh ${POD_NAME}
  2. リモートシェルから 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, DEBUGINFOWARNERROR、および 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) をロール名として使用します。たとえば、DN cn=managers,ou=people,dc=example,dc=commanager のロール名にマッピングされます。
  • cluster-role-mapperClusterRegistry を使用してプリンシパル名をロールマッピングに保存します。
  • custom-role-mapper: org.infinispan.security.impl.PrincipalRoleMapper インターフェースの実装の完全修飾クラス名を使用します。
CONTAINER_SECURITY_ROLES

ロール名を定義し、パーミッションを割り当てます。

例:CONTAINER_SECURITY_ROLES=admin=ALL,reader=READ,writer=WRITE

15.4.3.2. 名前付きキャッシュ設定

キャッシュ名を環境変数の接頭辞として大文字で指定します。このように指定しないと、設定は反映されません。

たとえば、MyCacheMYCACHE の 2 つのキャッシュインスタンスを作成します。次に、MyCache_CACHE_TYPE=replicated を設定して MyCache インスタンスを設定します。この設定は有効ではありません。ただし、MYCACHE_CACHE_TYPE=replicated を設定すると、MyCacheMYCACHE インスタンスの両方で設定が有効になります。

${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
設定するコネクターのコンマ区切りリストを定義します。デフォルトは hotrodmemcachedrest です。認可または認証がキャッシュで有効になっている場合には、このプロトコルは本来、安全ではないため、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 を設定します。