Sun Java System Application Server 9.1 고가용성 관리 설명서

11장 RMI-IIOP 로드 균형 조정 및 페일오버

이 장에서는 RMI-IIOP를 통해 원격 EJB 참조 및 JNDI 객체에 대해 Sun Java System Application Server의 고가용성 기능을 사용하는 방법을 설명합니다.

개요

RMI-IIOP 로드 균형 조정 기능을 사용하면 IIOP 클라이언트 요청이 여러 다른 서버 인스턴스나 이름 서버에 분산됩니다. 목표는 클러스터 내에서 로드를 균일하게 분산시켜 확장성을 제공하는 것입니다. IIOP 로드 균형 조정 기능과 EJB 클러스터링 및 가용성을 함께 사용하면 EJB 페일오버가 구현됩니다.

클라이언트가 객체에 대해 JNDI 조회를 수행하면 이름 지정 서비스는 특정 서버 인스턴스와 관련된 InitialContext(IC) 객체를 만듭니다. 그러면 해당 IC 객체를 사용하여 수행된 모든 조회 요청은 동일한 서버 인스턴스로 보내집니다. 해당 InitialContext를 사용하여 조회된 모든 EJBHome 객체는 동일한 대상 서버에 호스트됩니다. 이후에 가져온 모든 Bean 참조 또한 동일한 대상 호스트에서 만들어집니다. 이 경우 InitialContext 객체를 만들 때 모든 클라이언트가 활성 대상 서버 목록을 임의화하므로 로드 균형 조정이 효과적으로 구현될 수 있습니다. 대상 서버 인스턴스가 작동 중단되면 조회 또는 EJB 메소드 호출은 다른 서버 인스턴스로 페일오버됩니다.

IIOP 로드 균형 조정 및 페일오버는 투명하게 발생합니다. 응용 프로그램 배포 중에 특별한 단계가 필요하지는 않습니다. Application Server에 대한 IIOP 로드 균형 조정 및 페일오버는 동적으로 재구성되는 클러스터를 지원합니다. 응용 프로그램 클라이언트가 배포된 Application Server 인스턴스가 클러스터에 참여할 경우 Application Server가 자동으로 클러스터에서 현재 활성화된 모든 IIOP 종점을 찾습니다. 따라서 새 인스턴스가 클러스터에 추가되거나 클러스터에서 삭제되는 경우 종점 목록을 수동으로 업데이트할 필요가 없습니다. 하지만 종점 중 하나가 실패한 경우에 대비하여 부트스트랩 용도로 지정된 종점이 적어도 두 개 이상 클라이언트에 있어야 합니다.

요구 사항

Sun Java System Application Server에서는 다음이 모두 적용될 경우 RMI-IIOP를 통해 원격 EJB 참조 및 NameService 객체의 고가용성을 제공합니다.

Application Server는 ACC(Application Client Container)에서 실행되는 Java 응용 프로그램에 대한 로드 균형 조정을 지원합니다. RMI-IIOP 로드 균형 조정 및 페일오버 설정을 참조하십시오.


주 –

Application Server에서는 SSL(Secure Sockets Layer)을 통한 RMI-IIOP 로드 균형 조정 및 페일오버를 지원하지 않습니다.


알고리즘

Application Server에서는 RMI-IIOP 로드 균형 조정 및 페일오버에 대해 임의화 및 라운드 로빈 알고리즘을 사용합니다.

RMI-IIOP 클라이언트가 새로운 InitialContext 객체를 처음 만들면 해당 클라이언트에 대해 사용 가능한 Application Server IIOP 종점 목록이 임의화됩니다. InitialContext 객체의 경우 로드 밸런서는 조회 요청 및 다른 InitialContext 작업을 목록의 첫 번째 종점으로 지정합니다. 첫 번째 종점을 사용할 수 없는 경우 목록의 두 번째 종점을 사용하는 식으로 계속합니다.

클라이언트가 계속해서 새로운 InitialContext 객체를 만들 때마다 종점 목록이 회전하므로 InitialContext 작업에 대해 다른 IIOP 종점이 사용됩니다.

InitialContext 객체에서 얻은 참조에서 Bean을 구하거나 만들 경우 해당 Bean은 InitialContext 객체에 할당된 IIOP 종점 역할을 하는 Application Server 인스턴스에 만들어집니다. 해당 Bean에 대한 참조에는 클러스터에 있는 모든 Application Server 인스턴스의 IIOP 종점 주소가 포함됩니다.

기본 종점은 Bean을 조회하거나 만드는 데 사용된 InitialContext 종점에 해당하는 Bean 종점입니다. 클러스터의 다른 IIOP 종점은 대체 종점으로 지정됩니다. Bean의 기본 종점을 사용할 수 없게 되면 해당 Bean의 추가 요청이 대체 종점 중 하나로 페일오버됩니다.

RMI-IIOP 로드 균형 조정 및 페일오버가 ACC에서 실행 중인 응용 프로그램과 함께 작동하도록 구성할 수 있습니다.

RMI-IIOP 로드 균형 조정 및 페일오버 설정

ACC(Application Client Container)에서 실행 중인 응용 프로그램에 대해 RMI-IIOP 로드 균형 조정과 페일오버를 설정할 수 있습니다. 가중 라운드 로빈 로드 균형 조정도 지원됩니다.

ProcedureApplication Client Container에 대해 RMI-IIOP 로드 균형 조정 설정

