Sun Java System Message Queue 3.7 UR1 기술 개요

4장 브로커 클러스터

Message Queue는 브로커 클러스터, 즉 함께 작업하면서 클라이언트에 메시지 전달 서비스를 제공하는 브로커의 그룹을 사용하도록 지원합니다. 클러스터를 사용하여 관리자는 다중 브로커 간에 클라이언트 연결을 분산하는 방식으로 메시지 트래픽의 볼륨에 대한 메시징 작업 크기를 조절할 수 있습니다.

이 장에서는 그러한 브로커 클러스터의 구조와 내부 기능에 대해 설명합니다. 이 장은 다음 내용으로 구성되어 있습니다.

브로커 클러스터는 데이터 가용성이 아닌 서비스 가용성을 제공합니다. 클러스터에 있는 브로커에서 장애가 발생하면 해당 브로커에 연결된 클라이언트는 클러스터에 있는 다른 브로커에 다시 연결할 수 있지만, 대체 브로커에 다시 연결될 때 일부 데이터가 손실될 수 있습니다.

클러스터 구조

그림 4–1에서는 Message Queue의 브로커 클러스터 구조를 보여 줍니다. 클러스터의 각 브로커는 나머지 모든 브로커와 직접 연결되어 있습니다. 각 클라이언트(메시지 제작자 또는 소비자)에는 직접 통신하는 단일 홈 브로커가 있어 클러스터에 해당 브로커만 있는 것처럼 메시지를 송수신합니다. 배후에서 홈 브로커는 연결된 모든 클라이언트에 전달 서비스를 제공하기 위해 다른 브로커와 함께 작업합니다.

클러스터에서 서비스 가용성은 브로커가 대상 및 영구 가입자에 대한 정보를 공유할 수 있는지 여부에 따라 달라집니다. 클러스터된 브로커에서 장애가 발생하면 이러한 상태 정보는 동기화되지 않을 수 있습니다. 클러스터 내에서 하나의 브로커를 마스터 브로커로 지정하면 이러한 가능성을 방지할 수 있습니다. 마스터 브로커는 클러스터의 지속성 항목(대상 및 영구 가입)에 대한 변경 사항을 추적하는 구성 변경 기록을 유지 관리합니다. 이 기록은 변경 사항이 생길 때 오프라인 상태였던 브로커에게 이러한 변경 정보를 전파하는 데 사용됩니다.

그림 4–1 클러스터 구조

마스터 브로커를 비롯하여 클러스터된 브로커 3개를 보여 주는 다이어그램그림은 텍스트에 설명되어 있습니다.

다음 절에서는 하나 이상의 브로커가 오프라인이었던 경우라도 클러스터 내에서 메시지 전달이 이루어지는 방식 및 브로커의 구성 및 동기화 방식에 대해 설명합니다.

메시지 전달

클러스터 구성에서 브로커는 대상 및 메시지 소비자에 대한 정보를 공유합니다. 각 브로커는 다음 정보에 대해서도 알고 있습니다.

이러한 정보를 가지고 각 브로커는 자신과 직접 연결된 메시지 제작자로부터 원격 메시지 소비자에게 메시지를 라우팅할 수 있습니다. 제작자의 홈 브로커는 소비자의 홈 브로커와는 다른 기능을 합니다.

클러스터된 브로커는 클러스터 내의 메시지 트래픽을 최소화하기 위해 함께 작동합니다. 예를 들어 원격 브로커에 같은 주제 대상에 대해 두 개의 동일한 가입이 있으면 메시지는 회선을 통해 한 번만 전송됩니다. 로컬 소비자에 대한 전달이 원격 소비자에 대한 전달보다 높은 우선 순위를 갖도록 대상 등록 정보를 설정하여 트래픽을 더 줄일 수 있습니다.

클라이언트와 브로커 간에 암호화된 보안 메시지를 전달하는 경우 브로커 간의 메시지 전달을 보호하도록 클러스터를 구성할 수 있습니다.

대상 속성

클러스터된 브로커에 있는 물리적 대상에 대해 설정된 속성은 클러스터에 있는 해당 대상의 모든 인스턴스에 적용됩니다. 그러나 이러한 속성에서 지정한 제한 중 일부는 클러스터 전체에 적용되고, 나머지는 개별 대상 인스턴스에 적용됩니다. 표 4–1에서는 물리적 대상에 대해 설정 가능한 속성과 그 범위를 보여 줍니다.

표 4–1 클러스터된 브로커에 있는 물리적 대상의 등록 정보

등록 정보 이름 

범위 

maxNumMsgs

각 브로커즉, 클러스터 전체에 걸쳐 제작자를 배포하면 소비하지 않은 전체 메시지에 대한 제한이 증가하게 됩니다. 

maxTotalMsgBytes

각 브로커즉, 클러스터 전체에 제작자를 배포하면 소비하지 않은 메시지용으로 예약된 전체 메모리에 대한 제한이 증가하게 됩니다. 

lmitBehavior

