第10章 クロスサイトレプリケーションの設定

Data Grid クラスター間でデータをバックアップするようにクロスサイトレプリケーションを設定して、Data Grid Operator でのサービスの可用性を確保します。

10.1. Data Grid Operator を使用したクロスサイト接続の管理

1 つのデータセンターの Data Grid Operator は、Data Grid Operator が別のデータセンターで管理する Data Grid クラスターを検出できます。この検出により、Data Grid は自動的にクロスサイトビューを形成し、グローバルクラスターを作成できます。

以下の図は、Data Grid Operator がニューヨーク市 NYC のデータセンターで Data Grid クラスターを管理している例を示しています。Data Grid Operator は、ロンドンにある別のデータセンター LON でも、Data Grid クラスターを管理しています。

Data Grid Operator は、Kubernetes API を使用して、NYCLON の OpenShift Container Platform クラスター間の安全な接続を確立します。その後、Data Grid Operator はクロスサイトレプリケーションサービスを作成し、Data Grid クラスターが複数の場所にまたがってデータをバックアップできるようにします。

重要

各 OpenShift クラスターの Data Grid Operator には、リモート Kubernetes API へのネットワークアクセスが必要です。

注記

自動接続を設定すると、Data Grid Operator が設定内のすべてのバックアップの場所を検出するまで、Data Grid クラスターの実行は開始されません。

各 Data Grid クラスターには、すべてのバックアップ要求を調整する 1 つのサイトマスターノードがあります。Data Grid Operator はサイトマスターノードを特定し、クロスサイトレプリケーションサービスを介したすべてのトラフィックがサイトマスターに送られるようにします。

現在のサイトマスターノードがオフラインになると、新規のノードがサイトマスターになります。Data Grid Operator は新しいサイトマスターノードを自動的に検出し、クロスサイトレプリケーションサービスを更新してバックアップ要求をノードに転送します。

10.1.1. サービスアカウントトークンの作成

バックアップの場所として動作する各 OpenShift クラスターでサービスアカウントトークンを生成します。クラスターはこれらのトークンを使用して相互に認証するため、Data Grid Operator はクロスサイトレプリケーションサービスを作成できます。

手順

  1. OpenShift クラスターにログインします。
  2. サービスアカウントを作成します。

    たとえば、LON でサービスアカウントを作成します。

    $ oc create sa lon
    serviceaccount/lon created
  3. 以下のコマンドを使用して、ビューロールをサービスアカウントに追加します。

    $ oc policy add-role-to-user view system:serviceaccount:<namespace>:lon
  4. ノードポートサービスを使用してネットワーク上で Data Grid クラスターを公開する場合、cluster-reader ロールをサービスアカウントに追加する必要があります。

    $ oc adm policy add-cluster-role-to-user cluster-reader -z <service-account-name> -n <namespace>
  5. 他の OpenShift クラスターで直前の手順を繰り返します。

10.1.2. サービスアカウントトークンの交換

OpenShift クラスターでサービスアカウントトークンを作成したら、それらを各バックアップの場所のシークレットに追加します。たとえば、LONNYC のサービスアカウントトークンを追加します。NYCLON のサービスアカウントトークンを追加します。

前提条件

  • 各サービスアカウントからトークンを取得します。

    以下のコマンドを使用するか、OpenShift Web コンソールからトークンを取得します。

    $ oc sa get-token lon
    
    eyJhbGciOiJSUzI1NiIsImtpZCI6IiJ9...

手順

  1. OpenShift クラスターにログインします。
  2. 以下のコマンドを使用して、バックアップの場所のサービスアカウントトークンを追加します。

    $ oc create secret generic <token-name> --from-literal=token=<token>

    たとえば、NYC で OpenShift クラスターにログインし、以下のように lon-token シークレットを作成します。

    $ oc create secret generic lon-token --from-literal=token=eyJhbGciOiJSUzI1NiIsImtpZCI6IiJ9...
  3. 他の OpenShift クラスターで直前の手順を繰り返します。

10.1.3. クロスサイト接続を処理するための Data Grid Operator の設定

Data Grid クラスターでクロスサイトビューを確立するように Data Grid Operator を設定します。

前提条件

  • 各バックアップの場所のサービスアカウントトークンを含むシークレットを作成します。

