13.2. 受管跨站点复制
Data Grid Operator 可以发现在不同数据中心中运行的 Data Grid 集群来组成全局集群。
当您配置托管的跨站点连接时,Data Grid Operator 会在每个 Data Grid 集群中创建路由器 Pod。data Grid pod 使用 & lt;cluster_name>-site 服务连接到这些路由器 Pod 并发送备份请求。
路由器 pod 维护所有 pod IP 地址记录并解析 RELAY 消息标头,以将备份请求转发到正确的 Data Grid 集群。如果路由器 pod 崩溃,则所有 Data Grid pod 开始使用任何其他可用的路由器 Pod,直到 OpenShift 恢复它。
为了管理跨站点连接,Data Grid Operator 使用 Kubernetes API。每个 OpenShift 集群都必须具有对远程 Kubernetes API 的网络访问权限,以及每个备份集群的服务帐户令牌。
在 Data Grid Operator 发现您配置的所有备份位置前,Data Grid 集群不会开始运行。
13.2.1. 为受管跨站点连接创建服务帐户令牌 复制链接链接已复制到粘贴板!
在 OpenShift 集群上生成服务帐户令牌,以允许 Data Grid Operator 自动发现 Data Grid 集群并管理跨站点连接。
先决条件
确保所有 OpenShift 集群都可以访问 Kubernetes API。
Data Grid Operator 使用这个 API 来管理跨站点连接。注意Data Grid Operator 不修改远程 Data Grid 集群。服务帐户令牌通过 Kubernetes API 提供只读访问。
流程
- 登录 OpenShift 集群。
创建一个服务帐户。
例如,在 LON 中创建服务帐户:
oc create sa lon serviceaccount/lon created
oc create sa lon serviceaccount/lon createdCopy to Clipboard Copied! Toggle word wrap Toggle overflow 使用以下命令将 view 角色添加到服务帐户:
oc policy add-role-to-user view system:serviceaccount:<namespace>:lon
oc policy add-role-to-user view system:serviceaccount:<namespace>:lonCopy to Clipboard Copied! Toggle word wrap Toggle overflow 如果使用
NodePort服务在网络中公开 Data Grid 集群,还必须将cluster-reader角色添加到服务帐户:oc adm policy add-cluster-role-to-user cluster-reader -z <service-account-name> -n <namespace>
oc adm policy add-cluster-role-to-user cluster-reader -z <service-account-name> -n <namespace>Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 在其他 OpenShift 集群上重复前面的步骤。
- 在每个 OpenShift 集群上交换服务帐户令牌。
13.2.2. 交换服务帐户令牌 复制链接链接已复制到粘贴板!
在 OpenShift 集群中创建服务帐户令牌后,您要将它们添加到每个备份位置的 secret 中。例如,在 LON 中,您可以为 NYC 添加服务帐户令牌。在 NYC 中,您可以为 LON 添加服务帐户令牌。
先决条件
从每个服务帐户获取令牌。
使用以下命令,或从 OpenShift Web 控制台获取令牌:
oc sa get-token lon eyJhbGciOiJSUzI1NiIsImtpZCI6IiJ9...
oc sa get-token lon eyJhbGciOiJSUzI1NiIsImtpZCI6IiJ9...Copy to Clipboard Copied! Toggle word wrap Toggle overflow
流程
- 登录 OpenShift 集群。
使用以下命令为备份位置添加服务帐户令牌:
oc create secret generic <token-name> --from-literal=token=<token>
oc create secret generic <token-name> --from-literal=token=<token>Copy to Clipboard Copied! Toggle word wrap Toggle overflow 例如,在 NYC 登录 OpenShift 集群,并按照如下所示创建一个
lon-tokensecret:oc create secret generic lon-token --from-literal=token=eyJhbGciOiJSUzI1NiIsImtpZCI6IiJ9...
oc create secret generic lon-token --from-literal=token=eyJhbGciOiJSUzI1NiIsImtpZCI6IiJ9...Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 在其他 OpenShift 集群上重复前面的步骤。
13.2.3. 配置托管的跨站点连接 复制链接链接已复制到粘贴板!
配置 Data Grid Operator,以使用 Data Grid 集群建立跨站点视图。
先决条件
-
确定适合用于跨站点复制的公开类型。
如果使用 OpenShift路由,您必须添加带有 TLS 证书的密钥存储和安全跨站点连接。 - 为每个 Data Grid 集群创建并交换 Red Hat OpenShift 服务帐户令牌。
流程
-
为每个 Data Grid 集群创建一个
InfinispanCR。 -
使用
spec.service.sites.local.name指定本地站点的名称。 为跨站点复制配置公开类型。
将
spec.service.sites.local.expose.type字段的值设置为以下之一:-
NodePort -
LoadBalancer -
Route
-
另外,还可使用以下字段指定端口或自定义主机名:
-
如果使用
NodePort服务,spec.service.sites.local.expose.nodePort。 -
spec.service.sites.local.expose.port(如果使用LoadBalancer服务)。 -
如果使用 OpenShift
路由,spec.service.sites.local.expose.routeHostName。
-
如果使用
指定可使用
service.sites.local.maxRelayNodes字段发送 RELAY 消息的 pod 数量。提示配置集群中的所有 pod,以发送
RELAY消息以提高性能。如果所有 Pod 直接发送备份请求,则 pod 不需要转发备份请求。-
为每个 Data Grid 集群提供名称、URL 和 secret,它们充当
spec.service.sites.locations的备份位置。 如果远程站点上的 Data Grid 集群名称或命名空间与本地站点不匹配,请使用
clusterName和namespace字段指定这些值。以下是 LON 和 NYC 的
InfinispanCR 定义示例:LON
Copy to Clipboard Copied! Toggle word wrap Toggle overflow NYC
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 重要务必调整
InfinispanCR 中的日志类别,以降低 JGroups TCP 和 RELAY2 协议的日志级别。这可防止大量日志文件使用容器存储。spec: logging: categories: org.jgroups.protocols.TCP: error org.jgroups.protocols.relay.RELAY2: errorspec: logging: categories: org.jgroups.protocols.TCP: error org.jgroups.protocols.relay.RELAY2: errorCopy to Clipboard Copied! Toggle word wrap Toggle overflow
-
使用任何其他 Data Grid 服务资源配置
InfinispanCR,然后应用更改。 验证 Data Grid 集群是否组成了跨站点视图。
检索
InfinispanCR。oc get infinispan -o yaml
oc get infinispan -o yamlCopy to Clipboard Copied! Toggle word wrap Toggle overflow -
检查
type: CrossSiteViewFormed条件。
后续步骤
如果您的集群形成了跨站点视图,您可以开始向缓存添加备份位置。