[JBoss EAP 7] 세션 공유를 위한 JGroups 멀티캐스트 프로토콜을 UDP -> TCP로 변경
본문 바로가기
IT 이야기/JBoss EAP

[JBoss EAP 7] 세션 공유를 위한 JGroups 멀티캐스트 프로토콜을 UDP -> TCP로 변경

by 찬찬이 아빠 2021. 6. 15.
반응형

JGroups는 멀티캐스트 프로토콜을 사용하여 신뢰성 높은 통신을 할 수 있도록 구현된 네트워크 통신 라이브러리입니다. JBoss EAP에서는 클러스터링 구현, Infinispan의 네트워크 캐시 구현, HornetQ의 클러스터링 구현 등에 JGroups가 사용됩니다.

 

JGroups의 멀티캐스트를 사용하는 프로토콜 스택에는 UDP와 TCP가 있습니다. 기본적으로 udp 프로토콜 스택을 사용합니다.

JBoss EAP 7을 사용하면서 만약 멀티캐스트 IP를 사용할 수 없거나 방화벽 정책에 의해 연결할 수 없어 TCP 프로토콜을 사용해야 할 경우 아래와 같이 설정을 변경하여 TCP 플토콜을 사용할 수 있습니다.

하지만 TCP 프로토콜 스택 사용은 권장하지 않고, 기본값인 UDP 프로토콜 사용을 권장합니다.

JBoss EAP 환경설정 파일(standalone-ha.xml)에서 기본 스택을 udp에서 tcp로 변경하고 TCPPING 설정부분의 주석을 해제하여 TCP 프로토콜 스택을 사용할 수있도록 설정을 변경합니다.

$ vim $JBOSS_HOME/domains/노드명/configuration/standalone-ha.xml

--- 생략 ---
	<subsystem xmlns="urn:jboss:domain:jgroups:7.0">
    	<channels default="ee">
        <!-- <channel name="ee" stack="udp" cluster="ejb"/>  -->
        	<channel name="ee" stack="tcp" cluster="ejb"/>
        </channels>
        <stacks>
        	<stack name="udp">
            	<transport type="UDP" socket-binding="jgroups-udp"/>
                <protocol type="PING"/>
                <protocol type="MERGE3"/>
                <socket-protocol type="FD_SOCK" socket-binding="jgroups-udp-fd"/>
                <protocol type="FD_ALL">
                	<property name-"timeout">2000</property>
                </protocol>
                <protocol type="VERIFY_SUSPECT"/>
                <protocol type="pbcast.NAKACK2"/>
                <protocol type="UNICAST3"/>
                <protocol type="pbcast.STABLE"/>
                <protocol type="pbcast.GMS"/>
                <protocol type="UFC"/>
                <protocol type="MFC"/>
                <protocol type="FRAG3"/>
            </stack>
            <stack name="tcp">
            	<transport type="TCP" socket-binding="jgroups-tcp"/>
                <protocol type="TCPPING">
                	<property name="initial_hosts">was1[7600],was2[7600]</property>
                    <property name="port_range">0</property>
                </protocol>
                <!-- <protocol type="TCPPING">
                	<property name="initial_hosts">was1[7600],was2[7600]</property>
                    <property name="port_range">0</property>
                </protocol> -->                
                <!-- <socket-protocol type="MPING" socket-binding="jgroups-mping"/> -->
                <protocol type="MERGE3"/>
                <socket-protocol type="FD_SOCK" socket-binding="jgroups-tcp-fd"/>
                <protocol type="FD_ALL"/>
                <protocol type="VERIFY_SUSPECT"/>
                <protocol type="pbcast.NAKACK2"/>
                <protocol type="UNICAST3"/>
                <protocol type="pbcast.STABLE"/>
                <protocol type="pbcsat.GMS"/>
                <protocol type="MFC"/>
                <protocol type="FRAGE3"/>
            </stack>
        </stacks>
        --- 생략 ---

 

다음은 JBoss EAP 환경설정 파일(standalone-ha.xml)에 설정하지 않고 TCP 프로토콜 스택을 사용하는 방안입니다.

$ vim $JBOSS_HOME/domains/노드명/bin/env.sh

--- 생략 ---
### TCP mode can be used when multicast is not preferable or allowed by security policies.
### https://access.redhat.com/solutions/3021711
# 사용 시 아래 주석을 해제
# export TCP_MULTICAST_ADDR=was1[7600],was2[7600]

# export JAVA_OPTS=" $JAVA_OPTS -Djboss.jgroups.transport.machine=$SERVER_NAME"
# export JAVA_OPTS=" $JAVA_OPTS -Djboss.cluster.tcp.initial_hosts=$TCP_MULTICAST_ADDR"

 

반응형

댓글