![[OpenShift Container Platform]](ngocp.gif)
![[Kubernetes]](ngkube.gif)
![[亚马逊EKS]](ngeks.gif)
![[IBM MQ Advanced]](ngadv.gif)
示例:使用 IBM MQ 操作员部署简单的原生高可用CRR配置
此示例通过 IBM® MQ Operator部署了一个队列管理器,采用简单的原生高可用跨区域复制(CRR)配置。
开始之前
要完成此示例,必须首先完成以下步骤:
- 在命令行中,登录您正在使用的集群。
- 为本示例创建两个项目/命名空间。 示例将提及伦敦和罗马网站。 这些指的是伦敦和罗马在一个群集中的两个命名空间,或者是每个站点在每个群集中的一个命名空间。
- 确保在群集中安装了 IBM MQ Operator 3.5.0 或更高版本,并在命名空间中可用。
- Amazon EKS 仅限部署 :将 AWS 负载均衡控制器安装到您的 Amazon EKS 集群中。
- 确保已安装 OpenSSL 命令行工具。
- 通过创建拉取密钥任务,完成《准备使用 Kubernetes 》的操作。
- 请阅读 《在 Red Hat OpenShift 上使用 IBM MQ 操作符部署简单队列管理器 》或 《在Amazon EKS上使用 IBM MQ 操作符部署简单队列管理器 》,以便熟悉操作符 IBM MQ 的使用方法。
关于本任务
本地 HA CRR 配置定义了两个本地 HA 组,它们共同组成一个高可用性队列管理器。 这些组通常部署在不同位置的两个集群中,但此示例允许您根据需要将两个组都部署到同一集群。 有关原生高可用性跨区域复制的概述,请参阅《原生高可用性跨区域复制》。
为简单起见,本例使用单个证书来保护所有队列管理器复制流量,该证书名为 nhacrr-qm-replication。
要了解证书在原生高可用性CRR中的使用方式,以及如何使用不同证书来保护群组和实例流量,请参阅示例:在原生高可用性CRR中使用多个 TLS 证书。
本例提供自定义资源 YAML,用于定义两个提供跨区域复制的本地 HA 组。
过程
- 创建用于队列管理器复制流量的证书。
使用以下命令创建私钥,并用它为内部证书颁发机构颁发自签名证书。 然后为队列管理器创建私钥和证书,并与内部证书颁发机构签署:
openssl genpkey -algorithm rsa -pkeyopt rsa_keygen_bits:4096 -out nhacrr-ca.key openssl req -x509 -new -nodes -key "nhacrr-ca.key" -sha512 -days 30 -subj "/CN=nhacrr-selfsigned-ca" -out nhacrr-ca.crt openssl req -new -nodes -out nhacrr-qm-replication.csr -newkey rsa:4096 -keyout nhacrr-qm-replication.key -subj "/CN=nhacrr-qm-replication" openssl x509 -req -in nhacrr-qm-replication.csr -CA nhacrr-ca.crt -CAkey nhacrr-ca.key -CAcreateserial -out nhacrr-qm-replication.crt -days 7 -sha512有关这些命令的更多信息,请参阅 《使用 OpenSSL 创建自签名PKI 》。
- 创建两个 Kubernetes 保密文件,其中包含队列管理器密钥和证书。 在罗马和伦敦站点上创建名为 nhacrr-qm-replication 的秘密,用于存储队列管理器实例的密钥和证书。
使用以下命令创建秘密。 在运行该命令前,先切换到每个命名空间(先是罗马,然后是伦敦)。
kubectl create secret generic nhacrr-qm-replication --type="kubernetes.io/tls" --from-file=tls.key=nhacrr-qm-replication.key --from-file=tls.crt=nhacrr-qm-replication.crt --from-file=nhacrr-ca.crt - 为队列管理器流量创建一对证书,具体操作请参阅 《使用 OpenSSL 创建自签名PKI 》中的说明。 在罗马和伦敦站点上创建密文(即图中名为 mq-channel 和 client-app 的证书)。
- 为罗马和伦敦创建一个包含 MQSC 命令和 INI 文件的配置地图。 创建一个包含MQSC命令的 ConfigMap 资源,用于创建新的持久消息队列和SVRCONN通道,并添加允许访问该通道的通道身份验证记录。 在罗马站点上,创建以下 ConfigMap ,然后通过在 Red Hat OpenShift...上使用命令,或在...
oc apply上使用kubectl apply命令来 Amazon EKS应用它。 在 OCP Web 控制台中,您也可以通过选择 ConfigMaps 然后创建 ConfigMapRed Hat OpenShift 来输入 YAML 配置。 对伦敦站点重复此步骤。apiVersion: v1 kind: ConfigMap metadata: name: nhacrr-configmap data: nhacrr.mqsc: | DEFINE CHANNEL('MTLS.SVRCONN') CHLTYPE(SVRCONN) SSLCAUTH(REQUIRED) SSLCIPH('ANY_TLS13_OR_HIGHER') REPLACE SET CHLAUTH('MTLS.SVRCONN') TYPE(SSLPEERMAP) SSLPEER('CN=*') USERSRC(NOACCESS) ACTION(REPLACE) SET CHLAUTH('MTLS.SVRCONN') TYPE(SSLPEERMAP) SSLPEER('CN=example-app1') USERSRC(MAP) MCAUSER('app1') ACTION(REPLACE) SET AUTHREC PRINCIPAL('app1') OBJTYPE(QMGR) AUTHADD(CONNECT,INQ) DEFINE QLOCAL('EXAMPLE.QUEUE') DEFPSIST(YES) REPLACE SET AUTHREC PROFILE('EXAMPLE.QUEUE') PRINCIPAL('app1') OBJTYPE(QUEUE) AUTHADD(BROWSE,PUT,GET,INQ) nhacrr.ini: | Service: Name=AuthorizationService EntryPoints=14 SecurityPolicy=UserExternalMQSC 定义了一个名为 MTLS.SVRCONN 的通道和一个名为 EXAMPLE.QUEUE 的队列。 通道被配置为只允许提交 CN 为 example-app1 的证书(如步骤 3 中创建的证书)的客户端访问。
- 部署本地 HA 恢复组。 恢复小组已部署至罗马现场。 请确保您处于罗马命名空间中,然后创建 QueueManager。注意: 您必须在运行组和恢复组中使用相同的队列管理器名称。 默认情况下,如果不指定
.spec.queuemanager.name,则默认为.metadata.name。 您可以使用以下方法之一实现名称匹配:- 在每个群集中为队列管理器资源命名相同的名称(即
.metadata.name匹配),并且不要覆盖名称 - 在
.metadata.name中单独命名队列管理器,并用.spec.queuemanager.name覆盖该名称,以便两个站点的名称一致。
exampleqm.metadata.name管理器名称设置为 ``。注: 此示例采用 IBM MQ Advanced 许可证。 根据 IBM MQ9.4.2 的说明,通过为队列管理器 IBM MQ 添加额外许可证,授权的队列管理器也可配置为使用原生高可用性和跨区域复制功能。 有关详细信息,请参阅 《使用 IBM MQ 操作员在 IBM MQ 许可的队列管理器上配置本机高可用性和跨区域复制 》。重要提示: 若您接受许可 IBM MQ Advanced 协议,请将 替换accept: false为accept: true。 有关许可证的详细信息,请参阅 mq.ibm.com/v1beta1: 当前许可证版本。- 示例 QueueManager 用于 Red Hat OpenShift
- 使用命令行或Web Red Hat OpenShift Container Platform 控制台,以以下配置部署队列管理器。
apiVersion: mq.ibm.com/v1beta1 kind: QueueManager metadata: name: exampleqm labels: role: Recovery spec: license: accept: false license: L-NUUP-23NH8Y use: Production queueManager: name: EXAMPLEQM availability: type: NativeHA tls: secretName: nhacrr-qm-replication nativeHAGroups: local: name: "rome" role: "Recovery" mqsc: - configMap: name: nhacrr-configmap items: - nhacrr.mqsc ini: - configMap: name: nhacrr-configmap items: - nhacrr.ini storage: queueManager: type: persistent-claim version: 9.4.5.0-r2 pki: keys: - name: default secret: secretName: example-qm-tls items: - tls.key - tls.crt - ca.crt - 示例 QueueManager 用于 Amazon EKS
- 在 Amazon EKS 集群上部署队列管理器时,请使用以下配置:
apiVersion: mq.ibm.com/v1beta1 kind: QueueManager metadata: name: exampleqm labels: role: Recovery spec: license: accept: false license: L-NUUP-23NH8Y use: Production queueManager: name: EXAMPLEQM availability: type: NativeHA tls: secretName: nhacrr-qm-replication nativeHAGroups: local: name: "rome" role: "Recovery" route: enabled: false mqsc: - configMap: name: nhacrr-configmap items: - nhacrr.mqsc ini: - configMap: name: nhacrr-configmap items: - nhacrr.ini storage: queueManager: type: persistent-claim route: enabled: false metrics: serviceMonitor: enabled: false version: 9.4.5.0-r2 pki: keys: - name: default secret: secretName: example-qm-tls items: - tls.key - tls.crt - ca.crt web: enabled: false route: enabled: falsespec.queueManager.route.enabled,spec.queueManager.availability.nativeHAGroups.route.enabled,spec.queueManager.metrics.serviceMonitor.enabled, 和spec.web.route.enabled被设置为false,因为这些是默认启 Red Hat OpenShift 用的特定功能。 这些功能必须在 Amazon EKS. 上明确禁用。
- 在每个群集中为队列管理器资源命名相同的名称(即
- 验证恢复组是否已正确部署:
- 执行相关命令以显示队列管理器资源,然后等待队列管理器开始运行。
- 在 Red Hat OpenShift 上:
oc get qmgr exampleqm - 在 Amazon EKS 上:
kubectl get qmgr exampleqm
NAME PHASE exampleqm Running - 在 Red Hat OpenShift 上:
- 当队列管理器运行时,请使用相关命令检查 Pod 状态。
- 在 Red Hat OpenShift 上:
oc get pods - 在 Amazon EKS 上:
kubectl get pods
NAME READY STATUS RESTARTS AGE exampleqm-ibm-mq-0 1/1 Running 0 2m45s exampleqm-ibm-mq-1 0/1 Running 0 2m45s exampleqm-ibm-mq-2 0/1 Running 0 2m45s - 在 Red Hat OpenShift 上:
- 使用相关命令检查恢复组的状态,其中 表示
<LEADER-POD>就绪的 1/1 Pod 名称(exampleqm-ibm-mq-0示例中为)。- 在 Red Hat OpenShift 上:
oc exec -t <LEADER-POD> -- dspmq -o nativeha -g - 在 Amazon EKS 上:
kubectl exec -t <LEADER_POD> -- dspmq -o nativeha -g
QMNAME(EXAMPLEQM) ROLE(Leader) INSTANCE(exampleqm-ibm-mq-0) INSYNC(yes) QUORUM(1/3) GRPLSN() GRPNAME(rome) GRPROLE(Recovery) GRPNAME(rome) GRPROLE(Recovery) GRPADDR(Unknown) GRPVER(9.4.2.0) GRSTATUS(Waiting for connection) RCOVLSN() RCOVTIME() BACKLOG(Unknown) INSYNC(Unknown) SYNCTIME() ALTDATE(2025-04-25) ALTTIME(13.48.15)该状态的关键部分如下:Role(Leader)QUORUM(1/3)- 在Live和Recovery组连接之前,该值保持为1/3GRSTATUS(Waiting for connection)- 当实时组连接时,此内容将更新
- 在 Red Hat OpenShift 上:
- 执行相关命令以显示队列管理器资源,然后等待队列管理器开始运行。
- 仅限 Amazon EKS 部署 :配置 以允许 Live 组与 Recovery
LoadBalancer组通信。- 请确保您处于 Rome 命名空间中,然后创建
LoadBalancerService以便通过以下配置从集群外部建立 TLS 连接至队列管理器。apiVersion: v1 kind: Service metadata: name: crr-rome annotations: service.beta.kubernetes.io/aws-load-balancer-type: external service.beta.kubernetes.io/aws-load-balancer-scheme: internet-facing service.beta.kubernetes.io/aws-load-balancer-nlb-target-type: instance spec: type: LoadBalancer ports: - port: 9415 targetPort: 9415 name: nha-crr selector: app.kubernetes.io/name: ibm-mq app.kubernetes.io/instance: exampleqm重要提示: 若您使用的是 IPv6 单堆栈系统,请对以下metadata.annotations部分进行相应修改:- 将 的值
service.beta.kubernetes.io/aws-load-balancer-nlb-target-type从"instance"更改为"ip" - 添加以下行:
service.beta.kubernetes.io/aws-load-balancer-ip-address-type: "dualstack"
- 将 的值
- 验证类型为 的
Service是否已LoadBalancer创建:kubectl get service <LOAD_BALANCER_NAME> - 请确认您的
LoadBalancer已准备就绪。Amazon 负载均衡控制器需要几分钟时间来配置并注册其目标。 运行以下命令以显示.LoadBalancer的状态。 当 准备就绪LoadBalancer时,状态为active:aws elbv2 describe-load-balancers --query 'LoadBalancers[*].[LoadBalancerName,State.Code]' --output text
- 请确保您处于 Rome 命名空间中,然后创建
- 部署本地 HA Live 组。 现场小组部署在伦敦现场:请确保您处于正确的命名空间中,然后创建 QueueManager。注: 此示例采用 IBM MQ Advanced 许可证。 根据 IBM MQ9.4.2 的说明,通过为队列管理器 IBM MQ 添加额外许可证,授权的队列管理器也可配置为使用原生高可用性和跨区域复制功能。 有关详细信息,请参阅 《使用 IBM MQ 操作员在 IBM MQ 许可的队列管理器上配置本机高可用性和跨区域复制 》。重要提示: 若您接受许可 IBM MQ Advanced 协议,请将 替换
accept: false为accept: true。 有关许可证的详细信息,请参阅 mq.ibm.com/v1beta1: 当前许可证版本。- 示例 QueueManager 用于 Red Hat OpenShift
- 使用命令行或Web Red Hat OpenShift Container Platform 控制台,以以下配置部署队列管理器。
更新YAML文件中指定的地址,该地址用于实时组连接到恢复组(apiVersion: mq.ibm.com/v1beta1 kind: QueueManager metadata: name: exampleqm labels: role: Live spec: license: accept: false license: L-NUUP-23NH8Y use: Production queueManager: name: EXAMPLEQM availability: type: NativeHA tls: secretName: nhacrr-qm-replication nativeHAGroups: local: name: "london" role: "Live" remotes: - name: "rome" addresses: - "<rome group hostname>:443" mqsc: - configMap: name: nhacrr-configmap items: - nhacrr.mqsc ini: - configMap: name: nhacrr-configmap items: - nhacrr.ini storage: queueManager: type: persistent-claim version: 9.4.5.0-r2 pki: keys: - name: default secret: secretName: example-qm-tls items: - tls.key - tls.crt - ca.crt"<rome group hostname>:443"如示例所示)。 将其替换为罗马站点上该exampleqm-ibm-mq-nhacrr路由的主机属性。 要检索此属性,请确保您位于罗马站点,并使用以下命令获取路由nhacrr主机名:oc get route exampleqm-ibm-mq-nhacrr --template="{{.spec.host}}"注意: 部署CRR组时会创建两条路由,一条终止于qm,另一条终止于nhacrr。 路由qm用于向队列管理器发送消息,而nhacrr路由则用于组间通信。 在 YAML 中,始终将nhacrr路由的主机地址添加为组的远程地址。 - 示例 QueueManager 用于 Amazon EKS
在 Amazon EKS 集群上部署队列管理器时,请使用以下配置:
更新YAML文件中指定的地址,该地址用于实时组连接到恢复组(apiVersion: mq.ibm.com/v1beta1 kind: QueueManager metadata: name: exampleqm labels: role: Live spec: license: accept: false license: L-NUUP-23NH8Y use: Production queueManager: name: EXAMPLEQM availability: type: NativeHA tls: secretName: nhacrr-qm-replication nativeHAGroups: local: name: "london" role: "Live" route: enabled: false remotes: - name: "rome" addresses: - "<rome group hostname>:9415" mqsc: - configMap: name: nhacrr-configmap items: - nhacrr.mqsc ini: - configMap: name: nhacrr-configmap items: - nhacrr.ini storage: queueManager: type: persistent-claim route: enabled: false metrics: serviceMonitor: enabled: false version: 9.4.5.0-r2 pki: keys: - name: default secret: secretName: example-qm-tls items: - tls.key - tls.crt - ca.crt web: enabled: false route: enabled: false"<rome group hostname>:9415"如示例所示)。 将其替换为LoadBalancer罗马站点上(您在上一步骤创建的)的宿主属性。 要检索此属性,请确保您位于罗马站点,然后使用以下命令获取主机名nhacrrLoadBalancer:kubectl get service <LOAD_BALANCER_NAME> -o jsonpath="{.status.loadBalancer.ingress[*].hostname}{'\n'}"spec.queueManager.route.enabled,spec.queueManager.availability.nativeHAGroups.route.enabled,spec.queueManager.metrics.serviceMonitor.enabled, 和spec.web.route.enabled被设置为false,因为这些是默认启 Red Hat OpenShift 用的特定功能。 这些功能必须在 Amazon EKS. 上明确禁用。
- 验证实时组和跨区复制。 重复步骤 6 中的操作,但这次是针对伦敦组。
- 执行相关命令以显示队列管理器资源,然后等待队列管理器开始运行。
- 在 Red Hat OpenShift 上:
oc get qmgr exampleqm - 在 Amazon EKS 上:
kubectl get qmgr exampleqm
NAME PHASE exampleqm Running - 在 Red Hat OpenShift 上:
- 当队列管理器运行时,请使用相关命令检查 Pod 状态。
- 在 Red Hat OpenShift 上:
oc get pods - 在 Amazon EKS 上:
kubectl get pods
NAME READY STATUS RESTARTS AGE exampleqm-ibm-mq-0 1/1 Running 0 2m45s exampleqm-ibm-mq-1 0/1 Running 0 2m45s exampleqm-ibm-mq-2 0/1 Running 0 2m45s - 在 Red Hat OpenShift 上:
- 使用以下命令检查恢复组的状态,其中
<ACTIVE-POD>是就绪的 1/1 pod 的名称(exampleqm-ibm-mq-0示例中为)。- 在 Red Hat OpenShift 上:
oc exec -t <ACTIVE-POD> -- dspmq -o nativeha -g - 在 Amazon EKS 上:
kubectl exec -t <ACTIVE-POD> -- dspmq -o nativeha -g
您应该会看到以下输出:oc exec -t <ACTIVE-POD> -- dspmq -o nativeha -gQMNAME(EXAMPLEQM) ROLE(Active) INSTANCE(exampleqm-ibm-mq-0) INSYNC(yes) QUORUM(3/3) GRPLSN(<0:0:87:58322>) GRPNAME(london) GRPROLE(Live) GRPNAME(london) GRPROLE(Live) GRPADDR(Unknown) GRPVER(9.4.2.0) GRSTATUS(Normal) RCOVLSN(<0:0:87:58322>) RCOVTIME (2025-05-16T14:27:09.051799Z) INITLSN(<0:0:9:4696>) INITTIME(2025-05-12T16:58:13.582274Z) LIVETIME (2025-05-12T16:58:16. 319844Z) ALTDATE(2025-05-16) ALTTIME(14.27.10) GRPNAME(rome) GRPROLE(Recovery) GRPADDR(exampleqm-ibm-mq-nhacrr-<namespace>.apps.<cluster>) GRPVER(9.4.2.0) CONNGRP (yes) GRSTATUS(Normal) RCOVLSN(<0:0:87:58322>) RCOVTIME(2025-05-16T14:27:09.051799Z) BACKLOG(0) INSYNC(yes) SYNCTIME (2025-05-16T14:28:38.084565Z) ALTDATE(2025-05-16) ALTTIME(14.28.31)该状态的关键部分如下:Role(Active)QUORUM(3/3)实时组已达到法定人数GRSTATUS(Normal)
- 在 Red Hat OpenShift 上:
- 在罗马站点上运行相关命令再次检查恢复组的状态,其中
<LEADER_POD>是 podREADY 1/1的名称。- 在 Red Hat OpenShift 上:
oc exec -t <LEADER_POD> -- dspmq -o nativeha -g - 在 Amazon EKS 上:
kubectl exec -t <LEADER_POD> -- dspmq -o nativeha -g
您应该会看到以下输出:
请注意,QMNAME(EXAMPLEQM) ROLE(Leader) INSTANCE(exampleqm-ibm-mq-0) INSYNC(yes) QUORUM(3/3) GRPLSN(<0:0:87:58322>) GRPNAME(rome) GRPROLE(Recovery) GRPNAME(rome) GRPROLE(Recovery) GRPADDR(exampleqm-ibm-mq-nhacrr-<namespace>.apps.<cluster>) GRPVER(9.4.3.0) GRSTATUS (Normal) RCOVLSN(<0:0:87:58322>) RCOVTIME(2025-05-16T14:27:09.051799Z) BACKLOG(0) INSYNC(yes) SYNCTIME(2025-05-16T14:30:40. 134627Z) ALTDATE(2025-05-16) ALTTIME(14.27.17) GRPNAME(london) GRPROLE(Live) GRPADDR(Unknown) GRPVER(9.4.3.0) CONNGRP(yes) GRSTATUS(Normal) RCOVLSN (<0:0:87:58322>) RCOVTIME(2025-05-16T14:27:09.051799Z) INITLSN(<0:0:9:4696>) INITTIME(2025-05-12T16:58:13. 582274Z) LIVETIME (2025-05-12T16:58:16.319844Z) ALTDATE(2025-05-16) ALTTIME(14.30.41)QUORUM(3/3)和GRSTATUS(Normal)字段已更新。 - 在 Red Hat OpenShift 上:
- 执行相关命令以显示队列管理器资源,然后等待队列管理器开始运行。
- 测试与队列管理器的连接。要确认队列管理器已配置且可用,请根据您所在平台的相应链接执行以下步骤:
- Red Hat OpenShift测试从笔记本电脑到队列管理器的互通 TLS 连接,用于 Red Hat OpenShift。 确保队列管理器主机名(在链接页面步骤2中确定)是伦敦站点路由的主机名。
- Amazon EKS测试从笔记本电脑上的客户端应用程序到队列管理器的互通 TLS 连接 (针对Amazon EKS)。
- 仅限 Amazon EKS 部署 :配置 以允许恢复组与运行
LoadBalancer组通信。- 请确保您处于伦敦命名空间中,然后创建
LoadBalancerService以便通过以下配置从集群外部建立 TLS 连接至队列管理器。apiVersion: v1 kind: Service metadata: name: crr-london annotations: service.beta.kubernetes.io/aws-load-balancer-type: external service.beta.kubernetes.io/aws-load-balancer-scheme: internet-facing service.beta.kubernetes.io/aws-load-balancer-nlb-target-type: instance spec: type: LoadBalancer ports: - port: 9415 targetPort: 9415 name: nha-crr selector: app.kubernetes.io/name: ibm-mq app.kubernetes.io/instance: exampleqm重要提示: 若您使用的是 IPv6 单堆栈系统,请对以下metadata.annotations部分进行相应修改:- 将 的值
service.beta.kubernetes.io/aws-load-balancer-nlb-target-type从"instance"更改为"ip" - 添加以下行:
service.beta.kubernetes.io/aws-load-balancer-ip-address-type: "dualstack"
- 将 的值
- 验证类型为 的
Service是否已LoadBalancer创建:kubectl get service <LOAD_BALANCER_NAME> - 请确认您的
LoadBalancer已准备就绪。Amazon 负载均衡控制器需要几分钟时间来配置并注册其目标。 运行以下命令以显示.LoadBalancer的状态。 当 准备就绪LoadBalancer时,状态为active:aws elbv2 describe-load-balancers --query 'LoadBalancers[*].[LoadBalancerName,State.Code]' --output text
- 请确保您处于伦敦命名空间中,然后创建
- 将远程地址添加到本机高可用性恢复组。当罗马成为活动组时,它需要知道伦敦的远程地址,以便能够连接到伦敦作为恢复组。 要添加此内容,请更新罗马站点的配置文件
spec.queueManager.availability.nativeHAGroups,在本地配置段落下方添加以下内容:- 打开 Red Hat OpenShift
remotes: - name: "london" addresses: - "<london group hostname>:443"将地址替换为伦敦站点exampleqm-ibm-mq-nhacrr路由的主机属性。 请确保您位于伦敦站点,然后使用以下命令获取nhacrr路由的主机名:
更新完成后,请等待 pod 重启并运行,且其中一个 pod 处于 podoc get route exampleqm-ibm-mq-nhacrr --template="{{.spec.host}}"READY 1/1状态。- 打开 Amazon EKS
remotes: - name: "london" addresses: - "<london group hostname>:9415"将地址替换为伦敦站点上LoadBalancer的主机属性。 请确保您位于伦敦站点,然后使用以下命令获取LoadBalancernhacrr主机名:
更新完成后,请等待 pod 重启并运行,且其中一个 pod 处于 podkubectl get service <LOAD_BALANCER_NAME> -o jsonpath="{.status.loadBalancer.ingress[*].hostname}{'\n'}"READY 1/1状态。
- 将罗马站点的域名添加到 文件 ccdt.json 中。切换后,罗马成为实时站点,客户需要连接到罗马的群组。 通过将罗马的主机名添加到 文件 ccdt.json 中,即可启用此行为。
- 打开 Red Hat OpenShift
- 获取罗马站点
qm的主机名。 请确保您位于罗马站点,然后使用以下命令获取路由qm的主机名:oc get route exampleqm-ibm-mq-qm --template="{{.spec.host}}"注: 存在两条路由,此处请使用消息传输路由。 将路由qm的主机地址添加到文件 ccdt.json 中。 - 在
ccdt.json文件中,在连接列表中添加第二个主机名和端口对,这样连接列表就会变成这样:"connection": [ { "host": "<hostname from London qm route>", "port": 443 }, { "host": "<hostname from Rome qm route>", "port": 443 } ],
- 获取罗马站点
- 打开 Amazon EKS
- 获取罗马站点
qm的主机名。 请确保您当前位于罗马站点,然后使用以下命令获取主机名qmLoadBalancer:kubectl get service <LOAD_BALANCER_NAME> -o jsonpath="{.status.loadBalancer.ingress[*].hostname}{'\n'}" - 在
ccdt.json文件中,在连接列表中添加第二个主机名和端口对,这样连接列表就会变成这样:"connection": [ { "host": "<hostname from London qm LoadBalancer>", "port": 1414 }, { "host": "<hostname from Rome qm LoadBalancer>", "port": 1414 } ],
- 获取罗马站点
- 向队列中添加一些持续信息。 ConfigMap 中指定的 mqsc 文件中定义的队列具有
DEFPSIST(YES)属性,因此放入队列的所有报文都将是持久的,并复制到恢复组。 使用以下命令将信息放入队列:/opt/mqm/samp/bin/amqsputc EXAMPLE.QUEUE EXAMPLEQM如果与队列管理器的连接成功,则输出以下响应:target queue is EXAMPLE.QUEUE输入一些文字,然后每次都按回车键 ,即可将多条信息放入队列。 按两次回车键完成。
- 执行从伦敦的实时组到罗马的恢复组的托管切换,以证明本地 HA - CRR 设置是正确的。 请按照《 在原生高可用性CRR配置中完成计划切换 》中的说明进行操作。 在更新 "实时 "组和 "恢复 "组的角色时,您可能会发现在 YAML 中更新
metadata.labels.role以反映您的更改非常有用,但这对于切换来说并非必要。 完成切换后,您可以在罗马检索新实时群组中的信息。有关故障转移和切换的更多信息,请参阅 《原生高可用性CRR切换与故障转移》。
- 运行以下命令,检索切换前发送的信息:
/opt/mqm/samp/bin/amqsgetc EXAMPLE.QUEUE EXAMPLEQM你在步骤14 中添加的消息已准备就绪,并将被输出。 几秒钟后,命令退出。
后续操作
维护完成后,您可以通过重复步骤15 中的操作切换回原始实时组。
您还可以尝试执行非计划故障转移,具体操作请参阅 《在原生高可用性CRR配置中完成非计划故障转移》中的说明。
要了解如何使用不同证书来保护CRR配置的不同部分,请参阅示例:在原生高可用性CRR中使用多个 TLS 证书。