'JBoss'에 해당되는 글 2건

  1. 2008/11/19 [JBOSS] JBOSS Multi Instance 구동 방법
  2. 2008/11/04 [JBOSS] JBOSS Clustering 설정
시스템에 WAS를 구동하다 보면은 다수의 인스턴스를 올리는 경우가 있다.

다수의 인스턴스를 올리는 이유는 여러가지가 있을 테지만 하나의 큰 메모리를 사용하는 JVM을 사용하는 WAS를 구동 시키는 것보다 1G내외로 2~3개의 JVM을 올리는 것이 효과적이라는 말이 있는데 그거는 사실 잘 모르겠다.

위의 경우 말고 다른 경우는 아마도 다수의 WAS를 구동해야 되나 하드웨어 지원이 넉넉치 않을때 Multi Instance로 구동 하는 경우가 있다.

JBOSS 에서 Multi Instance로 구동 하는 방법에는 크게 두가지가 있다.

한가지는 Binding IP를 이용해서 구동하는 방법, 다른 하나는 Port Binding을 이용해서 구동하는 방법이 있다.

  1. Binding IP를 이용해서 구동 하는 방법
    Binding IP를 이용하는 방법은 이외로 간단하다

    먼저 NIC에 alias를 이용해 Binding 할 IP를 설정을 한다.

    그런 다음 올릴 서버 프로파일을 설정한 뒤 run 스크립트에서 다음과 같이 입력하고 구동하면은 Binding IP를 이용한 방법은 손쉽게 끝나게 된다.

    run.sh -c {구동할 서버 프로파일} -b {Binding IP}
    이와 같이 하고 구동하면은 Binding IP를 이용한 멀티 인스턴스 사용이 가능하다.

  2. Binding Manager를 이용한 방법
    Binding Manager를 이용한 방법은 ${JBOSS_HOME}/jboss-as/server/${Server_Profile}/conf 에 보면은 jboss-service.xml 이라는 파일을 수정함으로써 Multi Instance로 구동 할 수 있다.

    jboss-service.xml에 보면은 아래와 같은 내용이 있다.
       <!-- ==================================================================== -->
       <!-- Service Binding                                                      -->
       <!-- ==================================================================== -->

       <!-- Automatically activated when generatting the clustering environment -->
       <!-- @TESTSUITE_CLUSTER_CONFIG@ -->

       <!--
          | Binding service manager for port/host mapping. This is a sample
          | config that demonstrates a JBoss instances with a server name 'ports-01'
          | loading its bindings from an XML file using the ServicesStoreFactory
          | implementation returned by the XMLServicesStoreFactory.
          |
          | ServerName: The unique name assigned to a JBoss server instance for
          | lookup purposes. This allows a single ServicesStore to handle mulitiple
          | JBoss servers.
          |
          | StoreURL: The URL string passed to org.jboss.services.binding.ServicesStore
          | during initialization that specifies how to connect to the bindings store.
          | StoreFactory: The org.jboss.services.binding.ServicesStoreFactory interface
          | implementation to create to obtain the ServicesStore instance.

       <mbean code="org.jboss.services.binding.ServiceBindingManager"
         name="jboss.system:service=ServiceBindingManager">
         <attribute name="ServerName">ports-01</attribute>
         <attribute name="StoreURL">${jboss.home.url}/docs/examples/binding-manager/sample-bindings.xml</attribute>
         <attribute name="StoreFactoryClassName">
           org.jboss.services.binding.XMLServicesStoreFactory
         </attribute>
       </mbean>
       -->

  3. 위와 같이 코멘트 처리가 되어 있는데 이 코멘트를 삭제 하고 사용하면은 된다.
    기본적인 port 관련은 정보 설정은 위에 보이는 파일에 보면은 3개 정도 정의가 되어 있다.
    3개를 초과해서 만드는 경우라면은 구성을 사용자가 잡아줘야 되는데 한 서버에 인스턴스 3개 이상 올리는 거는 그닥 좋다고 생각하지는 않는다.
저작자 표시 비영리 동일 조건 변경 허락
크리에이티브 커먼즈 라이선스
Creative Commons License
Posted by Rey
대부분의 시스템들이 그렇지만 시스템의 고가용성, 고성능을 내기 위해 Clustering 을 구성하는 경우가 대부분이다.
Cluster의 종류는 크게 HA(고가용성), HPC(고성능) 클러스터로 나뉘게 되는데 대부분의 클러스터는 고가용성 클러스터 들이다.(예 RedHat Cluster Suite)

WAS에서도 마찬가지 인데 WAS의 경우 HA 관점보다는 HPC 관점이 더 크지 않나 싶다.

WAS 클러스터의 경우 HA 클러스터 처럼 StandBy Server가 Active Server를 감시하고 있다가 Active Server가 장애가 발생하면은 StandBy Server가 Active 역활을 하는 클러스터가 아닌 Active, Active Cluster 이기 때문이다.

