検索

11.5. クラスタリング

download PDF

11.5.1. JGroups 検索メカニズムの設定

OpenShift で JBoss EAP クラスタリングを有効にするには、JBoss EAP 設定の JGroups プロトコルスタックを設定し、kubernetes.KUBE_PING または dns.DNS_PING 検索メカニズムのいずれかを使用するようにします。

カスタムの standalone.xml 設定ファイルを使用することもできますが、環境変数 を使用してイメージビルドで JGroups を設定することが推奨されます。

以下の手順は、環境変数を使用して JBoss EAP for OpenShift イメージの検出メカニズムを設定します。

重要

Helm チャートを使用して JBoss EAP for OpenShift イメージの上にアプリケーションをデプロイする場合、デフォルトの検出メカニズムは dns.DNS_PING です。

dns.DNS_PING および kubernetes.KUBE_PING 検索メカニズムは互換性がありません。検索に dns.DNS_PING メカニズムを使用する 1 つの独立した子クラスターと、kubernetes.KUBE_PING メカニズムを使用するもう 1 つの独立した子クラスターを使用して、スーパークラスターを設定することは不可能です。同様に、ローリングアップグレードを実行する場合は、ソースクラスターとターゲットクラスターの両方で同じ検索メカニズムを使用する必要があります。

11.5.1.1. KUBE_PING の設定

KUBE_PING JGroups 検索メカニズムを使用するには、以下を行います。

  1. KUBE_PING を検索メカニズムとして使用するよう JGroups プロトコルスタックを設定する必要があります。

    これには、JGROUPS_PING_PROTOCOL 環境変数を kubernetes.KUBE_PING に設定します。

    JGROUPS_PING_PROTOCOL=kubernetes.KUBE_PING
  2. KUBERNETES_NAMESPACE 環境変数を OpenShift プロジェクト名に設定する必要があります。以下に例を示します。

    KUBERNETES_NAMESPACE=PROJECT_NAME
  3. KUBERNETES_LABELS 環境変数を設定する必要があります。これは サービスレベルで設定したラベル と一致する必要があります。設定がないと、アプリケーション外部の Pod (namespace にあっても) は参加を試みます。以下に例を示します。

    KUBERNETES_LABELS=application=APP_NAME
  4. Pod が実行しているサービスアカウントを承認し、Kubernetes の REST API アカウントへのアクセスを許可する必要があります。これは OpenShift CLI を使用して行われます。以下は、現在のプロジェクトの名前空間で default サービスアカウントを使用した例になります。

    oc policy add-role-to-user view system:serviceaccount:$(oc project -q):default -n $(oc project -q)

    プロジェクトの namespace で eap-service-account を使用した例は次のとおりです。

    oc policy add-role-to-user view system:serviceaccount:$(oc project -q):eap-service-account -n $(oc project -q)
    注記

    サービスアカウントへのポリシーの追加の詳細は、アプリケーションのデプロイに向けた OpenShift の準備 を参照してください。

11.5.1.2. DNS_PING の設定

DNS_PING JGroups 検索メカニズムを使用するには、以下を行います。

  1. DNS_PING を検索メカニズムとして使用するよう JGroups プロトコルスタックを設定する必要があります。

    これには、JGROUPS_PING_PROTOCOL 環境変数を dns.DNS_PING に設定します。

    JGROUPS_PING_PROTOCOL=dns.DNS_PING
  2. OPENSHIFT_DNS_PING_SERVICE_NAME 環境変数を、クラスターの ping サービスの名前に設定する必要があります。

    OPENSHIFT_DNS_PING_SERVICE_NAME=PING_SERVICE_NAME
  3. OPENSHIFT_DNS_PING_SERVICE_PORT 環境変数を、ping サービスが公開されるポート番号に設定する必要があります。DNS_PING プロトコルは SRV レコードからポートを識別しようとします。 識別できない場合はデフォルトの 8888 になります。

    OPENSHIFT_DNS_PING_SERVICE_PORT=PING_PORT
  4. ping ポートを公開する ping サービスを定義する必要があります。このサービスはヘッドレスである必要があり (ClusterIP=None)、以下が必要になります。

    1. ポートに名前を付ける必要があります。
    2. このサービスは、service.alpha.kubernetes.io/tolerate-unready-endpoints および publishNotReadyAddresses プロパティー の両方で true に設定されたアノテーションを付ける必要があります。

      注記
      • service.alpha.kubernetes.io/tolerate-unready-endpoints プロパティーおよび publishNotReadyAddresses プロパティーの両方を使用して、ping サービスが古い OpenShift リリースとそれ以降の OpenShift リリースの両方で機能するようにします。
      • これらのアノテーションを省略すると、各ノードは起動時に独自のクラスターを形成します。各ノードは、起動後に他のノードが検出されないため、そのクラスターを起動後に他のノードのクラスターにマージします。
      kind: Service
      apiVersion: v1
      spec:
          publishNotReadyAddresses: true
          clusterIP: None
          ports:
          - name: ping
            port: 8888
          selector:
              deploymentConfig: eap-app
      metadata:
          name: eap-app-ping
          annotations:
              service.alpha.kubernetes.io/tolerate-unready-endpoints: "true"
              description: "The JGroups ping port for clustering."
注記

DNS_PING はサービスアカウントへの変更が必要なく、デフォルトのパーミッションを使用して動作します。

11.5.2. クラスタートラフィックを暗号化するため JGroups を設定

