29장. 클러스터 개요
JBoss EAP 메시징 클러스터를 사용하면 메시지 처리 로드를 공유하기 위해 JBoss EAP 메시징 서버 그룹을 함께 그룹화할 수 있습니다. 클러스터의 각 활성 노드는 자체 메시지를 관리하고 자체 연결을 처리하는 활성 JBoss EAP 메시징 서버입니다.
서로 다른 버전의 JBoss EAP로 구성된 혼합 클러스터는 messaging-activemq
하위 시스템에서 지원되지 않습니다. 메시징 클러스터를 구성하는 서버는 모두 동일한 버전의 JBoss EAP를 사용해야 합니다.
클러스터는 JBoss EAP 구성 파일의 다른 노드에 대한 클러스터 연결을 선언하는 각 노드에 의해 구성됩니다. 노드가 다른 노드에 대한 클러스터 연결을 만들 때 자체와 다른 노드 간에 코어 브리지 연결을 내부적으로 생성합니다. 이 작업은 백그라운드에서 투명하게 수행됩니다. 각 노드에 대해 명시적인 브리지를 선언할 필요가 없습니다. 이러한 클러스터 연결을 통해 메시지를 클러스터의 노드 간에 전달하여 부하를 분산할 수 있습니다.
클러스터링의 중요한 부분은 서버가 클라이언트 또는 기타 서버가 최소 구성으로 연결할 수 있도록 연결 세부 정보를 브로드캐스트할 수 있는 서버 검색 입니다.
또한 이 섹션에서는 클러스터의 노드 전체에서 클라이언트 연결의 균형을 맞추기 위한 클라이언트 측 부하 분산 및 메시지 재배포 에 대해 설명합니다. 여기서 JBoss EAP 메시징은 노드 간에 메시지를 재배포하여 사용을 방지합니다.
클러스터 노드가 구성되면 대칭 클러스터를 생성하기 위해 해당 구성을 다른 노드에 복사하기만 하면 됩니다.
실제로 예기치 않은 오류가 발생하지 않도록 클러스터의 각 노드는 다음 요소에 대해 동일한 구성을 공유해야 합니다.
- cluster-connection
- broadcast-group
- discovery-group
- 대기열 및 토픽을 포함한 address-settings
그러나 JBoss EAP 메시징 파일을 복사할 때는 주의해야 합니다. 메시징 데이터, 바인딩, 저널, 대규모 메시지 디렉터리를 한 노드에서 다른 노드로 복사하지 마십시오. 클러스터 노드를 처음으로 시작하고 저널 파일을 초기화하면 저널 디렉터리에 특수 식별자가 유지됩니다. 클러스터가 올바르게 구성되려면 노드에서 식별자가 고유해야 합니다.
29.1. 서버 검색 링크 복사링크가 클립보드에 복사되었습니다!
서버 검색은 서버가 연결 세부 정보를 전파할 수 있는 메커니즘입니다.
메시징 클라이언트
메시징 클라이언트는 클러스터의 서버가 한 번에 가동되는지에 대한 구체적인 지식 없이 클러스터의 서버에 연결할 수 있기를 원합니다.
기타 서버
클러스터의 서버는 클러스터에 있는 다른 모든 서버에 대한 사전 지식 없이 서로 클러스터 연결을 생성할 수 있어야 합니다.
이 정보 또는 클러스터 토폴로지는 클라이언트 및 클러스터 연결을 통해 다른 서버로 일반 JBoss EAP 메시징 연결을 중심으로 전송됩니다. 그러나 초기 첫 번째 연결을 설정하는 방법이 필요합니다. 이 작업은 UDP 및 JGroups와 같은 동적 검색 기술을 사용하거나 초기 커넥터의 정적 목록을 제공하여 수행할 수 있습니다.
29.1.1. 브로드캐스트 그룹 링크 복사링크가 클립보드에 복사되었습니다!
브로드캐스트 그룹은 서버가 네트워크를 통해 커넥터를 브로드캐스트하는 수단입니다. 커넥터 는 클라이언트 또는 기타 서버에서 서버에 연결할 수 있는 방법을 정의합니다.
브로드캐스트 그룹은 일련의 커넥터를 가져와서 네트워크에서 브로드캐스트합니다. 클러스터를 구성하는 브로드캐스트 기술에 따라 UDP 또는 JGroups를 사용하여 커넥터 쌍 정보를 브로드캐스트합니다.
브로드캐스트 그룹은 서버 구성의 messaging-activemq
하위 시스템에서 정의됩니다. JBoss EAP 메시징 서버당 여러 개의 브로드캐스트 그룹이 있을 수 있습니다.
UDP를 사용하여 방송 그룹 설정
다음은 UDP 브로드캐스트 그룹을 정의하는 메시징 서버의 구성 예입니다. 이 구성은 messaging-group
소켓 바인딩을 사용합니다.
이 구성은 다음 관리 CLI 명령을 사용하여 수행할 수 있습니다.
messaging-group
소켓 바인딩을 추가합니다./socket-binding-group=standard-sockets/socket-binding=messaging-group:add(interface=private,port=5432,multicast-address=231.7.7.7,multicast-port=9876)
/socket-binding-group=standard-sockets/socket-binding=messaging-group:add(interface=private,port=5432,multicast-address=231.7.7.7,multicast-port=9876)
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 브로드캐스트 그룹을 추가합니다.
/subsystem=messaging-activemq/server=default/broadcast-group=my-broadcast-group:add(socket-binding=messaging-group,broadcast-period=2000,connectors=[http-connector])
/subsystem=messaging-activemq/server=default/broadcast-group=my-broadcast-group:add(socket-binding=messaging-group,broadcast-period=2000,connectors=[http-connector])
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
JGroups를 사용하여 방송 그룹 구성
아래는 UDP를 사용하는 기본 JGroups 브로드캐스트 그룹을 사용하는 브로드캐스트 그룹을 정의하는 메시징 서버의 구성 예입니다. JGroups를 브로드캐스트에 사용할 수 있으려면 jgroups-channel
을 설정해야 합니다.
다음 관리 CLI 명령을 사용하여 구성할 수 있습니다.
/subsystem=messaging-activemq/server=default/broadcast-group=my-broadcast-group:add(connectors=[http-connector],jgroups-cluster=activemq-cluster)
/subsystem=messaging-activemq/server=default/broadcast-group=my-broadcast-group:add(connectors=[http-connector],jgroups-cluster=activemq-cluster)
브로드캐스트 그룹 속성
아래 표에는 브로드캐스트 그룹의 구성 가능한 속성이 나열되어 있습니다.
속성 | 설명 |
---|---|
broadcast-period | 연속 브로드캐스트 간 기간(밀리초)입니다. |
커넥터 | 브로드캐스트할 커넥터의 이름입니다. |
jGroups-channel |
클러스터를 구성하기 위해 |
jgroups-cluster | 브로드캐스트 그룹과 검색 그룹 간의 통신에 사용되는 논리 이름입니다. 특정 브로드캐스트 그룹에서 메시지를 수신하려는 검색 그룹은 브로드캐스트 그룹에서 사용하는 동일한 클러스터 이름을 사용해야 합니다. |
jgroups-stack |
클러스터를 구성하는 데 사용되는 중요
|
socket-binding | 브로드캐스트 그룹 소켓 바인딩입니다. |
29.1.2. 검색 그룹 링크 복사링크가 클립보드에 복사되었습니다!
브로드캐스트 그룹은 서버에서 커넥터 정보를 브로드캐스트하는 방법을 정의하지만, 검색 그룹은 브로드캐스트 엔드포인트에서 커넥터 정보를 수신하는 방법을 정의합니다(예: UDP 멀티캐스트 주소 또는 JGroup 채널).
검색 그룹은 다른 서버에서 각 브로드캐스트마다 하나씩 커넥터 목록을 유지 관리합니다. 특정 서버에서 브로드캐스트 끝점에서 브로드캐스트 엔드포인트에서 브로드캐스트를 수신하면 해당 서버의 목록에서 해당 항목을 업데이트합니다. 시간 동안 특정 서버에서 브로드캐스트를 받지 않은 경우 목록에서 서버의 항목을 제거합니다.
검색 그룹은 JBoss EAP 메시징의 두 위치에서 사용됩니다.
- 토폴로지를 다운로드하기 위한 초기 연결을 얻는 방법을 알 수 있도록 클러스터 연결 사용.
- 클라이언트를 메시징하여 토폴로지를 다운로드하기 위한 초기 연결을 얻는 방법을 알 수 있습니다.
검색 그룹이 항상 브로드캐스트를 수락하지만 사용 가능한 라이브 및 백업 서버의 현재 목록은 초기 연결이 완료된 경우에만 사용됩니다. 그 결과 에서 서버 검색은 일반적인 JBoss EAP 메시징 연결을 통해 수행됩니다.
각 검색 그룹은 브로드캐스트 그룹 대응과 일치하는 브로드캐스트 끝점(UDP 또는 JGroups)으로 구성해야 합니다. 예를 들어 브로드캐스트 그룹이 UDP를 사용하여 구성된 경우 검색 그룹은 UDP 및 동일한 멀티캐스트 주소를 사용해야 합니다.
29.1.2.1. 서버에서 검색 그룹 설정 링크 복사링크가 클립보드에 복사되었습니다!
검색 그룹은 서버 구성의 messaging-activemq
하위 시스템에서 정의됩니다. JBoss EAP 메시징 서버당 검색 그룹이 여러 개 있을 수 있습니다.
UDP를 사용하여 검색 그룹 설정
다음은 UDP 검색 그룹을 정의하는 메시징 서버의 구성 예입니다. 이 구성은 messaging-group
소켓 바인딩을 사용합니다.
이 구성은 다음 관리 CLI 명령을 사용하여 수행할 수 있습니다.
messaging-group
소켓 바인딩을 추가합니다./socket-binding-group=standard-sockets/socket-binding=messaging-group:add(interface=private,port=5432,multicast-address=231.7.7.7,multicast-port=9876)
/socket-binding-group=standard-sockets/socket-binding=messaging-group:add(interface=private,port=5432,multicast-address=231.7.7.7,multicast-port=9876)
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 검색 그룹을 추가합니다.
/subsystem=messaging-activemq/server=default/discovery-group=my-discovery-group:add(socket-binding=messaging-group,refresh-timeout=10000)
/subsystem=messaging-activemq/server=default/discovery-group=my-discovery-group:add(socket-binding=messaging-group,refresh-timeout=10000)
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
JGroups를 사용하여 검색 그룹 구성
다음은 JGroups 검색 그룹을 정의하는 메시징 서버의 구성 예입니다.
다음 관리 CLI 명령을 사용하여 구성할 수 있습니다.
/subsystem=messaging-activemq/server=default/discovery-group=my-discovery-group:add(refresh-timeout=10000,jgroups-cluster=activemq-cluster)
/subsystem=messaging-activemq/server=default/discovery-group=my-discovery-group:add(refresh-timeout=10000,jgroups-cluster=activemq-cluster)
검색 그룹 속성
아래 표에는 검색 그룹의 구성 가능한 속성이 나열되어 있습니다.
속성 | 설명 |
---|---|
initial-wait-timeout | 최초 브로드캐스트가 클러스터에 하나 이상의 노드를 제공할 때까지 대기하는 기간(밀리초)입니다. |
jGroups-channel |
클러스터를 구성하기 위해 |
jgroups-cluster | 브로드캐스트 그룹과 검색 그룹 간의 통신에 사용되는 논리 이름입니다. 특정 브로드캐스트 그룹에서 메시지를 수신하려는 검색 그룹은 브로드캐스트 그룹에서 사용하는 동일한 클러스터 이름을 사용해야 합니다. |
jgroups-stack |
클러스터를 구성하는 데 사용되는 중요
|
새로 고침 시간 제한 | 검색 그룹이 특정 서버에서 마지막 브로드캐스트를 수신한 후 대기하는 동안 기다린 후 목록에서 서버의 커넥터 쌍 항목을 제거합니다. |
socket-binding | 검색 그룹 소켓 바인딩입니다. |
위에서 설명한 JGroups 특성과 UDP별 특성은 서로 배타적입니다. 검색 그룹 구성에 하나의 집합만 지정할 수 있습니다.
29.1.2.2. 클라이언트 측에서 검색 그룹 구성 링크 복사링크가 클립보드에 복사되었습니다!
자카르타 메시징 또는 핵심 API를 사용하여 연결할 수 있는 서버 목록을 검색하도록 JBoss EAP 메시징 클라이언트를 구성할 수 있습니다.
자카르타 메시징을 사용하여 클라이언트 검색 구성
Jakarta Messaging을 사용하는 클라이언트는 JNDI로 관련 ConnectionFactory
를 조회할 수 있습니다. connection-factory 또는
의 pooled-
connection-factoryentries
특성은 팩토리가 노출될 JNDI 이름을 지정합니다. 다음은 JNDI로 조회할 원격 클라이언트에 대해 구성된 ConnectionFactory
의 예입니다.
java:jboss/exported
네임스페이스에 바인딩된 JNDI 이름만 원격 클라이언트에 사용할 수 있다는 점을 기억해야 합니다. connection-factory
에 java:jboss/exported
네임스페이스에 바인딩된 항목이 있는 경우 원격 클라이언트는 java:jboss/exported
다음에 있는 텍스트를 사용하여 connection-factory
를 조회합니다. 예를 들어 RemoteConnectionFactory
는 기본적으로 java:jboss/exported/jms/RemoteConnectionFactory
에 바인딩됩니다. 즉 원격 클라이언트가 jms/RemoteConnectionFactory
를 사용하여 이 연결
팩토리를 조회합니다. pooled-connection-factory
는 원격 클라이언트에 적합하지 않기 때문에 java:jboss/exported
네임스페이스에 바인딩 된 항목이
없어야 합니다.
Jakarta Messaging 2.0 이후 기본 Jakarta Messaging 연결 팩토리는 JNDI 이름 java:comp/DefaultJMSConnectionFactory
아래 Jakarta EE 애플리케이션에서 액세스할 수 있습니다. JBoss EAP messaging-activemq
하위 시스템은 이 기본 연결 팩토리를 제공하는 데 사용되는 pooled-connection-factory
를 정의합니다. 이 pooled-connection-factory
의 매개변수 변경 사항은 JNDI 이름 java:comp/DefaultJMSConnectionFactory
에서 기본 자카르타 메시징 공급자를 찾는 자카르타 EE 애플리케이션에서 고려합니다. 다음은 *-full 및
프로필에 정의된 기본 풀링된 연결 팩토리입니다.
*-full-
ha
코어 API를 사용하여 클라이언트 검색 구성
코어 API를 사용하여 ClientSessionFactory
인스턴스를 직접 인스턴스화하는 경우 세션 팩토리를 생성할 때 직접 검색 그룹 매개변수를 지정할 수 있습니다. 예를 들면 다음과 같습니다.
DiscoveryGroupConfiguration
에서 setDiscoveryRefreshTimeout()
setter 메서드를 사용하여 기본값이 10000
밀리초인 refresh-timeout
값을 설정할 수 있습니다.
DiscoveryGroupConfiguration
에서 setDiscoveryInitialWaitTimeout()
setter 메서드를 사용하여 첫 번째 세션을 만들기 전에 세션 팩토리가 대기하는 시간을 결정하는 initial-wait-timeout
값을 설정할 수도 있습니다. 기본값은 10000
밀리초입니다.
29.1.3. 정적 검색 링크 복사링크가 클립보드에 복사되었습니다!
네트워크에서 UDP를 사용할 수 없거나 사용하지 않으려는 경우 하나 이상의 서버의 초기 목록으로 연결을 구성할 수 있습니다.
이는 모든 서버를 호스팅할 위치를 알아야 한다는 것을 의미하지는 않습니다. 이러한 서버를 신뢰할 수 있는 서버에 연결하도록 구성하고 해당 서버를 통해 전달된 연결 세부 정보를 설정할 수 있습니다.
클러스터 연결 구성
클러스터 연결의 경우 는 추가 구성이 필요하지 않습니다. 모든 커넥터가 일반적인 방식으로 정의되었는지 확인해야 합니다. 그런 다음 클러스터 연결 구성에서 이를 참조합니다.
클라이언트 연결 구성
클라이언트가 사용할 수 있는 서버의 정적 목록도 사용할 수 있습니다.
자카르타 메시징을 사용하여 클라이언트 검색 구성
Jakarta Messaging에서 정적 검색을 사용하는 권장 방법은 여러 커넥터(클러스터의 고유한 노드를 가리키는)를 사용하여 연결
팩토리를 구성하고 클라이언트가 JNDI를 사용하여 ConnectionFactory를 조회하도록 하는 것입니다. 다음은 그러한 커넥션 팩토리를 나타내는 구성 조각입니다
:
위의 예에서 http-connector
는 로컬 서버를 가리키는 HTTP 커넥터(<http-connector>
)이며 http-node1
은 server node1
을 가리키는 HTTP 커넥터입니다. 서버 구성에서 커넥터를 구성하는 방법은 커넥터 및 수락자 섹션 을 참조하십시오.
코어 API를 사용하여 클라이언트 검색 구성
코어 API를 사용하는 경우 클러스터의 각 서버에 대해 고유한 TransportConfiguration
을 생성하여 아래 예제 코드와 같이 ServerLocator
생성을 담당하는 메서드에 전달합니다.
29.1.4. 기본manila 값 링크 복사링크가 클립보드에 복사되었습니다!
이전에는-2021:2 -defaults.xml
파일을 검토하여 시간이 많이 걸리는 기본 Manila 값을 찾아야 했습니다. 검토 편의를 위해 Red Hat은 다음과 같은 기본manila 값을 나열했습니다.