Sun Java System Application Server Enterprise Edition 8.1 2005Q2 고가용성 관리 설명서

9장 Java Message Service 로드 균형 조정 및 페일오버

이 장에서는 Application Server에서 사용할 수 있도록 JMS(Java Message Service)의 로드 균형 조정 및 페일오버를 구성하는 방법을 설명합니다. 다음 항목으로 구성됩니다.

Java Message Service 개요

Java Message Service(JMS) API는 J2EE 응용 프로그램 및 구성 요소가 메시지를 작성하고, 보내고, 받고, 읽을 수 있도록 하는 메시징 표준입니다. 또한 느슨하게 결합되고 안정적인 비동기식 분산 통신을 가능하게 합니다. JMS를 구현하는 Sun Java System Message Queue 3 2005Q1(MQ)은 Application Server와 견고하게 통합되어 Message-Driven Bean(MDB)과 같은 구성 요소를 만들 수 있도록 합니다.

MQ는 J2EE Connector Architecture Specification 1.5에 의해 정의된 자원 어댑터라고도 하는 커넥터 모듈을 사용하여 Application Server와 통합됩니다. Application Server로 배포된 J2EE 구성 요소는 커넥터 모듈을 통해 통합된 JMS 공급자를 사용하여 JMS 메시지를 교환합니다. Application Server에서 JMS 자원을 만들면 백그라운드에서 커넥터 자원이 만들어집니다. 따라서 각 JMS 작업은 커넥터 런타임을 호출하며 백그라운드에서 MQ 자원 어댑터를 사용합니다.

관리 콘솔이나 asadmin 명령줄 유틸리티를 사용하여 Java Message Service를 관리할 수 있습니다.

샘플 응용 프로그램

mqfailover 샘플 응용 프로그램은 JMS 항목에서 들어오는 메시지를 받는 Message Driven Bean이 있는 MQ 페일오버를 보여 줍니다. 이 샘플에는 MDB와 응용 프로그램 클라이언트가 포함되어 있습니다. Application Server는 MDB의 가용성을 높입니다. 한 브로커가 다운되면 대화 상태(MDB에 수신된 메시지)가 클러스터의 다른 가용 브로커 인스턴스로 투명하게 마이그레이션됩니다.

이 샘플은 다음 위치에 설치됩니다.

install_dir/samples/ee-samples/failover/apps/mqfailover

추가 정보

JMS에 대한 자세한 내용은 Sun Java System Application Server Enterprise Edition 8.1 2005Q2 Developer’s Guide의 14 장, Using the Java Message Service를 참조하십시오. 커넥터(자원 어댑터)에 대한 자세한 내용은 Sun Java System Application Server Enterprise Edition 8.1 2005Q2 Developer’s Guide의 9 장, Developing Connectors를 참조하십시오.

Sun Java System Message Queue에 대한 자세한 내용은 Sun Java System Message Queue 설명서를 참조하십시오. JMS API에 대한 일반 정보는 JMS 웹 페이지를 참조하십시오.

Java Message Service 구성

Java Message Service 구성은 Sun Java System Application Server 클러스터 또는 인스턴스에 대한 모든 인바운드 및 아웃바운드 연결에서 사용할 수 있습니다. 다음에서 Java Message Service를 구성할 수 있습니다.

JMS 연결 팩토리 설정을 사용하여 Java Message Service 구성을 대체할 수 있습니다. 자세한 내용은 Sun Java System Application Server Enterprise Edition 8.1 2005Q2 관리 설명서JMS 연결 팩토리의 관리 콘솔 작업을 참조하십시오.


주 –

Java Message Service의 구성을 변경한 후에 Application Server 인스턴스를 다시 시작해야 합니다.


JMS 관리에 대한 자세한 내용은 Sun Java System Application Server Enterprise Edition 8.1 2005Q2 관리 설명서의 4 장, JMS(Java Message Service) 자원 구성을 참조하십시오.

Java Message Service 통합

MQ는 관리 콘솔의 Java Message Service Type 속성에 표시되는 LOCAL 및 REMOTE의 두 가지 방법으로 Application Server에통합할 수 있습니다.

LOCAL Java Message Service

Type 속성이 LOCAL(독립 실행형 Application Server 인스턴스의 기본값)이면 Application Server는 기본 JMS 호스트로 지정된 MQ 브로커를 시작했다가 중지합니다. 독립 실행형 Application Server 인스턴스에는 LOCAL 유형이 가장 적절합니다.

