본문으로 건너뛰기

16.10 클러스터 그룹

JBoss EAP 6에서는 하나의 물리 네트워크 내에 여러 클러스터 그룹을 구성할 수 있다. 지금까지 설명은 기본적으로 네트워크 내에 있는 전체 서버 노드를 하나의 클러스터로 구성하는 것을 전제로 설명했다. 클러스터 그룹이란 같은 서비스를 제공하는 서버 노드들을 묶어서 네트워크 내에 여러 클러스터를 구축하는 방법이다. 웹 애플리케이션, EJB 애플리케이션, JMS 각각의 클러스터링에 대해 설명했지만, 클러스터 그룹에 대해서도 각각 애플리케이션 단위 또는 서버 노드 단위로 구성할 수 있다.

웹, EJB 애플리케이션의 클러스터링을 위해서는 Infinispan와 JGroups 컴포넌트를 이용한다. 한편, JMS에서는 HornetQ 자체가 클러스터링 기능을 가지고 있다. 이 때문에 클러스터 그룹의 설정 방법도 다르다. 그래서 웹, EJB와 JMS를 나누어 설명한다.

웹, EJB 컨테이너 클러스터 그룹​

웹, EJB 컨테이너는 클러스터링을 설정하는 서버 노드 간의 임의의 서버 노드에 대해서만 그룹을 구성할 수 있다. 다음 그림을 보면, 클러스터 그룹 A와 B를 구성하고 있다.

그림 14. 웹/EJB 컨테이너의 클러스터 그룹

웹, EJB클러스터 그룹 분할 방법​

웹, EJB 애플리케이션은 클러스터링을 설정하기 위한 도구로 Infinispan와 JGroups라는 컴포넌트를 사용하고 있다. 클러스터 그룹을 분할하려면 Infinispan 또는 JGroups의 설정을 변경하여야 한다.

클러스터 노드 간 통신에 사용하는 JGroups는 데이터 전송 프로토콜은 UDP 멀티캐스트나 TCP를 사용할 수 있다. 기본적으로 UDP 멀티캐스트를 사용하기 때문에 네트워크를 나누려면 멀티캐스트 주소를 변경하면 된다.

JBoss EAP 6의 시스템 프로퍼티 jboss.default.multicast.address 를 변경하여 논리적으로 네트워크를 분리할 수 있다. 멀티캐스트 주소 기본값은 230.0.0.4이다.

따라하기

  1. jboss.default.multicast.address 확인
  2. jboss.default.multicast.address를 시작 옵션으로 변경
  1. jboss.default.multicast.address 확인
[standalone@localhost:9999 /] cd /socket-binding-group=standard-sockets/socket-binding=jgroups-udp
[standalone@localhost:9999 socket-binding=jgroups-udp/] :read-resource
{
"outcome" => "success",
"result" => {
"client-mappings" => undefined,
"fixed-port" => false,
"interface" => undefined,
"multicast-address" => expression "${jboss.default.multicast.address:230. 0.0. 4}",
"multicast-port" => 45688,
"name" => "jgroups-udp",
"port" => 55200
"operation-requires-reload" => true,
"process-state" => "reload-required"
}
}
  1. jboss.default.multicast.address를 시작 옵션으로 변경

    -u 옵션이나 시스템 프로퍼티를 사용하여 변경할 수 있다.

    $ ./standalone.sh -u=230.10.0.5 -c=standalone-ha.xml

    $ ./standalone.sh -Djboss.default.multicast.address=230.10.0.5 -c=standalone-ha.xml

HornetQ 클러스터 그룹​

HornetQ에서는 클러스터링을 구성하는 노드 그룹을 구성하여 여러 클러스터 그룹을 구성할 수 있다. 클러스터링을 구성하는 목적지(Queue/Topic)도 주소 단위로 지정할 수 있고, 주소마다 다른 클러스터링 그룹을 지정할 수도 있다. 하나의 JMS 서버가 여러 클러스터 그룹에 동시에 참가할 수 있어 다양한 클러스터 토폴로지를 구성하는 것이 가능하다.

HornetQ는 클러스터 그룹 구성을 쉽게 할 수 있도록 멀티캐스트를 사용하고 있다.

JBoss EAP 6의 JMS 기능을 제공하는 full 프로파일 중에서 JMS 클러스터링을 사용하려면 full-ha 프로파일을 사용하여야 한다. 스탠드얼론 모드에서는 standalone-full-ha.xml 를 사용한다. full-ha 프로파일에 클러스터 그룹을 구성하기 위한 설정이 이미 정의되어 있다. 소켓 바인딩에 설정된 JMS가 사용하는 UDP 멀티캐스트 주소와 포트를 사용하여 클러스터 그룹을 구성한다.

항목설명기본 설정값
multicast-address소켓이 멀티캐스트의 트래픽을 송수신할 때 사용하는 멀티캐스트 주소.${jboss.messaging.group.address:231.7.7.7}
multicast-port소켓이 멀티캐스트 트래픽을 송수신할 때 사용하는 포트.${jboss.messaging.group.port:9876}

표 1. JMS에서 사용하는 소켓바인딩 설정

JBoss EAP 6를 시작하면 동일 네트워크 내에 있는 HornetQ 서버는 소켓 바인딩의 UDP 멀티캐스트 주소와 포트를 사용하여 자동으로 클러스터 그룹을 구성한다. 기본 설정으로도 클러스터링 기능을 사용할 수 있도록 충분히 설정되어 있다.

  • 클러스터 그룹 분할

    HornetQ의 클러스터 그룹 분할 방법도 웹 컨테이너와 마찬가지로 사용하는 논리적으로 네트워크를 나누어 클러스터 그룹을 나누는 방법은 그룹마다 멀티캐스트 주소와 포트를 변경하는 방법이다. JBoss EAP 6 시작 인수로 지정하여 간단하게 변경할 수 있다.

    서버시작 시 시스템 파라미터 jboss.messaging,group.address와 jboss.messaging.group.port를 사용하여 멀티캐스트 그룹을 분리한다. 보통 멀티캐스트 주소만 변경하여 관리한다.

$ ./standalone.sh -c=standalone-full-ha.xml -Djboss.messaging.group.address=231.7.7.8 -Djboss.messaging.group.port=9877