手順

  1. 各 Data Grid クラスターに Infinispan CR を作成します。
  2. ローカルサイトの名前を spec.service.sites.local.name で指定します。
  3. spec.service.sites.local.expose.type フィールドの値を NodePort または LoadBalancer のいずれかに設定します。
  4. 必要に応じて、以下のフィールドを使用してポートを設定します。

    • spec.service.sites.local.expose.nodePort (NodePort を使用する場合)
    • spec.service.sites.local.expose.port (LoadBalancer を使用する場合)
  5. spec.service.sites.locations でバックアップの場所として動作する各 Data Grid クラスターの名前、URL、およびシークレットを指定します。
  6. リモートサイトの Data Grid クラスター名または namespace がローカルサイトに一致しない場合は、それらの値を clusterName および namespace フィールドで指定します。

    以下は、LON および NYCInfinispan CR 定義の例になります。

    • LON

      apiVersion: infinispan.org/v1
      kind: Infinispan
      metadata:
        name: example-infinispan
      spec:
        replicas: 3
        service:
          type: DataGrid
          sites:
            local:
              name: LON
              expose:
                type: LoadBalancer
                port: 65535
            locations:
              - name: NYC
                clusterName: <nyc_cluster_name>
                namespace: <nyc_cluster_namespace>
                url: openshift://api.rhdg-nyc.openshift-aws.myhost.com:6443
                secretName: nyc-token
        logging:
          categories:
            org.jgroups.protocols.TCP: error
            org.jgroups.protocols.relay.RELAY2: error
    • NYC

      apiVersion: infinispan.org/v1
      kind: Infinispan
      metadata:
        name: nyc-cluster
      spec:
        replicas: 2
        service:
          type: DataGrid
          sites:
            local:
              name: NYC
              expose:
                type: LoadBalancer
                port: 65535
            locations:
              - name: LON
                clusterName: example-infinispan
                namespace: rhdg-namespace
                url: openshift://api.rhdg-lon.openshift-aws.myhost.com:6443
                secretName: lon-token
        logging:
          categories:
            org.jgroups.protocols.TCP: error
            org.jgroups.protocols.relay.RELAY2: error
      重要

      JGroups TCP および RELAY2 プロトコルのログレベルを下げるために、Infinispan CR のロギングカテゴリーを調整してください。これにより、多数のログファイルがコンテナーストレージを使用することを防ぎます。

      spec:
        logging:
          categories:
            org.jgroups.protocols.TCP: error
            org.jgroups.protocols.relay.RELAY2: error
  7. 他の Data Grid サービスリソースで Infinispan CR を設定してから、変更を適用します。
  8. Data Grid クラスターがクロスサイトビューを形成することを確認します。

    1. Infinispan CR を取得します。

      $ oc get infinispan -o yaml
    2. type: CrossSiteViewFormed 条件を確認します。

次のステップ

クラスターがクロスサイトビューを形成している場合は、バックアップの場所をキャッシュに追加し始めることができます。

10.1.4. 管理対象クロスサイト接続のリソース

このトピックでは、Data Grid Operator が管理するクロスサイト接続のリソースについて説明します。

spec:
  service:
    type: DataGrid
    sites:
      local:
        name: LON
        expose:
          type: LoadBalancer
      locations:
      - name: NYC
        clusterName: <nyc_cluster_name>
        namespace: <nyc_cluster_namespace>
        url: openshift://api.site-b.devcluster.openshift.com:6443
        secretName: nyc-token
フィールド説明

service.type:DataGrid

Data Grid は、Data Grid サービスクラスターのみでクロスサイトレプリケーションをサポートします。

service.sites.local.name

Data Grid クラスターが実行されるローカルサイトに名前を付けます。

service.sites.local.expose.type

クロスサイトレプリケーションのネットワークサービスを指定します。Data Grid クラスターは、このサービスを使用して通信し、バックアップ操作を実行します。この値は NodePort または LoadBalancer に設定できます。

service.sites.local.expose.nodePort

NodePort サービス経由で Data Grid を公開する場合、デフォルトの範囲内の 30000 から 32767 の静的ポートを指定します。ポートを指定しないと、プラットフォームは利用可能なポートを選択します。

service.sites.local.expose.port

LoadBalancer 経由で Data Grid を公開する場合、サービスのネットワークポートを指定します。デフォルトのポートは 7900 です。

service.sites.locations

すべてのバックアップの場所の接続情報を提供します。

service.sites.locations.name

.spec.service.sites.local.name に一致するバックアップの場所を指定します。

service.sites.locations.url

バックアップの場所の Kubernetes API の URL を指定します。

service.sites.locations.secretName

バックアップサイトのサービスアカウントトークンが含まれるシークレットを指定します。

service.sites.locations.clusterName

ローカルサイトのクラスター名と異なる場合は、バックアップの場所でクラスター名を指定します。

service.sites.locations.namespace

ローカルサイトの namespace に一致しない場合は、バックアップの場所にある Data Grid クラスターの namespace を指定します。