Application Server 인스턴스와 Message Queue 브로커 사이에 일대일 관계를 만들려면 이 유형을 LOCAL로 설정하고 각 Application Server 인스턴스에 다른 기본 JMS 호스트를 부여합니다. 클러스터가 Application Server에 정의되는지 또는 MQ에 정의되는지에 관계없이 이 작업을 수행할 수 있습니다.

LOCAL 유형을 사용할 경우 Start Arguments 속성을 사용하여 MQ 브로커 시작 매개 변수를 지정합니다.

REMOTE Java Message Service

Type 속성이 REMOTE이면 MQ 브로커를 따로 시작해야 합니다. 이 값은 클러스터가 Application Server에 정의된 경우 기본값입니다. 브로커 시작에 대한 자세한 내용은 Sun Java System Message Queue Administration Guide를 참조하십시오.

이 경우 Application Server에서는 외부에 구성된 브로커나 브로커 클러스터를 사용합니다. 또한 Application Server와는 별도로 MQ 브로커를 시작 및 중지해야 하며 MQ 도구를 사용하여 브로커 또는 브로커 클러스터를 구성하고 조정해야 합니다. REMOTE 유형은 Application Server 클러스터에 가장 적절합니다.

REMOTE 유형을 사용할 경우 MQ 도구를 사용하여 MQ 브로커 시작 매개 변수를 지정해야 합니다. Start Arguments 속성은 무시됩니다.

JMS 호스트 목록

JMS 호스트는 MQ 브로커를 나타냅니다. Java Message Service에는 Application Server가 사용하는 모든 JMS 호스트가 들어 있는 JMS 호스트 목록(AddressList라고도 함)이 포함되어 있습니다.

JMS 호스트 목록은 지정된 MQ 브로커의 호스트 및 포트로 채워지며 JMS 호스트 구성이 변경될 때마다 업데이트됩니다. JMS 자원을 만들거나 MDB를 배포하면 해당 항목에 JMS 호스트 목록이 상속됩니다.


주 –

Sun Java System Message Queue 소프트웨어에서 AddressList 등록 정보는 imqAddressList로 지정됩니다.


기본 JMS 호스트

JMS 호스트 목록의 호스트 중 하나가 Default_JMS_host라는 기본 JMS 호스트로 지정됩니다. Java Message Service 유형이 LOCAL로 구성되면 Application Server 인스턴스가 기본 JMS 호스트를 시작합니다.

Sun Java System Message Queue 소프트웨어에서 다중 브로커 클러스터를 만든 경우 기본 JMS 호스트를 삭제하고 Message Queue 클러스터의 브로커를 JMS 호스트로 추가합니다. 이 경우 기본 JMS 호스트는 JMS 호스트 목록의 첫 번째 호스트가 됩니다.

Application Server는 Message Queue 클러스터를 사용할 때 기본 JMS 호스트에서 Message Queue 특정 명령을 실행합니다. 예를 들어, 세 개의 브로커로 구성된 Message Queue 클러스터에 대해 하나의 물리적 대상이 만들어질 때 물리적 대상을 만드는 명령은 기본 JMS 호스트에서 실행되지만 클러스터의 세 브로커 모두에서 해당 물리적 대상이 사용됩니다.

JMS 호스트 만들기

다음 방법으로 추가 JMS 호스트를 만들 수 있습니다.

연결 풀링 및 페일오버

Application Server는 JMS 연결 풀링 및 페일오버를 지원합니다. Sun Java System Application Server는 JMS 연결을 자동으로 풀링합니다. 주소 목록 동작 속성이 random(기본값)이면 Application Server는 JMS 호스트 목록에서 무작위로 기본 브로커를 선택합니다. 페일오버가 발생하면 MQ는 로드를 투명하게 다른 브로커로 전송하고 JMS 의미를 유지 관리합니다.

To specify whether the Application Server가 연결이 끊어졌을 때 기본 브로커에 다시 연결하려고 시도할지 여부를 지정하려면 다시 연결 확인란을 선택합니다. 이 옵션을 선택한 상태에서 기본 브로커가 다운되면 Application Server는 JMS 호스트 목록의 다른 브로커로 다시 연결하려고 시도합니다.

다시 연결을 선택한 경우 다음 속성도 지정하십시오.

