JBoss EAP 6 Clustering

이 문서는 JBoss EAP 6 Clustering 에 대해서 다룬다. Clustering 은 고가용성과 고확장성을 보장하는 수단으로 이 둘의 개념은 대략 다음과 같다.

  • 고확장성: 클러스터에 손쉽게 컴퓨터 자원을 추가할 수 있어야 한다.
  • 고가용성: 내부 서버의 오류를 숨기는 투명한 페일오버를 사용해야 한다.

보통 고확장성은 고가용성을 제한하는 법인데,  JBoss EAP 6 는 이두가지 기능을 모두 충족한다.

JBoss EAP 6 는 이전의 JBoss 시스템과는 다르다. 여러가지 기능적인 컴포넌트들는 서브시스템(Sub System)이라고 불리운다. Clustering 기능도 JBoss EAP 6 의 서브시스템이다.

Clustering Subsystem.

고가용성을 구현하기 가장 손쉬운 방법은 클러스터내 시스템이 가지고 있는 데이터를 모두 공유하는 것이다. 이를 위해서 특정 노드에서 데이터가 생성되면 이 데이터를 다른 노드와 공유하기위한 작업인 복제(Replication) 를 하게 된다. 데이터 복제를 통해서 특정 노드의 장애가 발생하더라도 다른 노드를 통해서 똑같은 데이터를 계속해서 접근할 수 있게 된다.

JBoss EAP 6 에서 데이터 복제를 위해서 Infinispan 시스템의 분산캐쉬 기능을 이용해 구현한다. JEE 스펙에 따르면 각각의 데이터들은 서로 다른 레이어에 저장되는데 이를 위해서 JBoss EAP 6 는 각 클러스터 노드간의 복제를 위한 미리 설정된 4개의 캐쉬 컨테이너를 가지고 있다.

  • web – HTTP 세션 복제
  • sfsb – stateful 세션 빈 복제
  • hibernate – JPA/Hibernate 두번째 레벨 엔터티 캐쉬
  • cluster – 클러스터에서 일반적인 목적의 객체 복제

JGroup.

데이터복제를 위해서 JBoss EAP 6 는 Infinispan 을 사용한다. 복제한 데이터를 전송하는데에는 Infinispan 의 JGroup 를 이용한다. JGroup 은 분산 노드로부터 가상의 그룹을 생성하도록 해준다. JGroup 은 새로운 노드를 추가, 명시적으로 노드를 제거하고 자동적으로 오류가 있는 노드들을 찾아내서 제거하는 기능을 제공한다.

JGroup 내의 클러스터 노드 사이의 통신을 위해서 UDP, TCP 를 사용한다. 이 둘의 사용에는 환경적인 요소를 고려해 선택하면 된다. UDP 는 멀티캐스트를 발생시켜 동작하고 TCP 는 멀티캐스트를 지원하지 않는 환경에 사용하면된다. (AWS 가 UDP 멀티캐스트를 지원하지 않는다. 따라서 TCP 를 사용하면 된다.)

standalone-ha.xml

JBoss EAP 6 에서는 JBoss 운영 환경에 맞게 Configuration 파일을 작성해 뒀다. 이 파일들은 필요로하는 핵심 기능들을 서브시스템에 포함시켜 놓은 것이여서 내용을 작성할 줄 안다면 얼마든지 커스터마이징 할 수 있다.

standalone-ha.xml 은 Clustering 을 위한 JGroup 서브시스템을 포함한 설정이 들어 있다. statndalone.xml 설정파일에서 Clustering 내용을 추가한 것이라 보면 맞다. 기본적으로 UDP 멀티캐스트 환경일 지원한다면 Clustering 을 위한 별도의 추가 설정을 할 필요가 없다.

Node name

Clustering 설정을 위해서는  Cluster 내에 노드(Node)를 구분할 이름을 정해줘야 한다. 이것은 커맨드라인에 인자로 다음과 같이 주면 된다.

 

HTTP SESSION REPLICATION

가장 많이 활용하는 것이 HTTP 의 SESSION 복제 이다. 위에서 설명한 서버 설정을 다 했다고 하더라도 Web.xml 에 다음과 같은 태그를 추가해 주어야 동작한다.

아무리 서버 설정을 Clustering 이 되도록 했다고 하더라도 위 사항을 추가하지 않으면 동작하지 않는다. 정상적으로 Clustering 되었을때에 로그는 다음과 같이 나온다.

내용을 보면 Protocol 이 UDP 로 나오고 Cluster Member 들도 인식이 잘 된다.

UDP 를 사용한 Cluster 는 별 설정할 필요가 없다. 그냥 standalone-ha.xml 을 사용하면 잘 된다.

TCP 를 이용한 Clustering

TCP를 이용한 Cluster, 좀 더 정확하게는 TCPPING 을 이용한 Cluster 는 UDP 멀티캐스트를 이용하지 못하는 AWS 클라우드와 같은 환경에 적합하다. 다만 이것을 사용하기 위한 설정에 조금의 수고가 필요하다.

여기서 주의해야할 사항이 하나 있는데, 사용할 TCPPING Port 는 자동으로 할당된다. 만약 PORT-OFFSET 설정을 100 으로 했다면 7700 으로 자동 할당 됨을 유의 해야 한다.

로그는 다음과 같이 나온다.

 

Post a comment

You may use the following HTML:
<a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code class="" title="" data-url=""> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong> <pre class="" title="" data-url=""> <span class="" title="" data-url="">