전역 

maxBytesPerMsg

각 브로커 

maxNumProducers

각 브로커 

maxNumActiveConsumers

전역 

maxNumBackupConsumers

전역 

consumerFlowLimit

전역 

localDeliveryPreferred

전역 

isLocalOnly

전역 

useDMQ

각 브로커 

클러스터링 및 대상

대상이 관리자에 의해 작성되는지, 자동으로 작성되는지 아니면 임시 대상인지 여부에 따라 클러스터 내에서 대상이 전파되는 방식 그리고 연결 또는 브로커 오류 발생 시 대상이 처리되는 방식이 달라집니다. 다음 하위 절에서는 대상이 작성되는 시점과 그 복제 방법을 알 수 있는 몇 가지 사용 예에 대해 알아봅니다. 여기에는 다음이 포함됩니다.

회신 모델을 사용하여 대기열로 생성

아래 그림에서는 클라이언트가 대기열에 생성하고 회신 모델을 사용할 경우 대상이 어떻게 작성되고 복제되는지 보여 줍니다.

그림 4–2 클러스터에서의 대상 복제: 회신을 사용하는 대기열

클러스터에서 대상의 전파를 보여 주는 그림자세한 내용은 텍스트에 설명되어 있습니다.

  1. 관리자는 물리적 대상인 QW를 만듭니다. 작성 시점에 클러스터 전체에 걸쳐 대기열이 복제됩니다.

  2. 제작자 ProdQW는 대기열 QW로 메시지를 보내고 임시 대기열 TempQ1W로 회신을 보내는 회신 모델을 사용합니다. (임시 대기열은 응용 프로그램에서 임시 대상을 만들고 소비자를 추가할 때 만들어지고 복제됩니다.)

  3. 홈 브로커 BrokerWQW에 전송된 메시지를 지속적으로 처리하고 이 메시지의 선택 기준을 충족하는 첫 번째 활성 소비자에게로 메시지 경로를 지정합니다. 메시지를 받을 준비가 된 소비자에 따라 메시지는 BrokerX에 있는 소비자 C1QWBrokerY에 있는 소비자 C2QW에게 전달됩니다. 메시지를 받은 소비자는 대상 TempQ1W로 회신을 보냅니다.

자동 작성 대상에 생성

다음 그림에서는 제작자가 존재하지 않는 대상에게 메시지를 보내고 대상을 자동으로 작성해야 하는 경우에 대상이 어떻게 작성되고 복제되는지를 보여 줍니다.

그림 4–3 클러스터에서의 대상 복제: 자동 작성된 대상

클러스터에서 대상의 전파를 보여 주는 그림자세한 내용은 텍스트에 설명되어 있습니다.

  1. 제작자 ProdAutoQY는 브로커에 없는 대상인 AutoQY로 메시지를 보냅니다.

  2. 브로커는 지속적으로 메시지를 처리하고 대상 AutoQY를 만듭니다.

    자동 생성된 대상이 클러스터 전체에 걸쳐 자동으로 복제되지는 않습니다. 소비자가 대기열 AutoQY로부터 메시지를 받도록 선택한 경우에만 소비자의 홈 브로커는 대상 AutoQY를 만들고 소비자에게 메시지를 전달합니다. 소비자가 자동 작성 대상을 만들 때 대상은 클러스터 전체로 복제됩니다. 이 예에서 소비자 CAutoQY가 대상을 작성할 때 복제가 이루어집니다.

주제 대상에 생성

다음 그림에서는 클라이언트가 관리자에 의해 작성된 주제 대상에 메시지를 게시할 때 클러스터에서 대상이 작성되고 복제되는 방법을 보여 줍니다.

그림 4–4 클러스터에서의 대상 복제: 주제에 게시

클러스터에서 대상의 전파를 보여 주는 그림자세한 내용은 텍스트에 설명되어 있습니다.

  1. 관리자가 물리적 주제 대상인 TY를 만듭니다. 관리 작성 대상인 TY는 대상이 사용되기 전에 브로커 클러스터 전체로 복제됩니다.

  2. 게시자 PubTY는 주제 TY로 메시지를 보냅니다.

  3. 홈 브로커 BrokerYTY에 게시된 모든 메시지를 지속적으로 처리하고 이 메시지의 선택 기준에 일치하는 모든 주제 가입자에게로 메시지 경로를 지정합니다. 이 예에서 C1TYC2TY는 주제 TY에 가입됩니다.

연결 또는 브로커 오류 발생 시 대상 처리

표 4–2에서는 클러스터에서 여러 종류의 대상이 복제되고 삭제되는 방법에 대해 설명합니다.

표 4–2 클러스터에서 대상 처리

대상 

전파 및 삭제 

관리 작성 

대상이 만들어지면 클러스터 내에서 전파되고 각 브로커는 대상 정보를 지속적으로 저장합니다. 

관리자가 명시적으로 대상을 삭제하면 해당 대상은 삭제됩니다. 

