4.24. 为灾难恢复配置数据镜像
镜像是将数据从代理复制到一个或多个其他代理以进行灾难恢复的过程。镜像中的源和目标代理可以在不同数据中心的独立的 OpenShift 集群中,以防止数据中心中断。镜像也可用于数据备份,或创建用于在维护窗口期间使用的故障转移代理。
创建镜像前存在的消息不会被镜像(mirror)。
流程
配置两个
ActiveMQArtemis
自定义资源(CR)实例,为镜像的数据创建源代理和目标代理。为每个名称指定一个唯一名称。例如:Copy to Clipboard Copied! Toggle word wrap Toggle overflow Copy to Clipboard Copied! Toggle word wrap Toggle overflow 在目标代理的 CR 中,为镜像连接添加 acceptor。例如:
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 创建 acceptor 后,会以以下格式为 acceptor 公开路由:
<broker name>-<acceptor name>-<ordinal>-svc-rte.<namespace>.<hostname>
当您稍后将镜像配置添加到源代理时,您可以使用此路由创建到目标代理的连接。
<ordinal> 是 StatefulSet 分配给代理 pod 的普通者。集群中的第一个代理 pod 被分配为 0。第二个 pod 被分配为 1 的部分,以此类推。pod 的 ordinal 值存储在
STATEFUL_SET_ORDINAL
变量中。您可以在源代理的 mirror 连接详情中使用此变量而不是 ordinal 值。例如:<broker name>-<acceptor name>-${STATEFUL_SET_ORDINAL}-svc-rte.<namespace>.<hostname>
通过使用
STATEFUL_SET_ORDINAL
变量,如果您扩展源和目标集群中的代理数量,请确保源会创建一个具有相同普通目标的镜像连接。如果要通过镜像连接安全地发送数据,请为连接配置传输层安全(TLS)。根据您的要求,您可以使用各种方法生成 SSL/TLS 证书。例如,您可以使用可信证书颁发机构(CA)、cert-manager Operator 用于 OpenShift 或安全套接字层(SSL)工具。
以下示例提供了使用 SSL/TLS 工具在代理间配置 mutual TLS 身份验证(mTLS)的步骤概述,以手动生成自签名证书。
为目标代理生成自签名 SSL/TLS 证书。例如:
keytool -genkey -trustcacerts -alias broker -keyalg RSA -keystore broker.ks -keypass password -storepass password
将您创建的 SSL/TLS 证书的公钥导出到文件,以便您可以将密钥导入到供源代理使用的信任存储文件中。例如:
keytool -export -noprompt -alias broker -keystore broker.ks -file for_source_truststore -storepass password
将您导出的 SSL/TLS 证书的公钥导入到信任存储文件中,以便在源代理中使用。例如:
keytool -import -noprompt -trustcacerts -alias broker -keystore client.ts -file for_source_truststore -storepass password
为源代理生成自签名 SSL/TLS 证书。例如:
keytool -genkey -trustcacerts -alias broker -keyalg RSA -keystore broker.ks -keypass password -storepass password
导出您创建的 SSL/TLS 证书的公钥,以便您可以将密钥导入到用于在目标代理上使用的信任存储文件中。
keytool -export -noprompt -alias broker -keystore broker.ks -file for_target_truststore -storepass password
将您导出的 SSL/TLS 证书的公钥导入到信任存储文件中,以便在目标代理中使用。例如:
keytool -import -noprompt -trustcacerts -alias broker -keystore client.ts -file for_target_truststore -storepass password
将您为源代理创建的密钥存储和信任存储文件添加到源代理命名空间中的 secret 中。例如:
oc create secret generic mirror --from-file=broker.ks=broker.ks --from-file=client.ts=client.ts --from-literal=keyStorePassword=password --from-literal=trustStorePassword=password
重复此步骤,将您为目标代理创建的密钥存储和信任存储文件添加到目标代理命名空间中的 secret 中。
在为目标代理配置的 acceptor 中,将
sslEnabled
属性设置为true
,并指定您在目标代理命名空间中创建的 secret 的名称。例如:Copy to Clipboard Copied! Toggle word wrap Toggle overflow 在源代理的 CR 中,将对源代理命名空间中创建的 secret 的引用添加到
extraMounts
属性。此步骤是必需的,以便 Operator 在每个代理 pod 上的 secret 中挂载密钥存储和信任存储文件。例如:Copy to Clipboard Copied! Toggle word wrap Toggle overflow secret 中的 keystore 和 truststore 文件挂载到代理 pod 上的
/amq/extra/secrets/<secret name
> 目录中。
在源代理的 CR 中,在
brokerProperties
属性下,配置镜像连接详情。对于连接 URI,指定在目标代理中创建的 acceptor 公开的路由。如果要使用 SSL/TLS 来保护镜像连接,请在 URI 中包括以下内容:- 端口号 443
-
sslEnabled=true
启用 SSL/TLS - 密钥和信任存储文件的路径和凭证
例如:
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 注意如果需要,您可以为源代理配置多个镜像目标。例如:
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 在源代理的 CR 中,根据需要配置额外的镜像配置属性。例如:
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 注意您可以使用任何字母数字字符的字符串来命名 AMQP 连接。在上例中,AMQP 连接名称为
datacenter1
。- AMQPConnections.<name>.user
- 目标代理中具有镜像所需事件权限的用户名称。
- AMQPConnections.<name>.password
- 目标代理中的用户密码。
- AMQPConnections.<name>.retryInterval
- 在重试尝试连接到目标代理之间的间隔(以毫秒为单位)。
- AMQPConnections.<name>.connectionElements.mirror.messageAcknowledgements
-
指定消息确认是否被镜像。默认值为
true
。 - AMQPConnections.<name>.connectionElements.mirror.queueCreation
-
指定是否镜像队列或地址创建事件。默认值为
true
。 - AMQPConnections.<name>.connectionElements.mirror.queueRemoval
-
指定队列或地址删除事件是否被镜像。默认值为
true
。 - AMQPConnections.<name>.connectionElements.mirror.addressFilter
源代理可用于包含或排除事件要镜像的地址的过滤器。例如,您可能希望将临时队列排除在被镜像之外。
您可以将过滤器指定为以逗号分隔的地址列表。如果要指定要排除的地址列表,请使用感叹号(!)为每个地址添加前缀。在以下示例中,开头为
us.
和europe.
的地址的事件不会被镜像。AMQPConnections.<name>.connectionElements.mirror.addressFilter=!us.,!europe.
注意如果您指定要包含的一个或多个地址,则不会镜像所有其他地址的事件。如果您指定要排除的一个或多个地址,则所有其他地址的事件都会被镜像。
-
在源代理的 CR 的
status
部分中,验证BrokerPropertiesApplied
条件的状态为true
,以确认是否应用了您在 CR 中指定的所有属性。如需更多信息,请参阅 第 3.7 节 “查看代理部署的状态信息”。 检查源代理 pod 的日志,以查找类似如下的行,以确认已建立镜像连接。
broker-prod-ss-0 broker-prod-container Connected on Server AMQP Connection dr on broker-dr-amqp-0-svc-rte-dr.lab.redhat.com:443 after 0 retries