4.13. 클러스터 스케일 다운을 지원하는 메시지 마이그레이션 활성화
클러스터의 브로커 수를 축소하고 메시지를 클러스터의 나머지 Pod로 마이그레이션하려면 메시지 마이그레이션을 활성화해야 합니다.
메시지 마이그레이션이 활성화된 클러스터를 축소하면 스케일다운 컨트롤러에서 메시지 마이그레이션 프로세스를 관리합니다.
4.13.1. 메시지 마이그레이션 프로세스의 단계
메시지 마이그레이션 프로세스는 다음 단계를 따릅니다.
- 배포의 의도적인 스케일 다운으로 인해 배포의 브로커 Pod가 종료되면 Operator는 메시지 마이그레이션을 준비하기 위해 스케일 다운 사용자 정의 리소스를 자동으로 배포합니다.
분리된 PV(영구 볼륨)를 확인하려면 축소 컨트롤러에서 볼륨 클레임의 오디널을 확인합니다. 컨트롤러는 볼륨 클레임의 오디널을 프로젝트의 StatefulSet (즉, 브로커 클러스터)에서 실행 중인 브로커 Pod의 항목과 비교합니다.
볼륨 클레임의 오디널이 브로커 클러스터에서 실행 중인 브로커 Pod의 서수보다 많은 경우 축소 컨트롤러는 해당 ordinal의 브로커 Pod가 종료되고 메시징 데이터를 다른 브로커 Pod로 마이그레이션해야 함을 결정합니다.
- scaledown 컨트롤러는 drainer Pod를 시작합니다. drainer Pod는 클러스터의 다른 라이브 브로커 Pod 중 하나에 연결하고 해당 라이브 브로커 Pod로 메시지를 마이그레이션합니다.
다음 그림은 스케일다운 컨트롤러(레이닝 컨트롤러라고도 함)가 실행 중인 브로커 Pod로 메시지를 마이그레이션하는 방법을 보여줍니다.
메시지가 작동 브로커 Pod로 성공적으로 마이그레이션되면 드레인터 Pod가 종료되고 축소 컨트롤러에서 고립된 PV의 PVC를 제거합니다. PV가 "Released" 상태로 돌아갑니다.
PV의 회수 정책이 유지
되도록 설정된 경우 PV를 삭제하고 다시 생성할 때까지 다른 Pod에서 PV를 사용할 수 없습니다. 예를 들어, 축소 후 클러스터를 확장하면 PV를 삭제하고 다시 생성할 때까지 Pod에서 PV를 사용할 수 없습니다.
추가 리소스
- 브로커 배포를 축소할 때 메시지 마이그레이션의 예는 4.13.2절. “메시지 마이그레이션 활성화” 를 참조하십시오.
4.13.2. 메시지 마이그레이션 활성화
ActiveMQArtemis
사용자 정의 리소스(CR)에서 메시지 마이그레이션을 활성화할 수 있습니다.
사전 요구 사항
- 기본 브로커 배포가 이미 있습니다. 3.4.1절. “기본 브로커 인스턴스 배포”을 참조하십시오.
- 메시지 마이그레이션이 작동하는 방식을 이해합니다. 자세한 내용은 4.13.1절. “메시지 마이그레이션 프로세스의 단계”의 내용을 참조하십시오.
- 스케일다운 컨트롤러는 단일 OpenShift 프로젝트 내에서만 작동합니다. 컨트롤러는 별도의 프로젝트에서 브로커 간에 메시지를 마이그레이션할 수 없습니다.
- 브로커 배포를 0(zero)으로 축소하면 메시징 데이터를 마이그레이션할 수 있는 실행 중인 브로커 Pod가 없기 때문에 메시지 마이그레이션이 발생하지 않습니다. 그러나 배포를 0으로 축소한 다음 원래 배포보다 작은 크기로 백업하면 종료된 브로커에 대해 드레인더 Pod가 시작됩니다.
절차
브로커 배포의 CR 인스턴스를 편집합니다.
OpenShift 명령줄 인터페이스 사용:
- 브로커 배포를 위해 프로젝트에 CR을 배포할 수 있는 권한이 있는 사용자로 OpenShift Container Platform에 로그인합니다.
배포의 CR을 편집합니다.
oc edit ActiveMQArtemis <CR instance name> -n <namespace>
OpenShift Container Platform 웹 콘솔 사용:
- 브로커 배포를 위해 프로젝트에 CR을 배포할 수 있는 권한이 있는 사용자로 OpenShift Container Platform에 로그인합니다.
-
왼쪽 창에서
를 클릭합니다. - ActiveMQArtemis CRD를 클릭합니다.
- Instances 탭을 클릭합니다.
- 브로커 배포의 인스턴스를 클릭합니다.
YAML 탭을 클릭합니다.
콘솔에서 YAML 편집기가 열리고 CR 인스턴스를 편집할 수 있습니다.
CR의
deploymentPlan
섹션에서messageMigration
속성을 추가하고true
로 설정합니다. 아직 구성되지 않은 경우persistenceEnabled
특성을 추가하고true
로 설정합니다. 예를 들면 다음과 같습니다.spec: deploymentPlan: messageMigration: true persistenceEnabled: true ...
이러한 설정은 나중에 클러스터형 브로커 배포 크기를 축소할 때 Operator는 축소 컨트롤러를 자동으로 시작하고 계속 실행 중인 브로커 Pod로 메시지를 마이그레이션합니다.
- CR을 저장합니다.
(선택 사항) 클러스터를 축소하고 메시지 마이그레이션 프로세스를 보려면 다음 단계를 완료합니다.
기존 브로커 배포에서 실행 중인 Pod를 확인합니다.
$ oc get pods
다음과 같은 출력이 표시됩니다.
activemq-artemis-operator-8566d9bf58-9g25l 1/1 Running 0 3m38s ex-aao-ss-0 1/1 Running 0 112s ex-aao-ss-1 1/1 Running 0 8s
앞의 출력에서는 3개의 Pod가 실행 중임을 보여줍니다. 하나는 브로커 Operator 자체와 배포의 각 브로커에 대해 별도의 Pod입니다.
각 포드에 로그인하여 일부 메시지를 각 브로커에 보냅니다.
해당 Pod
ex-aao-ss-0
에 클러스터 IP 주소가172.17.0.6
이고 다음 명령을 실행합니다.$ /opt/amq/bin/artemis producer --url tcp://172.17.0.6:61616 --user admin --password admin
해당 Pod
ex-aao-ss-1
에 클러스터 IP 주소가172.17.0.7
이고 다음 명령을 실행합니다.$ /opt/amq/bin/artemis producer --url tcp://172.17.0.7:61616 --user admin --password admin
이전 명령은 각 브로커에
TEST
라는 큐를 생성하고 각 큐에 1000개의 메시지를 추가합니다.클러스터를 두 브로커에서 1개로 축소합니다.
-
주요 브로커 CR,
broker_activemqartemis_cr.yaml
을 엽니다. -
CR에서
deploymentPlan.size
를1
로 설정합니다. 명령줄에서 변경 사항을 적용합니다.
$ oc apply -f deploy/crs/broker_activemqartemis_cr.yaml
ex-aao-s-1
Pod가 종료되기 시작하는 것을 확인할 수 있습니다. scaledown 컨트롤러는 동일한 이름의 새 드레인러 Pod를 시작합니다. 이 드레이너 Pod는 브로커 포드ex-aao-ss-1
의 모든 메시지를 클러스터의 다른 브로커 Pod인ex-aao-s-0
으로 마이그레이션한 후에도 종료됩니다.
-
주요 브로커 CR,
-
drainer Pod가 종료되면 브로커 Pod
ex-aao-ss-0
의TEST
대기열에서 메시지 수를 확인합니다. 대기열의 메시지 수가 2000개이며, 드레이너 Pod가 종료된 브로커 Pod에서 1000개의 메시지를 마이그레이션했음을 나타냅니다.