마스터 브로커가 있으면 작성 및 삭제 기록이 마스터 브로커에 저장되어 클러스터 내의 브로커가 상태 정보를 동기화할 수 있습니다. 

임시 

대상이 만들어지면 클러스터 곳곳으로 전파됩니다. 

임시 대상과 관련된 소비자가 다시 연결되도록 허용되면 대상은 소비자의 홈 브로커에 지속적으로 저장됩니다. 그렇지 않은 경우 대상이 저장될 수 없습니다. 

소비자의 연결이 끊어지면 모든 브로커에서 대상이 삭제됩니다. 

소비자의 홈 브로커가 충돌하여 소비자가 다시 연결되도록 허용된 경우 이 소비자와 관련된 임시 대상이 모니터링됩니다. 소비자 클라이언트가 특정 시간 내에 다시 연결되지 않으면 클라이언트에서 오류가 발생한 것으로 가정하고 대상이 삭제됩니다. 

자동 작성 

제작자가 만들어졌으나 대상이 없는 경우 대상은 제작자의 홈 브로커에 만들어집니다. 

존재하지 않는 대상에 대해 소비자가 만들어지면 소비자 및 대상 정보는 클러스터 전체로 전파됩니다. 

자동 작성 대상은 관리자에 의해 명시적으로 삭제되거나 다음과 같은 경우 각 브로커에 의해 자동으로 삭제됩니다. 

  • 특정 시간 동안 소비자 또는 메시지가 없는 경우

  • 브로커를 다시 시작하거나 해당 대상에 대한 메시지가 없는 경우

클러스터 구성

시작 시 클러스터의 브로커 간에 연결을 설정하려면 각 브로커는 다른 모든 브로커(마스터 브로커 포함)에 대한 호스트 이름 및 포트 번호를 전달 받아야 합니다. 이 정보는 클러스터의 모든 브로커에 대해 동일해야 하는 일련의 클러스터 구성 등록 정보에 의해 지정됩니다. 각 브로커에 대해 개별적으로 구성 등록 정보를 지정할 수 있지만 이 방법은 오류가 발생하기 쉽고 클러스터 구성의 일관성이 손상될 수 있습니다. 대신, 시작 시 각 브로커가 참조하는 하나의 중앙 클러스터 구성 파일에 모든 구성 등록 정보를 두는 것이 좋습니다. 이렇게 하면 모든 브로커가 동일한 구성 정보를 공유하게 됩니다.

클러스터 구성 등록 정보에 대한 자세한 내용은 Sun Java System Message Queue 3.7 UR1 관리 설명서Cluster Configuration Properties를 참조하십시오.


주 –

원래 클러스터 구성 파일은 클러스터 구성 용도로 만들어졌지만 클러스터의 모든 브로커에서 공유하는 다른 등록 정보를 저장하기에도 편리한 장소입니다.


클러스터 동기화

클러스터의 구성이 변경될 때마다 변경에 대한 정보가 클러스터의 모든 브로커로 자동 전파됩니다. 다음과 같은 경우에 클러스터 구성이 변경됩니다.

이러한 구성 변경 정보는 변경 시 온라인 상태인 클러스터의 모든 브로커로 즉시 전파됩니다. 하지만 오프라인 상태의 브로커(예: 충돌한 브로커)는 변경이 발생할 때 변경에 대한 알림을 수신하지 않습니다. 오프라인 상태인 브로커를 수용하기 위해 Message Queue는 작성되거나 삭제된 모든 지속성 항목(대상 및 영구 가입)을 기록하여 클러스터에 대한 구성 변경 기록을 유지 관리합니다. 오프라인 상태인 브로커가 다시 온라인 상태로 되면(또는 새 브로커가 클러스터에 추가되는 경우) 해당 브로커는 대상 및 영구 가입자에 대한 정보를 이 기록에서 참조한 다음 다른 브로커와 현재 활성 메시지 소비자에 대한 정보를 교환합니다.

클러스터에서 마스터 브로커로 지정된 한 브로커가 구성 변경 기록의 유지 관리를 담당합니다. 다른 브로커는 마스터 브로커 없이는 초기화를 완료할 수 없으므로 클러스터 내에서 마스터 브로커가 항상 먼저 시작되어야 합니다. 마스터 브로커가 오프라인 상태로 되면 다른 브로커가 구성 변경 기록에 액세스할 수 없으므로 구성 정보를 클러스터 전체에 전파할 수 없습니다. 이 상태에서 대상이나 영구 가입을 작성, 재구성, 삭제하려는 경우 또는 영구 가입 재활성화와 같은 관련 작업을 시도할 경우 예외가 발생합니다. 하지만 비관리 메시지 전달은 계속해서 정상적으로 작동합니다. 마스터 브로커 및 구성 변경 기록의 사용은 선택 사항입니다. 마스터 브로커 및 구성 변경 기록은 클러스터 구성 변경 또는 브로커 오류 발생 후 클러스터 동기화를 고려하는 경우에만 필요합니다.