4.24. 재해 복구를 위한 데이터 미러링 구성
미러링은 재해 복구를 위해 브로커에서 하나 이상의 다른 브로커로 데이터를 복사하는 프로세스입니다. 미러의 소스 및 대상 브로커는 데이터 센터 중단을 방지하기 위해 다른 데이터 센터의 별도의 OpenShift 클러스터에 있을 수 있습니다. 미러링은 데이터 백업에 사용하거나 유지 관리 기간 중에 사용할 장애 조치 브로커를 생성할 수도 있습니다.
미러가 생성되기 전에 존재하는 메시지는 미러링되지 않습니다.
프로세스
두 개의
ActiveMQArtemisCR(사용자 정의 리소스) 인스턴스를 구성하여 소스 브로커와 미러링된 데이터에 대한 대상 브로커를 생성합니다. 각각에 대해 고유한 이름을 지정합니다. 예를 들면 다음과 같습니다.apiVersion: broker.amq.io/v1beta1 kind: ActiveMQArtemis metadata: name: production-broker namespace: production spec: deploymentPlan: size: 1apiVersion: broker.amq.io/v1beta1 kind: ActiveMQArtemis metadata: name: mirror-broker namespace: dr spec: deploymentPlan: size: 1대상 브로커의 CR에 미러 연결에 대한 어셉터를 추가합니다. 예를 들면 다음과 같습니다.
metadata: name: mirror-broker namespace: dr spec: ... acceptors: - expose: true name: amqp port: 5672 protocols: amqp ...어셉터를 생성하면 다음 형식으로 수락자에 대한 경로가 노출됩니다.
<브로커 이름>-<수락자 이름>-<ordinal>-svc-rte.<namespace>.<hostname>이 절차의 뒷부분에서 소스 브로커에 미러 구성을 추가하면 이 경로를 사용하여 대상 브로커에 대한 연결을 생성합니다.
<ordinal>은 StatefulSet에 의해 브로커 Pod에 할당된 서수입니다. 클러스터의 첫 번째 브로커 포드에 0이 할당됩니다. 두 번째 포드에는 1의 오디널이 할당됩니다. Pod의 ordinal 값은
STATEFUL_SET_ORDINAL변수에 저장됩니다. 소스 브로커의 미러 연결 세부 정보에서 서수 값 대신 이 변수를 사용할 수 있습니다. 예를 들면 다음과 같습니다.<브로커 이름>-<수락자 이름>-$STATEFUL_SET_ORDINAL}-svc-rte.<namespace>.<hostname>STATEFUL_SET_ORDINAL변수를 사용하면 소스 및 대상 클러스터의 브로커 수를 확장하면 소스가 동일한 오디네탈 대상에 대한 미러 연결을 생성해야 합니다.미러 연결을 통해 데이터를 안전하게 보내려면 연결에 대한 TLS(Transport Layer Security)를 구성합니다. 요구 사항에 따라 다양한 방법을 사용하여 SSL/TLS 인증서를 생성할 수 있습니다. 예를 들어 신뢰할 수 있는 CA(인증 기관), cert-manager Operator for OpenShift 또는 SSL(Secure Sockets Layer) 툴을 사용할 수 있습니다.
다음 예제에서는 SSL/TLS 툴을 사용하여 자체 서명된 인증서를 수동으로 생성하여 브로커 간에 상호 TLS 인증(mTLS)을 구성하는 단계를 요약합니다.
대상 브로커의 자체 서명된 SSL/TLS 인증서를 생성합니다. 예를 들면 다음과 같습니다.
keytool -genkey -trustcacerts -alias 브로커 -keyalg RSA -keystore broker.ks -keypass 암호 -storepass 암호생성한 SSL/TLS 인증서의 공개 키를 파일로 내보내 소스 브로커에서 사용할 키를 신뢰 저장소 파일로 가져올 수 있습니다. 예를 들면 다음과 같습니다.
keytool -export -noprompt -alias broker -keystore broker.ks -file for_source_truststore -storepass 암호소스 브로커에서 사용할 신뢰 저장소 파일로 내보낸 SSL/TLS 인증서의 공개 키를 가져옵니다. 예를 들면 다음과 같습니다.
keytool -import -noprompt -trustcacerts -alias broker -keystore client.ts -file for_source_truststore -storepass 암호소스 브로커의 자체 서명된 SSL/TLS 인증서를 생성합니다. 예를 들면 다음과 같습니다.
keytool -genkey -trustcacerts -alias 브로커 -keyalg RSA -keystore broker.ks -keypass 암호 -storepass 암호생성한 SSL/TLS 인증서의 공개 키를 내보내 대상 브로커에서 사용할 키를 신뢰 저장소 파일로 가져올 수 있습니다.
keytool -export -noprompt -alias broker -keystore broker.ks -file for_target_truststore -storepass 암호대상 브로커에서 사용할 신뢰 저장소 파일로 내보낸 SSL/TLS 인증서의 공개 키를 가져옵니다. 예를 들면 다음과 같습니다.
keytool -import -noprompt -trustcacerts -alias broker -keystore client.ts -file for_target_truststore -storepass 암호소스 브로커용으로 생성한 키 저장소 및 신뢰 저장소 파일을 소스 브로커의 네임스페이스에 있는 시크릿에 추가합니다. 예를 들면 다음과 같습니다.
oc create secret generic mirror --from-file=broker.ks=broker.ks --from-file=client.ts --from-literal=keyStorePassword=password --from-literal=trustStorePassword=password이 단계를 반복하여 대상 브로커에 대해 생성한 키 저장소 및 신뢰 저장소 파일을 대상 브로커의 네임스페이스의 시크릿에 추가합니다.
대상 브로커에 대해 구성된 수락자에서
sslEnabled속성을true로 설정하고 대상 브로커의 네임스페이스에서 생성한 시크릿 이름을 지정합니다. 예를 들면 다음과 같습니다.metadata: name: mirror-broker namespace: dr spec: ... acceptors: - expose: true name: amqp port: 5672 protocols: amqp sslEnabled: true sslSecret: mirror ...소스 브로커의 CR에서 소스 브로커의 네임스페이스에서 생성한 보안에 대한 참조를
extraMounts속성에 추가합니다. Operator가 각 브로커 Pod의 시크릿에 키 저장소 및 신뢰 저장소 파일을 마운트하려면 이 단계가 필요합니다. 예를 들면 다음과 같습니다.spec: ... deploymentPlan: extraMounts: secrets: - mirror ...시크릿의 키 저장소 및 신뢰 저장소 파일은 브로커 Pod의
/amq/extra/secrets/<시크릿 이름> 디렉터리에 마운트됩니다.
소스 브로커의 CR에서
brokerProperties속성 아래에 있는 미러 연결 세부 정보를 구성합니다. 연결 URI의 경우 대상 브로커에서 생성한 어셉터에 대해 노출된 경로를 지정합니다. SSL/TLS를 사용하여 미러 연결을 보호하려면 URI에 다음을 포함합니다.- 포트 번호 443
-
SSL/TLS를 활성화하는
sslEnabled=true - 키 저장소 및 신뢰 저장소 파일의 경로와 인증 정보
예를 들면 다음과 같습니다.
spec: ... brokerProperties: - AMQPConnections.datacenter1.uri=tcp://broker-dr-amqp-${STATEFUL_SET_ORDINAL}-svc-rte-dr.apps.lab.redhat.com:443?;sslEnabled=true;trustStorePath=/amq/extra/secrets/mirror/client.ts;trustStorePassword=password;keyStorePath=/amq/extra/secrets/mirror/broker.ks;keyStorePassword=password - AMQPConnections.datacenter1.connectionElements.mirror.type=MIRROR ...참고필요한 경우 소스 브로커에 대한 여러 미러 대상을 구성할 수 있습니다. 예를 들면 다음과 같습니다.
spec: ... brokerProperties: - AMQPConnections.datacenter1.uri=tcp://primary-mirror-broker-amqp-${STATEFUL_SET_ORDINAL}-svc.dr.svc.cluster.local:61616 - AMQPConnections.datacenter1.connectionElements.mirror.type=MIRROR - AMQPConnections.datacenter2.uri=tcp://backup-mirror-broker-amqp-${STATEFUL_SET_ORDINAL}-svc.dr.svc.cluster.local:61616 - AMQPConnections.datacenter2.connectionElements.mirror.type=MIRROR ...소스 브로커의 CR에서 필요에 따라 추가 미러 구성 속성을 구성합니다. 예를 들면 다음과 같습니다.
- AMQPConnections.datacenter1.user=admin - AMQPConnections.datacenter1.password=admin - AMQPConnections.datacenter1.retryInterval=5000 - AMQPConnections.datacenter1.connectionElements.mirror.messageAcknowledgements=true - AMQPConnections.datacenter1.connectionElements.mirror.queueCreation=true - AMQPConnections.datacenter1.connectionElements.mirror.queueRemoval=true - AMQPConnections.datacenter1.connectionElements.mirror.addressFilter=addresses참고영숫자 문자열을 사용하여 AMQP 연결의 이름을 지정할 수 있습니다. 이전 예에서 AMQP 연결 이름은
datacenter1입니다.- AMQPConnections.<name>.user
- 필요한 이벤트를 미러링할 수 있는 권한이 있는 대상 브로커의 사용자 이름입니다.
- AMQPConnections.<이름>.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 서버 AMQP 연결 dr의 broker-dr-amqp-0-svc-rte-dr.lab.redhat.com:443 후 0 재시도 후