이 절차에서는 ACC(Application Client Container)와 함께 RMI-IIOP 로드 균형 조정 및 페일오버를 사용하는 데 필요한 단계를 개략적으로 설명합니다. ACC에 대한 자세한 내용은 Sun Java System Application Server 9.1 Developer’s GuideDeveloping Clients Using the ACC를 참조하십시오.

  1. install_dir /bin 디렉토리로 이동합니다.

  2. package-appclient를 실행합니다.

    이 유틸리티는 appclient.jar 파일을 생성합니다. package-appclient에 대한 자세한 내용은 package-appclient(1M)를 참조하십시오.

  3. 클라이언트에서 압축을 풀 시스템으로 appclient.jar 파일을 복사합니다.

  4. 해당 시스템의 올바른 디렉토리 값을 참조하도록 asenv.conf 또는 asenv.bat 경로 변수를 편집합니다.

    파일은 appclient-install-dir /config/에 있습니다.

    업데이트할 경로 변수 목록을 보려면 package-appclient(1M)를 참조하십시오.

  5. 필요하면 appclient 스크립트를 실행 파일로 만듭니다.

    예를 들어, UNIX에서 chmod 700을 사용합니다.

  6. 클러스터에서 적어도 둘 이상의 인스턴스에 대한 IIOP 수신기 포트 번호를 찾습니다.

    단계 7에서 IIOP 수신기를 종점으로 지정합니다.

    다음과 같이 각 인스턴스의 IIOP 수신기 포트를 확인합니다.

    1. 관리 콘솔의 트리 구성 요소에서 클러스터 노드를 확장합니다.

    2. 클러스터를 확장합니다.

    3. 클러스터의 인스턴스를 선택합니다.

    4. 오른쪽 창에서 등록 정보 탭을 누릅니다.

    5. 인스턴스에 대한 IIOP 수신기 포트를 기록합니다.

  7. sun-acc.xml 파일에 target-server 요소를 최소한 두 개 이상 추가합니다.


    주 –

    개발자 프로필에서는 클러스터링 기능을 사용할 수 없습니다. 프로필에 대한 자세한 내용은 Sun Java System Application Server 9.1 관리 설명서사용 프로필을 참조하십시오.


    단계 6에서 확인한 종점을 사용합니다.

    응용 프로그램 클라이언트가 배포된 Application Server 인스턴스가 클러스터에 참여할 경우 ACC가 자동으로 클러스터에서 현재 활성화된 모든 IIOP 종점을 찾습니다. 하지만 클라이언트에는 종점 중 하나가 실패한 경우에 대비하여 부트스트랩 용도로 지정된 종점이 최소 두 개 이상 있어야 합니다.

    target-server 요소는 로드 균형 조정에 사용되는 한 개 이상의 IIOP 종점을 지정합니다. address 속성은 IPv4 주소 또는 호스트 이름이며 port 속성은 포트 번호를 지정합니다. Sun Java System Application Server 9.1 Application Deployment Guideclient-container를 참조하십시오.

    target-server 요소를 사용하지 않고 다음과 같이 endpoints 등록 정보를 사용하는 방법도 있습니다.


    jvmarg value = "-Dcom.sun.appserv.iiop.endpoints=host1:port1,host2:port2,..."
    
  8. 가중 라운드 로빈 로드 균형 조정이 필요한 경우 다음 단계를 수행합니다.

    1. 각 서버 인스턴스의 로드 균형 조정 가중치를 설정합니다.


      asadmin set instance-name.lb-weight=weight
      
    2. sun-acc.xml에서 ACC의 com.sun.appserv.iiop.loadbalancingpolicy 등록 정보를 ic-based-weighted로 설정합니다.

      …
      <client-container send-password="true">
        <property name="com.sun.appserv.iiop.loadbalancingpolicy" value="ic-based-weighed"/>
      …
  9. --retrieve 옵션을 통해 클라이언트 응용 프로그램을 배포하여 클라이언트 jar 파일을 가져옵니다.

    클라이언트 jar 파일을 클라이언트 시스템에 보관합니다.

    예를 들면 다음과 같습니다.


    asadmin deploy --user admin --passwordfile pw.txt --retrieve /my_dir myapp
    
  10. 다음과 같이 응용 프로그램 클라이언트를 실행합니다.

    appclient -client clientjar -name appname


예 11–1 RMI-IIOP 가중 라운드 로빈 로드 균형 조정을 위한 로드 균형 조정 가중치 설정

이 예에서 세 인스턴스로 구성된 클러스터의 로드 균형 조정 가중치는 다음 표와 같이 설정됩니다.

인스턴스 이름 

로드 균형 조정 가중치 

i1

100 

i2

200 

i3

300 

이러한 로드 균형 조정 가중치를 설정하는 명령 시퀀스는 다음과 같습니다.


asadmin set i1.lb-weight=100
asadmin set i2.lb-weight=200
asadmin set i3.lb-weight=300

다음 순서

페일오버를 테스트하려면 클러스터의 한 인스턴스를 중지하고 응용 프로그램이 제대로 작동하는지 확인합니다. 클라이언트 응용 프로그램에 중단점(또는 일시 정지)이 있을 수도 있습니다.

로드 균형 조정 기능을 테스트하려면 여러 클라이언트를 사용하고 모든 종점에 로드가 분산되는 방식을 확인하십시오.