13.2. マネージドのクロスサイトレプリケーション
Data Grid Operator は、異なるデータセンターで実行している Data Grid クラスターを検出し、グローバルクラスターを形成できます。
マネージドのクロスサイト接続を設定する場合には、Data Grid Operator は各 Data Grid クラスターにルーター Pod を作成します。Data Grid Pod は <cluster_name>-site
サービスを使用してこれらのルーター Pod に接続し、バックアップ要求を送信します。
ルーター Pod はすべての Pod IP アドレスのレコードを保持し、RELAY メッセージヘッダーを解析し、バックアップ要求を正しい Data Grid クラスターに転送します。ルーター Pod がクラッシュすると、OpenShift が復元するまで、Data Grid Pod はいずれも、他に利用可能なルーター Pod を使用し出します。
クロスサイト接続を管理するために、Data Grid Operator は Kubernetes API を使用します。各 OpenShift クラスターに、リモート Kubernetes API へのネットワークアクセスと、各バックアップクラスター用のサービスアカウントトークンが必要です。
Data Grid クラスターは、Data Grid Operator が設定するすバックアップの場所が検出されるまで実行は開始しません。
13.2.1. マネージドクロスサイト接続用のサービスアカウントトークンの作成
Data Grid Operator が Data Grid クラスターを自動的に検出し、クロスサイト接続を管理できるように OpenShift クラスターでサービスアカウントトークンを生成します。
前提条件
すべての OpenShift クラスターが Kubernetes API にアクセスできることを確認します。
Data Grid Operator はこの API を使用してクロスサイト接続を管理します。注記Data Grid Operator はリモート Data Grid クラスターを変更しません。サービスアカウントトークンは、Kubernetes API 経由で読み取り専用のアクセスを提供します。
手順
- OpenShift クラスターにログインします。
サービスアカウントを作成します。
たとえば、LON でサービスアカウントを作成します。
oc create sa -n <namespace> lon
以下のコマンドを使用して、ビューロールをサービスアカウントに追加します。
oc policy add-role-to-user view -n <namespace> -z lon
NodePort
サービスを使用してネットワーク上で Data Grid クラスターを公開する場合、cluster-reader
ロールをサービスアカウントに追加する必要もあります。oc adm policy add-cluster-role-to-user cluster-reader -z lon -n <namespace>
- 他の OpenShift クラスターで直前の手順を繰り返します。
- 各 OpenShift クラスターでサービスアカウントトークンを交換します。
13.2.2. サービスアカウントトークンの交換
OpenShift クラスターでサービスアカウントトークンを生成し、各バックアップ場所のシークレットに追加します。この手順で生成するトークンには有効期限がありません。バインドされたサービスアカウントトークンについては、バインドされたサービスアカウントトークンの交換 を参照してください。
前提条件
- サービスアカウントを作成している。
手順
- OpenShift クラスターにログインします。
次のようにサービスアカウントトークンのシークレットファイルを作成します。
sa-token.yaml
apiVersion: v1 kind: Secret metadata: name: ispn-xsite-sa-token 1 annotations: kubernetes.io/service-account.name: "<service-account>" 2 type: kubernetes.io/service-account-token
OpenShift クラスターにシークレットを作成します。
oc -n <namespace> create -f sa-token.yaml
サービスアカウントトークンを取得します。
oc -n <namespace> get secrets ispn-xsite-sa-token -o jsonpath="{.data.token}" | base64 -d
このコマンドにより、ターミナルにトークンが出力されます。
- バックアップ OpenShift クラスターにデプロイメント用のトークンをコピーします。
- バックアップ OpenShift クラスターにログインします。
バックアップの場所用のサービスアカウントトークンを追加します。
oc -n <namespace> create secret generic <token-secret> --from-literal=token=<token>
<token-secret>
は、Infinispan
CR で設定したシークレットの名前です。
次のステップ
- 他の OpenShift クラスターで直前の手順を繰り返します。
13.2.3. バインドされたサービスアカウントトークンの交換
有効期間が制限されたサービスアカウントトークンを作成し、各バックアップ場所のシークレットに追加します。Data Grid Operator がリモート OpenShift クラスターにアクセスできなくなるのを防ぐために、トークンを定期的に更新する必要があります。有効期限のないトークンについては、サービスアカウントトークンの交換 を参照してください。
前提条件
- サービスアカウントを作成している。
手順
- OpenShift クラスターにログインします。
サービスアカウント用のバインドされたトークンを作成します。
oc -n <namespace> create token <service-account>
注記デフォルトでは、サービスアカウントトークンの有効期間は 1 時間です。有効期間を秒単位で指定するには、コマンドオプション
--duration
を使用してください。このコマンドにより、ターミナルにトークンが出力されます。
- バックアップ OpenShift クラスターにデプロイメント用のトークンをコピーします。
- バックアップ OpenShift クラスターにログインします。
バックアップの場所用のサービスアカウントトークンを追加します。
oc -n <namespace> create secret generic <token-secret> --from-literal=token=<token>
<token-secret>
は、Infinispan
CR で設定したシークレットの名前です。- 他の OpenShift クラスターでもこの手順を繰り返します。
期限切れのトークンの削除
トークンの有効期限が切れた場合は、期限切れのトークンシークレットを削除し、新しいトークンシークレットを生成して交換する手順を再度実行します。
- バックアップ OpenShift クラスターにログインします。
期限切れのシークレット
<token-secret>
を削除します。oc -n <namespace> delete secrets <token-secret>
-
手順を再度実行して新しいトークンを作成し、新しい
<token-secret>
を生成します。
13.2.4. マネージドのクロスサイト接続の設定
Data Grid クラスターでクロスサイトビューを確立するように Data Grid Operator を設定します。
前提条件
-
Determine a suitable expose type for cross-site replication.
OpenShiftRoute
を使用する場合は、TLS 証明書と安全なクロスサイト接続を備えたキーストアを追加する必要があります。 - 各 Data Grid クラスターに Red Hat OpenShift サービスアカウントトークンを作成して交換します。
手順
-
各 Data Grid クラスターに
Infinispan
CR を作成します。 -
ローカルサイトの名前を
spec.service.sites.local.name
で指定します。 クロスサイトレプリケーションの公開タイプを設定します。
spec.service.sites.local.expose.type
フィールドの値を次のいずれかに設定します。-
NodePort
-
LoadBalancer
-
ルート
-
オプションで、次のフィールドを使用してポートまたはカスタムホスト名を指定します。
-
NodePort
サービスを使用する場合のspec.service.sites.local.expose.nodePort
。 -
LoadBalancer
サービスを使用する場合のspec.service.sites.local.expose.port
。 -
OpenShift
Route
を使用する場合は、spec.service.sites.local.expose.routeHostName
を使用します。
-
RELAY メッセージを
service.sites.local.maxRelayNodes
フィールドで送信できる Pod の数を指定します。ヒントパフォーマンス向上のため
RELAY
メッセージを送信するようにクラスター内のすべての Pod を設定します。すべての Pod がバックアップ要求を直接送信する場合には、バックアップ要求を転送する必要はありません。-
spec.service.sites.locations
でバックアップの場所として動作する各 Data Grid クラスターの名前、URL、およびシークレットを指定します。 リモートサイトの Data Grid クラスター名または namespace がローカルサイトに一致しない場合は、それらの値を
clusterName
およびnamespace
フィールドで指定します。以下は、LON および NYC の
Infinispan
CR 定義の例になります。LON
apiVersion: infinispan.org/v1 kind: Infinispan metadata: name: infinispan spec: replicas: 3 version: <Data Grid_version> service: type: DataGrid sites: local: name: LON expose: type: LoadBalancer port: 65535 maxRelayNodes: 1 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 version: <Data Grid_version> service: type: DataGrid sites: local: name: NYC expose: type: LoadBalancer port: 65535 maxRelayNodes: 1 locations: - name: LON clusterName: 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
-
他の Data Grid サービスリソースで
Infinispan
CR を設定してから、変更を適用します。 Data Grid クラスターがクロスサイトビューを形成することを確認します。
Infinispan
CR を取得します。oc get infinispan -o yaml
-
type: CrossSiteViewFormed
条件を確認します。
次のステップ
クラスターがクロスサイトビューを形成している場合は、バックアップの場所をキャッシュに追加し始めることができます。