Message Queue는 브로커 클러스터, 즉 함께 작업하면서 클라이언트에 메시지 전달 서비스를 제공하는 브로커의 그룹을 사용하도록 지원합니다. 클러스터를 사용하여 관리자는 다중 브로커 간에 클라이언트 연결을 분산하는 방식으로 메시지 트래픽의 볼륨에 대한 메시징 작업 크기를 조절할 수 있습니다.
이 장에서는 그러한 브로커 클러스터의 구조와 내부 기능에 대해 설명합니다. 이 장은 다음 내용으로 구성되어 있습니다.
브로커 클러스터는 데이터 가용성이 아닌 서비스 가용성을 제공합니다. 클러스터에 있는 브로커에서 장애가 발생하면 해당 브로커에 연결된 클라이언트는 클러스터에 있는 다른 브로커에 다시 연결할 수 있지만, 대체 브로커에 다시 연결될 때 일부 데이터가 손실될 수 있습니다.
그림 4–1에서는 Message Queue의 브로커 클러스터 구조를 보여 줍니다. 클러스터의 각 브로커는 나머지 모든 브로커와 직접 연결되어 있습니다. 각 클라이언트(메시지 제작자 또는 소비자)에는 직접 통신하는 단일 홈 브로커가 있어 클러스터에 해당 브로커만 있는 것처럼 메시지를 송수신합니다. 배후에서 홈 브로커는 연결된 모든 클라이언트에 전달 서비스를 제공하기 위해 다른 브로커와 함께 작업합니다.
클러스터에서 서비스 가용성은 브로커가 대상 및 영구 가입자에 대한 정보를 공유할 수 있는지 여부에 따라 달라집니다. 클러스터된 브로커에서 장애가 발생하면 이러한 상태 정보는 동기화되지 않을 수 있습니다. 클러스터 내에서 하나의 브로커를 마스터 브로커로 지정하면 이러한 가능성을 방지할 수 있습니다. 마스터 브로커는 클러스터의 지속성 항목(대상 및 영구 가입)에 대한 변경 사항을 추적하는 구성 변경 기록을 유지 관리합니다. 이 기록은 변경 사항이 생길 때 오프라인 상태였던 브로커에게 이러한 변경 정보를 전파하는 데 사용됩니다.
다음 절에서는 하나 이상의 브로커가 오프라인이었던 경우라도 클러스터 내에서 메시지 전달이 이루어지는 방식 및 브로커의 구성 및 동기화 방식에 대해 설명합니다.
클러스터 구성에서 브로커는 대상 및 메시지 소비자에 대한 정보를 공유합니다. 각 브로커는 다음 정보에 대해서도 알고 있습니다.
클러스터에 있는 모든 물리적 대상의 이름, 유형 및 속성
각 메시지 소비자의 이름, 위치 및 관심
위의 정보에 대한 업데이트(삭제, 추가 또는 재구성)
이러한 정보를 가지고 각 브로커는 자신과 직접 연결된 메시지 제작자로부터 원격 메시지 소비자에게 메시지를 라우팅할 수 있습니다. 제작자의 홈 브로커는 소비자의 홈 브로커와는 다른 기능을 합니다.
제작자의 홈 브로커는 해당 제작자가 제작한 메시지의 지속적인 처리 및 라우팅, 로깅, 트랜잭션 관리와 소비자 클라이언트로부터의 확인 처리를 담당합니다.
소비자의 홈 브로커는 소비자 정보의 지속적인 처리를 담당하고 소비자에게 메시지를 전달할 뿐 아니라 여전히 소비자가 사용 가능한지 그리고 메시지가 성공적으로 소비되었는지 여부를 제작자의 브로커에게 알립니다.
클러스터된 브로커는 클러스터 내의 메시지 트래픽을 최소화하기 위해 함께 작동합니다. 예를 들어 원격 브로커에 같은 주제 대상에 대해 두 개의 동일한 가입이 있으면 메시지는 회선을 통해 한 번만 전송됩니다. 로컬 소비자에 대한 전달이 원격 소비자에 대한 전달보다 높은 우선 순위를 갖도록 대상 등록 정보를 설정하여 트래픽을 더 줄일 수 있습니다.
클라이언트와 브로커 간에 암호화된 보안 메시지를 전달하는 경우 브로커 간의 메시지 전달을 보호하도록 클러스터를 구성할 수 있습니다.
클러스터된 브로커에 있는 물리적 대상에 대해 설정된 속성은 클러스터에 있는 해당 대상의 모든 인스턴스에 적용됩니다. 그러나 이러한 속성에서 지정한 제한 중 일부는 클러스터 전체에 적용되고, 나머지는 개별 대상 인스턴스에 적용됩니다. 표 4–1에서는 물리적 대상에 대해 설정 가능한 속성과 그 범위를 보여 줍니다.
표 4–1 클러스터된 브로커에 있는 물리적 대상의 등록 정보
등록 정보 이름 |
범위 |
---|---|
maxNumMsgs |
각 브로커즉, 클러스터 전체에 걸쳐 제작자를 배포하면 소비하지 않은 전체 메시지에 대한 제한이 증가하게 됩니다. |
maxTotalMsgBytes |
각 브로커즉, 클러스터 전체에 제작자를 배포하면 소비하지 않은 메시지용으로 예약된 전체 메모리에 대한 제한이 증가하게 됩니다. |
lmitBehavior |
전역 |
maxBytesPerMsg |
각 브로커 |
maxNumProducers |
각 브로커 |
maxNumActiveConsumers |
전역 |
maxNumBackupConsumers |
전역 |
consumerFlowLimit |
전역 |
localDeliveryPreferred |
전역 |
isLocalOnly |
전역 |
useDMQ |
각 브로커 |
대상이 관리자에 의해 작성되는지, 자동으로 작성되는지 아니면 임시 대상인지 여부에 따라 클러스터 내에서 대상이 전파되는 방식 그리고 연결 또는 브로커 오류 발생 시 대상이 처리되는 방식이 달라집니다. 다음 하위 절에서는 대상이 작성되는 시점과 그 복제 방법을 알 수 있는 몇 가지 사용 예에 대해 알아봅니다. 여기에는 다음이 포함됩니다.
아래 그림에서는 클라이언트가 대기열에 생성하고 회신 모델을 사용할 경우 대상이 어떻게 작성되고 복제되는지 보여 줍니다.
관리자는 물리적 대상인 QW를 만듭니다. 작성 시점에 클러스터 전체에 걸쳐 대기열이 복제됩니다.
제작자 ProdQW는 대기열 QW로 메시지를 보내고 임시 대기열 TempQ1W로 회신을 보내는 회신 모델을 사용합니다. (임시 대기열은 응용 프로그램에서 임시 대상을 만들고 소비자를 추가할 때 만들어지고 복제됩니다.)
홈 브로커 BrokerW는 QW에 전송된 메시지를 지속적으로 처리하고 이 메시지의 선택 기준을 충족하는 첫 번째 활성 소비자에게로 메시지 경로를 지정합니다. 메시지를 받을 준비가 된 소비자에 따라 메시지는 BrokerX에 있는 소비자 C1QW나 BrokerY에 있는 소비자 C2QW에게 전달됩니다. 메시지를 받은 소비자는 대상 TempQ1W로 회신을 보냅니다.
다음 그림에서는 제작자가 존재하지 않는 대상에게 메시지를 보내고 대상을 자동으로 작성해야 하는 경우에 대상이 어떻게 작성되고 복제되는지를 보여 줍니다.
제작자 ProdAutoQY는 브로커에 없는 대상인 AutoQY로 메시지를 보냅니다.
브로커는 지속적으로 메시지를 처리하고 대상 AutoQY를 만듭니다.
자동 생성된 대상이 클러스터 전체에 걸쳐 자동으로 복제되지는 않습니다. 소비자가 대기열 AutoQY로부터 메시지를 받도록 선택한 경우에만 소비자의 홈 브로커는 대상 AutoQY를 만들고 소비자에게 메시지를 전달합니다. 소비자가 자동 작성 대상을 만들 때 대상은 클러스터 전체로 복제됩니다. 이 예에서 소비자 CAutoQY가 대상을 작성할 때 복제가 이루어집니다.
다음 그림에서는 클라이언트가 관리자에 의해 작성된 주제 대상에 메시지를 게시할 때 클러스터에서 대상이 작성되고 복제되는 방법을 보여 줍니다.
관리자가 물리적 주제 대상인 TY를 만듭니다. 관리 작성 대상인 TY는 대상이 사용되기 전에 브로커 클러스터 전체로 복제됩니다.
게시자 PubTY는 주제 TY로 메시지를 보냅니다.
홈 브로커 BrokerY는 TY에 게시된 모든 메시지를 지속적으로 처리하고 이 메시지의 선택 기준에 일치하는 모든 주제 가입자에게로 메시지 경로를 지정합니다. 이 예에서 C1TY 및 C2TY는 주제 TY에 가입됩니다.
표 4–2에서는 클러스터에서 여러 종류의 대상이 복제되고 삭제되는 방법에 대해 설명합니다.
표 4–2 클러스터에서 대상 처리
시작 시 클러스터의 브로커 간에 연결을 설정하려면 각 브로커는 다른 모든 브로커(마스터 브로커 포함)에 대한 호스트 이름 및 포트 번호를 전달 받아야 합니다. 이 정보는 클러스터의 모든 브로커에 대해 동일해야 하는 일련의 클러스터 구성 등록 정보에 의해 지정됩니다. 각 브로커에 대해 개별적으로 구성 등록 정보를 지정할 수 있지만 이 방법은 오류가 발생하기 쉽고 클러스터 구성의 일관성이 손상될 수 있습니다. 대신, 시작 시 각 브로커가 참조하는 하나의 중앙 클러스터 구성 파일에 모든 구성 등록 정보를 두는 것이 좋습니다. 이렇게 하면 모든 브로커가 동일한 구성 정보를 공유하게 됩니다.
클러스터 구성 등록 정보에 대한 자세한 내용은 Sun Java System Message Queue 3.7 UR1 관리 설명서의 Cluster Configuration Properties를 참조하십시오.
원래 클러스터 구성 파일은 클러스터 구성 용도로 만들어졌지만 클러스터의 모든 브로커에서 공유하는 다른 등록 정보를 저장하기에도 편리한 장소입니다.
클러스터의 구성이 변경될 때마다 변경에 대한 정보가 클러스터의 모든 브로커로 자동 전파됩니다. 다음과 같은 경우에 클러스터 구성이 변경됩니다.
클러스터 브로커 중 하나에서 대상이 작성되거나 삭제된 경우
대상의 등록 정보가 변경된 경우
메시지 소비자가 해당 홈 브로커에 등록된 경우
메시지 소비자와 홈 브로커 사이의 연결이(명시적으로 또는 클라이언트, 브로커 또는 네트워크 오류로 인해) 끊기는 경우
메시지 소비자가 특정 주제에 대한 영구 가입을 설정하는 경우
이러한 구성 변경 정보는 변경 시 온라인 상태인 클러스터의 모든 브로커로 즉시 전파됩니다. 하지만 오프라인 상태의 브로커(예: 충돌한 브로커)는 변경이 발생할 때 변경에 대한 알림을 수신하지 않습니다. 오프라인 상태인 브로커를 수용하기 위해 Message Queue는 작성되거나 삭제된 모든 지속성 항목(대상 및 영구 가입)을 기록하여 클러스터에 대한 구성 변경 기록을 유지 관리합니다. 오프라인 상태인 브로커가 다시 온라인 상태로 되면(또는 새 브로커가 클러스터에 추가되는 경우) 해당 브로커는 대상 및 영구 가입자에 대한 정보를 이 기록에서 참조한 다음 다른 브로커와 현재 활성 메시지 소비자에 대한 정보를 교환합니다.
클러스터에서 마스터 브로커로 지정된 한 브로커가 구성 변경 기록의 유지 관리를 담당합니다. 다른 브로커는 마스터 브로커 없이는 초기화를 완료할 수 없으므로 클러스터 내에서 마스터 브로커가 항상 먼저 시작되어야 합니다. 마스터 브로커가 오프라인 상태로 되면 다른 브로커가 구성 변경 기록에 액세스할 수 없으므로 구성 정보를 클러스터 전체에 전파할 수 없습니다. 이 상태에서 대상이나 영구 가입을 작성, 재구성, 삭제하려는 경우 또는 영구 가입 재활성화와 같은 관련 작업을 시도할 경우 예외가 발생합니다. 하지만 비관리 메시지 전달은 계속해서 정상적으로 작동합니다. 마스터 브로커 및 구성 변경 기록의 사용은 선택 사항입니다. 마스터 브로커 및 구성 변경 기록은 클러스터 구성 변경 또는 브로커 오류 발생 후 클러스터 동기화를 고려하는 경우에만 필요합니다.