본문 바로가기

WAS/Jboss

Jboss Cluster 설정


# 테스트 환경

  • OS : Oracle Linux Server release 8.6
  • JDK : 1.8
  • Jboss ver. : jboss-eap-7.4.0
  • Jboss Mode : standalone mode
  • Nginx ver. : 1.14.1

 

# Jboss EAP Clustering

WLS Cluster과 동일한 개념으로 특정 서버 상태에 서비스를 의존하지 않고 Cluster로 묶인 서버 그룹이 마치 하나의 서버에서 서비스를 제공하는 것으로 인식

 

사용 목적은 다음과 같음

  - 부하 분산 : 처리량을 늘리고 부하를 균등하게 분산

  - 고가용성 : Cluster 멤버에게 장애가 발생할 경우 다른 멤버가 그 역할을 대체 (failover 가능)

 

 

# 핵심 기술

1. JGroups

멀티캐스트 프로토콜을 사용하여 신뢰성 높은 통신을 제공할 수 있도록 구현된 네트워크 통신 라이브러리

ha, full-ha 프로파일에 jgroups 서브 시스템이 설정되어 있음

 

멀티캐스트를 사용하는 udp protocol 스택과 tcp를 사용하는 tcp protocol 스택이 정의되어 있고 default 값은 udp

(그 아래 하위 내용들은 대부분 기본값으로 사용하길 권장)

 

default 값인 udp에서 tcp로 사용 프로토콜을 변경하고 싶을 경우 channel의 stack="udp" 부분을 tcp로 변경

 

 

2. 멀티캐스트

특정 주소에 참여하는 모든 host에 동시에 같은 메시지를 전송하는 방식으로 패킷이 그룹 단위로 하나만 전송되기 때문에 네트워크 트래픽인 혼잡해지지 않음

 

반대로 유니캐스트의 경우 멤버 수만큼 여러 번 패킷을 전송해야 하기 때문에 트래픽 발생확률이 높아짐

 

3. UDP / TCP

UDP의 경우 멀티캐스트를 통한 통신을 하며 처리 속도가 빠르지만 메시지 송신 확인과 같은 중간 과정을 생력 하기 때문에 신뢰성이 낮음

 

TCP의 경우 UDP보다 처리 속도는 느리지만 신뢰성이 높고 네트워크 방화벽의 제한을 UDP보단 덜 받기 때문에 더 범용적으로 쓰임

Jboss Admin Console에서 확인 가능한 JGroups에 대한 정보

 

 

# tcp 통신을 통한 Cluster 환경 구성

기본이 udp 구성이기 때문에 tcp 환경으로 변경이 필요

 

1. Jboss Admin Console에서 변경

Jboss Admin Console - Configuration = Subsystems - JGroups - View - Channel - ee - Stack 부분을 udp에서 tcp로 변경

 

2. ha 파일에서 직접 변경

ha 파일에서 jgroups 태그 부분에서 channel의 stack을 udp에서 tcp로 변경

 

위와 같이 stack을 tcp로만 변경한다고 바로 해당 설정으로 동작하지 않음

 

tcp 스택으로 변경이 되었다 하더라도 tcp 스택에 클러스터 멤버를 찾기 위한 PING 프로토콜로 멀티캐스트를 사용하는 MPING을 사용하도록 설정이 되어 있기 때문

 

따라서 socket-protocol type를 MPING에서 TCPPING으로 변경한 후 initial_host에 직접 host의 ip와 port를 지정

 

3. application 설정

application 설정이 없으면 ha 파일에 Cluster 설정이 구성되어 있어도 세션이 복제되지 않기 때문에 실제 세션이 복제되기 위해서는 application에 세션을 복제하겠다는 설정이 필요

 

1. web.xml에 <distributable/> 추가

<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns="http://java.sun.com/xml/ns/j2ee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance
" xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd
" version="2.4">

<distributable/>

</web-app>

 

 

2. jboss-web.xml 생성

<jboss-web>
        <context-root>/</context-root>
</jboss-web>

 

# 테스트 및 확인

이중화 서버에 tcping 설정의 cluster 설정 후 log를 확인해 보게 되면 아래와 같은 로그 확인 가능

2024-08-13 10:33:33,863 INFO  [org.infinispan.CLUSTER] (thread-42,ejb,server1_2) ISPN000094: Received new cluster view for channel ejb: [server1_2|3] (2) [server1_2, server1_1]
2024-08-13 10:33:33,864 INFO  [org.infinispan.CLUSTER] (thread-42,ejb,server1_2) ISPN100000: Node server1_1 joined the cluster

 

WEB은 nginx를 통해 failover 테스트 진행

 

nginx.conf 에 jboss host의 ip와 http port를 작성하여 upstream 구성

 

sessionTest.jsp 페이지 호출

 

아래와 같이 2번 장비의 jboss에서 호출 넘버가 찍히는 걸 확인 가능

 

2번 장비의 jboss Shutdown 후 log 확인

 

2번 장비 Shutdown 후 세션이 1번 장비의 jboss로 이어지는지 확인

 

총 session이 끊기지 않고 이어지는 거 확인

 

 

# 참조 문헌

https://docs.openmaru.io/docs/jboss-eap/JBossEAP6_Clustering/

 

16장. JBoss EAP 클러스터링 | OPENMARU APM

자바기반의 웹 애플리케이션 서버를 사용한 대규모 웹 시스템이 많아지면서 24시간 365일 안정적인 서비스를 제공하면서도 앞으로의 확장성을 보장할 수 있도록 구성하는 것이 매우 중요하게 되

docs.openmaru.io

 

'WAS > Jboss' 카테고리의 다른 글

Jboss Deployment  (0) 2024.08.01
Jboss 설치  (0) 2024.07.31