OpenShift で JBoss EAP のクラスタートラフィックを暗号化するには、SYM_ENCRYPT または ASYM_ENCRYPT プロトコルのいずれかを使用するよう、JBoss EAP 設定の JGroups プロトコルスタックを設定する必要があります。

カスタムの standalone.xml 設定ファイルを使用することもできますが、環境変数 を使用してイメージビルドで JGroups を設定することが推奨されます。

以下の手順は、環境変数を使用して、JBoss EAP for OpenShift イメージのクラスタートラフィックの暗号化にプロトコルを設定します。

重要

SYM_ENCRYPT および ASYM_ENCRYPT プロトコルは互換性がありません。クラスタートラフィックの暗号化に SYM_ENCRYPT を使用する 1 つの独立した子クラスターと、ASYM_ENCRYPT プロトコルを使用する別の独立した子クラスターの 2 つを使用してスーパークラスターを設定するのは不可能です。同様に、ローリングアップグレードを実行する場合は、ソースおよびターゲットクラスターの両方で同じプロトコルを使用する必要があります。

11.5.2.1. SYM_ENCRYPT の設定

SYM_ENCRYPT プロトコルを使用して JGroups クラスタートラフィックを暗号化するには、以下を行います。

  1. SYM_ENCRYPT を暗号化プロトコルをして使用するよう、JGroups プロトコルスタックを設定する必要があります。

    これには、JGROUPS_ENCRYPT_PROTOCOL 環境変数を SYM_ENCRYPT に設定します。

    JGROUPS_ENCRYPT_PROTOCOL=SYM_ENCRYPT
  2. JGROUPS_ENCRYPT_KEYSTORE_DIR 環境変数は、キーストアを含むシークレットがマウントされているディレクトリーパスに設定する必要があります。以下に例を示します。

    JGROUPS_ENCRYPT_KEYSTORE_DIR=/etc/jgroups-encrypt-secret-volume
  3. JGROUPS_ENCRYPT_KEYSTORE 環境変数は、指定された作成済みシークレット内のキーストアファイルの名前に設定する必要があります。設定しないと、クラスター通信は暗号化されず、警告が発生します。以下に例を示します。

    JGROUPS_ENCRYPT_KEYSTORE=jgroups.jceks
  4. JGROUPS_ENCRYPT_NAME 環境変数を、サーバーの証明書に関連する名前に設定する必要があります。設定しないと、クラスター通信は暗号化されず、警告が発生します。以下に例を示します。

    JGROUPS_ENCRYPT_NAME=jgroups
  5. JGROUPS_ENCRYPT_PASSWORD 環境変数を、キーストアおよび証明書にアクセスするために使用されるパスワードに設定する必要があります。設定しないと、クラスター通信は暗号化されず、警告が発生します。以下に例を示します。

    JGROUPS_ENCRYPT_PASSWORD=mypassword

11.5.2.2. ASYM_ENCRYPT の設定

注記

JBoss EAP 8.0 には、新しいバージョンの ASYM_ENCRYPT プロトコルが組み込まれています。以前のバージョンのプロトコルは非推奨になりました。JGROUPS_CLUSTER_PASSWORD 環境変数を指定する場合は、プロトコルの非推奨バージョンが使用され、警告が Pod ログに出力されます。

ASYM_ENCRYPT プロトコルを使用して JGroups クラスタートラフィックを暗号化するには、ASYM_ENCRYPT を暗号化プロトコルとして指定します。また、elytron サブシステムに設定されたキーストアを使用するよう設定します。

-e JGROUPS_ENCRYPT_PROTOCOL="ASYM_ENCRYPT" \
-e JGROUPS_ENCRYPT_NAME="encrypt_name" \
-e JGROUPS_ENCRYPT_PASSWORD="encrypt_password" \
-e JGROUPS_ENCRYPT_KEYSTORE="encrypt_keystore" \
-e JGROUPS_CLUSTER_PASSWORD="cluster_password"

11.5.3. Pod のスケールアップに関する考慮事項

JGroups の検出メカニズムに基づいて、開始ノードは既存のクラスターコーディネーターノードを検索します。指定されたタイムアウト内にコーディネーターノードが見つからない場合、開始ノードは自分が最初のメンバーであると見なし、コーディネーターステータスを取得します。

複数のノードが同時に起動すると、すべてのノードが最初のメンバーであると見なされ、複数のパーティションを持つ分割クラスターが作成されます。たとえば、DeploymentConfig API を使用して Pod を 0 から 2 にスケールアップすると、分割クラスターが作成される場合があります。この状況を回避するには、最初の Pod を開始してから、必要な数の Pod にスケールアップする必要があります。

注記

デフォルトでは、JBoss EAP Operator は StatefulSet API を使用します。これにより、Pod の作成が順番に、つまり 1 つずつ開始されるため、分割クラスターの作成が防止されます。

Red Hat logoGithubRedditYoutubeTwitter

詳細情報

試用、購入および販売

コミュニティー

Red Hat ドキュメントについて

Red Hat をお使いのお客様が、信頼できるコンテンツが含まれている製品やサービスを活用することで、イノベーションを行い、目標を達成できるようにします。

多様性を受け入れるオープンソースの強化

Red Hat では、コード、ドキュメント、Web プロパティーにおける配慮に欠ける用語の置き換えに取り組んでいます。このような変更は、段階的に実施される予定です。詳細情報: Red Hat ブログ.

会社概要

Red Hat は、企業がコアとなるデータセンターからネットワークエッジに至るまで、各種プラットフォームや環境全体で作業を簡素化できるように、強化されたソリューションを提供しています。

© 2024 Red Hat, Inc.