JMS 연결 팩토리 설정을 사용하여 이러한 설정을 대체할 수 있습니다. 자세한 내용은 Sun Java System Application Server Enterprise Edition 8.1 2005Q2 관리 설명서JMS 연결 팩토리의 관리 콘솔 작업을 참조하십시오.

로드 균형이 조정된 메시지 흐름

Application Server에서는 동일한 ClientID를 갖는 MDB에 무작위로 메시지를 전달합니다. 영구 가입자에게는 ClientID가 필요합니다.

ClientID가 구성되지 않은 비영구 가입자의 경우 동일한 항목에 가입된 특정 MDB의 모든 인스턴스가 동일한 것으로 간주됩니다. MDB가 Application Server의 여러 인스턴스에 배포되면 MDB 중 하나만 메시지를 받습니다. 여러 고유 MDB가 동일한 항목에 가입하면 각 MDB의 한 인스턴스가 메시지 복사본을 받습니다.

동일한 대기열을 사용하는 여러 사용자를 지원하려면 물리적 대상의 maxNumActiveConsumers 등록 정보를 큰 값으로 설정하십시오. 이 등록 정보를 설정하면 MQ는 지정된 최대 수의 MDB가 동일한 대기열의 메시지를 사용할 수 있도록 허용합니다. 메시지는 MDB에 무작위로 배달됩니다. maxNumActiveConsumers-1로 설정되면 사용자 수에 제한이 없습니다.

Application Server에서 MQ 클러스터 사용

MQ Enterprise Edition은 브로커 클러스터로 알려져 있는 상호 연결된 여러 브로커 인스턴스를 지원합니다. 브로커 클러스터를 사용하면 클라이언트 연결이 클러스터에 있는 모든 브로커 간에 분산됩니다. 클러스터링은 수평적 확장을 제공하며 가용성을 향상시킵니다.

이 절에서는 고가용성 Sun Java System Message Queue 클러스터를 사용하도록 Application Server를 구성하는 방법을 설명합니다. 또한 Message Queue 클러스터를 시작하고 구성하는 방법을 설명합니다.

Application Server 토폴로지 및 MQ 배포에 대한 자세한 내용은 Sun Java System Application Server Enterprise Edition 8.1 2005Q2 Deployment Planning GuidePlanning Message Queue Broker Deployment를 참조하십시오.

