第 10 章 设置跨站点复制
通过配置跨站点复制以在 Data Grid 集群间备份数据,确保通过 Data Grid Operator 的服务可用性。
10.1. 使用 Data Grid Operator 管理跨站点连接
一个数据中心的 Data Grid Operator 可以发现 Data Grid Operator 在另一个数据中心中管理的数据网格集群。此发现允许 Data Grid 自动形成跨站点视图并创建全局集群。
下图提供了一个示例,其中 Data Grid Operator 在 New York City NYC 的数据中心管理 Data Grid 集群。在伦敦的另一台数据中心,LON,Data Grid Operator 还管理一个 Data Grid 集群。
Data Grid Operator 使用 Kubernetes API 在 NYC 和 LON 的 OpenShift Container Platform 集群间建立安全连接。然后,Data Grid Operator 会创建跨站点复制服务,以便数据可以在不同位置备份数据。
每个 OpenShift 集群中的 Data Grid Operator 必须有对远程 Kubernetes API 的网络访问权限。
当您配置自动连接时,Data Grid 集群不会开始运行,直到 Data Grid Operator 发现配置中的所有备份位置为止。
每个 Data Grid 集群都有一个站点 master 节点,用于协调所有备份请求。Data Grid Operator 标识站点 master 节点,以便通过跨站点复制服务的所有流量都进入站点 master。
如果当前站点 master 节点离线,则新节点变为站点 master。Data Grid Operator 会自动找到新的站点 master 节点,并更新跨站点复制服务来向它转发备份请求。
10.1.1. 创建服务帐户令牌
在每个作为备份位置的每个 OpenShift 集群上生成服务帐户令牌。集群使用这些令牌来相互进行身份验证,以便 Data Grid Operator 可以创建跨站点复制服务。
流程
- 登录 OpenShift 集群。
创建一个服务帐户。
例如,在 LON 创建服务帐户:
$ oc create sa lon serviceaccount/lon created
使用以下命令在服务帐户中添加 view 角色:
$ oc policy add-role-to-user view system:serviceaccount:<namespace>:lon
如果使用节点端口服务在网络上公开 Data Grid 集群,还必须将
cluster-reader
角色添加到服务帐户中:$ oc adm policy add-cluster-role-to-user cluster-reader -z <service-account-name> -n <namespace>
- 在其他 OpenShift 集群上重复上述步骤。
其他资源
10.1.2. 交换服务帐户令牌
在 OpenShift 集群中创建服务帐户令牌后,您可以将其添加到每个备份位置的 secret 中。例如,在 LON 中,您可以为 NYC 添加服务帐户令牌。在 NYC 中,您可以为 LON 添加服务帐户令牌。
先决条件
从每个服务帐户获取令牌。
使用以下命令或从 OpenShift Web 控制台获取令牌:
$ oc sa get-token lon eyJhbGciOiJSUzI1NiIsImtpZCI6IiJ9...
流程
- 登录 OpenShift 集群。
使用以下命令为备份位置添加服务帐户令牌:
$ oc create secret generic <token-name> --from-literal=token=<token>
例如,登录到 NYC 的 OpenShift 集群,并创建一个
lon-token
secret,如下所示:$ oc create secret generic lon-token --from-literal=token=eyJhbGciOiJSUzI1NiIsImtpZCI6IiJ9...
- 在其他 OpenShift 集群上重复上述步骤。
10.1.3. 配置 Data Grid Operator 以处理跨站点连接
配置 Data Grid Operator,以使用 Data Grid 集群建立跨站点视图。
先决条件
- 创建包含每个备份位置的服务帐户令牌的 secret。
流程
-
为每个 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
。
-
如果使用
-
为每个 Data Grid 集群提供名称、URL 和 secret,它们充当
spec.service.sites.locations
的备份位置。 如果远程站点上的 Data Grid 集群名称或命名空间与本地站点不匹配,请使用
clusterName
和namespace
字段指定这些值。以下是 LON 和 NYC 的
Infinispan
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
重要务必调整
Infinispan
CR 中的日志类别,以减少 JGroups TCP 和 RELAY2 协议的日志级别。这可防止大量日志文件使用容器存储。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
条件。
后续步骤
如果您的集群有一个跨站点视图,您可以开始向缓存添加备份位置。
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
字段 | 描述 |
---|---|
| Data Grid 仅支持通过 Data Grid 服务集群进行跨站点复制。 |
| 将本地站点命名为 Data Grid 集群运行的位置。 |
|
指定跨站点复制的网络服务。Data Grid 集群使用此服务来通信和执行备份操作。您可以将值设为 |
|
如果您通过 |
|
如果您通过 |
| 为所有备份位置提供连接信息。 |
|
指定与 |
| 指定备份位置的 Kubernetes API 的 URL。 |
| 指定包含备份站点的服务帐户令牌的 secret。 |
| 如果集群名称与本地站点的集群名称不同,请在备份位置指定集群名称。 |
| 如果 Data Grid 集群的命名空间与本地站点上的命名空间不匹配,则指定位于备份位置的 Data Grid 集群的命名空间。 |