JBOSS 가 지원 하는 Clustering 항목은 아래와 같다.

  • 상태복제(State Replication)
    • HTTP Session / Stateful Session Bean / EJB3 Entity Bean 정보를 Cluster 타 Node로 복제
  • 부하분산(Load-balancing)
    • 웹의 경우 L4, Web Server Plug-in에서 부하를 분산
    • EJB의 경우 Client에게 다운로드 되는 EJB Stub이 부하를 분산
  • 자동장애복구(Failover)
    • 웹의 경우 L4, Web Server Plug-in에서 장애가 발생한 서버를 감지해 요청을 다른 정상적인 서버로 전달
    • EJB의 경우 Client에게 다운로드 되는 EJB Stub이 장애가 발생한 서버를 감지해 요청을 다른 정상적인 서버로 전단
JBOSS의 Clustering을 사용하기 위해서는 run.sh -c all -b Binding_IP 로 실행을 하면은 기본적으로 Clustering을 사용할 수 있다.

JBOSS Clustering을 구성하기 위해서는 다음의 항목을 참고 하면은 된다.

  • 클러스터 구성
    • 동일한 파티션명(Partition Name)과 파티션 구성(Partition Config)을 가진 Node들이 동적으로 하나의 Cluster를 구성
    • UDP Multicast 통신 또는 TCP로 통신
  • 관련 설정 파일
    • deploy/cluster-service.xml
    • deploy/jboss-web-cluster.sar/META-INF/jboss-service.xml
    • ejb3-clustered-sfsbcache-service.xml
    • ejb3-entity-cache-service.xml
  • 파티션명 설정
    • -g xxxx
    • -Djboss.partition.name=xxxx
  • UDP/IP Multicast
    • 멀티케스트 IP 설정
      • 멀티케스트 IP 대역에서 선택 : 224.0.0.1 ~ 239.255.255.254
      • -u x.x.x.x
      • -Djboss.partition.udpGroup=x.x.x.x
    • JBOSS 4.2에서는 Multicast Port도 설정 가능
      • -Djboss.hapartition.mcast_port=45566
      • -Djboss.webpartition.mcast_port=45577
      • -Djboss.ejb3sfsbpartition.mcast_port=45551
      • -Djboss.ejb3entitiypartition.mcast_port=43333
    • 멀티케스트 테스트
      • Node가 Cluster 정보 전달 및 구성이 안될 경우 각 Node간에 멀티케스트 테스트가 필요
      • java -classpath jgroups.jar org.jgroups.tests.McastReceiverTest -mcast_addr 228.1.2.3 -port 45566 : Receiver
      • java -classpath jgroups.jar org.jgroups.tests.McastSenderTest -mcast_addr 228.1.2.3 -port 45566 : Sender
      • jgroups.jar는 $JBOSS_HOME/server/all/lib 아래에 위치
      • 멀티케스트 테스트에 실패했을 때
        • 해당 NIC의 멀티케스트를 활성화
          • ifconfig eth0 MULTICAST
        • 해당 NIC로 멀티케스트 메시지가 가도록 라우팅
          • NIC가 여러 개일 경우
          • route add -net 224.0.0.0 netmask 224.0.0.0 dev eth0
        • OS에 방화벽이 설치되어 있는지 확인
        • Network Switch가 멀티케스트를 지원하는지 확인
      • 멀티케스트 테스트에 성공했는데 클러스터 동작이 안되는 경우
        • /etc/hosts에서 127.0.0.1에 호스트 설정이 되어 있는 경우
    • TCP
      • 기본적으로 멀티케스트를 사용한 Clustering만 지원
        • 해당 설정 파일에서 UDP를 포함한 Config를 코멘트 처리 후 TCP 코멘트 헤제
      • 기본 설정 항목
        • bind_addr : Cluster Node 간의 통신에 사용할 IP 설정
        • TCPPING initial_hosts : Cluster Node를 구성하는 Node 설정
    • 기본적으로 all Server Profile로 구동하면은 Cluster 기능이 활성화가 됨
      • 기존에 사용하던 Profile에서 Cluster 서비스를 추가하기 위해서는 다음의 라이브러리 및 서비스를 추가
        • 라이브러리
          • all/lib/jboss-cache.jar
          • all/lib/jgroups.jar
          • all/lib/jboss-jca.jar
        • 서비스
          • all/deploy/jbossjca-service.xml
          • all/deploy/jboss-web-cluster.sar
          • all/deploy/jboss-aop.deployer
          • all/deploy/jboss-web.deployer/META-INF/jboss-service.xml
위와 같은 내용을 참고하여 서비스를 구성하면은 된다.

만약에 한대의 서버에 여러 클러스터를 구성하기 위해서는 서비스 바인딩 관리자를 이용하여 멀티 인스턴스를 올리거나 혹은 아이피를 하나더 심어서 서비스 하는 방법이 있다.

만약에 서비스 바인딩 관리자를 이용하여 올리는 경우 run.sh 스크립트를 구동할때 -u 옵션으로 멀티케스트 IP를 지정해야 된다. 또한 -g 옵셥으로 파티션 네임을 설정해주는 것이 좋다.(멀티케스트의 경우 IP를 지정하지 않으면은 클러스터가 정상적으로 동작 안할 수도 있다)
저작자 표시 비영리 동일 조건 변경 허락
크리에이티브 커먼즈 라이선스
Creative Commons License
Posted by Rey