ProcedureApplication Server 클러스터가 있는 MQ 클러스터 활성화

  1. Application Server 클러스터가 아직 없으면 만듭니다.

    클러스터를 만드는 방법에 대한 자세한 내용은 클러스터 만들기를 참조하십시오.

  2. MQ 브로커 클러스터를 만듭니다.

    먼저 도메인 관리 서버에 의해 시작된 브로커를 참조하는 기본 JMS 호스트를 삭제한 후 MQ 브로커 클러스터에 포함될 세 개의 외부 브로커(JMS 호스트)를 만듭니다.

    관리 콘솔이나 asadmin 명령줄 유틸리티에서 JMS 호스트를 만듭니다.

    asadmin을 사용하려면 다음과 같이 명령을 지정합니다.


    asadmin delete-jms-host --target cluster1 default_JMS_host
    asadmin create-jms-host --target cluster1
         --mqhost myhost1 --mqport 6769
         --mquser admin --mqpassword admin broker1
    asadmin create-jms-host --target cluster1
         --mqhost myhost2 --mqport 6770
         --mquser admin --mqpassword admin broker2
    asadmin create-jms-host --target cluster1
         --mqhost myhost3 --mqport 6771
         --mquser admin --mqpassword admin broker3

    관리 콘솔을 사용하여 호스트 만들기

    1. JMS 호스트 노드(구성 > config-name > Java Message Service > JMS 호스트)로 이동합니다.

    2. 기본 브로커(default_JMS_host)를 삭제합니다.

      해당 브로커 옆의 확인란을 선택한 후 삭제를 누릅니다.

    3. 새로 만들기를 눌러 각 JMS 호스트를 만들고 해당 등록 정보 값을 입력합니다.

      호스트 이름, DNS 이름 또는 IP 주소, 포트 번호, 관리 사용자 이름 및 암호 값을 채웁니다.

  3. 마스터 MQ 브로커 및 기타 MQ 브로커를 시작합니다.

    JMS 호스트 시스템에서 세 개의 외부 브로커를 시작하고 임의의 시스템에서 하나의 마스터 브로커를 시작합니다. 이 마스터 브로커는 브로커 클러스터에 속할 필요가 없습니다. 예를 들면 다음과 같습니다.


    /usr/bin/imqbrokerd -tty -name brokerm -port 6772
     -cluster myhost1:6769,myhost2:6770,myhost2:6772,myhost3:6771
     -D"imq.cluster.masterbroker=myhost2:6772"
  4. 클러스터의 Application Server 인스턴스를 시작합니다.

  5. 클러스터에 JMS 자원을 만듭니다.

    1. JMS 물리적 대상을 만듭니다.

      예를 들어, asadmin을 사용하려면 다음과 같이 지정합니다.


      asadmin create-jmsdest --desttype queue --target cluster1 MyQueue
      asadmin create-jmsdest --desttype queue --target cluster1 MyQueue1

      관리 콘솔을 사용하려면

      1. JMS 호스트 페이지(구성 > config-name > Java Message Service > 물리적 대상)로 이동합니다.

      2. 새로 만들기를 눌러 각 JMS 물리적 대상을 만듭니다.

      3. 각 대상에 대해 이름 및 유형(queue)을 입력합니다.

    2. JMS 연결 팩토리를 만듭니다.

      예를 들어, asadmin을 사용하려면 다음과 같이 지정합니다.


      asadmin create-jms-resource --target cluster1
      --restype javax.jms.QueueConnectionFactory jms/MyQcf
      asadmin create-jms-resource --target cluster1
      --restype javax.jms.QueueConnectionFactory jms/MyQcf1

      관리 콘솔을 사용하려면

      1. JMS 연결 팩토리 페이지(자원 > JMS 자원 > 연결 팩토리)로 이동합니다.

      2. 각 연결 팩토리를 만들려면 새로 만들기를 누릅니다.

        JMS 연결 팩토리 만들기 페이지가 열립니다.

      3. 각 연결 팩토리에 대해 JNDI 이름(예: jms/MyQcf ) 및 유형 javax.jms.QueueConnectionFactory를 입력합니다.

      4. 페이지 맨 아래에 나오는 사용 가능한 대상 목록에서 클러스터를 선택하고 추가를 누릅니다.

      5. 확인을 눌러 연결 팩토리를 만듭니다.

    3. JMS 대상 자원을 만듭니다.

      예를 들어, asadmin을 사용하려면 다음과 같이 지정합니다.


      asadmin create-jms-resource --target cluster1
           --restype javax.jms.Queue
           --property imqDestinationName=MyQueue jms/MyQueue
      asadmin create-jms-resource --target cluster1
           --restype javax.jms.Queue
           --property imqDestinationName=MyQueue1 jms/MyQueue1

      관리 콘솔을 사용하려면

      1. JMS 대상 자원 페이지(자원 > JMS 자원 > 연결 팩토리)로 이동합니다.

      2. 각 대상 자원을 만들려면 새로 만들기를 누릅니다.

        JMS 대상 자원 만들기 페이지가 열립니다.

      3. 각 대상 자원에 대해 JNDI 이름(예: jms/MyQueue) 및 유형 javax.jms.Queue를 입력합니다.

      4. 페이지 맨 아래에 나오는 사용 가능한 대상 목록에서 클러스터를 선택하고 추가를 누릅니다.

      5. 확인을 눌러 대상 자원을 만듭니다.

  6. 응용 프로그램 클라이언트에 대해 – retrieve 옵션을 지정하여 응용 프로그램을 배포합니다. 예를 들면 다음과 같습니다.


    asadmin deploy --target cluster1 
    --retrieve /opt/work/MQapp/mdb-simple3.ear
  7. 응용 프로그램에 액세스한 후 예상대로 동작하는지 테스트합니다.

  8. Application Server를 기본 JMS 구성으로 되돌리려면 만든 JMS 호스트를 삭제하고 기본 JMS 호스트를 다시 만듭니다. 예를 들면 다음과 같습니다.


    asadmin delete-jms-host --target cluster1 broker1
    asadmin delete-jms-host --target cluster1 broker2
    asadmin delete-jms-host --target cluster1 broker3
    asadmin create-jms-host --target cluster1
     --mqhost myhost1 --mqport 7676
     --mquser admin --mqpassword admin
     default_JMS_host

    관리 콘솔에서도 동일한 작업을 수행할 수 있습니다.

일반 오류

문제가 발생하면 다음을 참조하십시오.