22.2. Cryostat와 클러스터 통신
22.2.1. Cryostat 정보 링크 복사링크가 클립보드에 복사되었습니다!
Cryostat는 안정적인 메시징을 위한 툴킷이며 노드가 서로 메시지를 보낼 수 있는 클러스터를 만드는 데 사용할 수 있습니다.
jgroups 하위 시스템은 JBoss EAP에서 고가용성 서비스에 대한 그룹 통신 지원을 제공합니다. 이를 통해 이름이 지정된 채널 및 프로토콜 스택을 구성하고 채널에 대한 런타임 통계를 볼 수 있습니다. jgroups 하위 시스템은 관리형 도메인에서 ha 또는 full-ha 프로필 또는 독립 실행형 서버의 standalone-ha.xml 또는 standalone-full-ha.xml 구성 파일과 같은 고가용성 기능을 제공하는 구성을 사용할 때 사용할 수 있습니다.
JBoss EAP는 두 개의 Cryostat 스택으로 사전 구성되어 있습니다.
- udp
- 클러스터의 노드는 UDP(User Datagram Protocol) 멀티 캐스트를 사용하여 서로 통신합니다. 기본 스택입니다.
- tcp
- 클러스터의 노드는 TCP(Transmission Control Protocol)를 사용하여 서로 통신합니다.
사전 구성된 스택을 사용하거나 시스템의 특정 요구 사항에 맞게 자체적으로 정의할 수 있습니다.
TCP는 더 많은 오버헤드를 가지며 오류 검사, 패킷 순서 및 정체 제어 자체를 처리하기 때문에 UDP보다 느리게 간주됩니다. Cryostat는 UDP용 이러한 기능을 처리하는 반면 TCP는 자체적으로 기능을 보장합니다. 신뢰할 수 없거나 높은 혼잡 네트워크에서 Cryostat를 사용하거나 멀티 캐스트를 사용할 수 없는 경우 TCP를 선택하는 것이 좋습니다.
22.2.2. 기본 Cryostat 채널을 TCP를 사용하도록 전환 링크 복사링크가 클립보드에 복사되었습니다!
기본적으로 클러스터 노드는 UDP 프로토콜을 사용하여 통신합니다. 기본 ee Cryostat 채널은 사전 정의된 udp 프로토콜 스택을 사용합니다.
일부 네트워크는 TCP만 사용할 수 있습니다. 다음 관리 CLI 명령을 사용하여 사전 구성된 tcp 스택을 사용하도록 ee 채널을 전환합니다.
/subsystem=jgroups/channel=ee:write-attribute(name=stack,value=tcp)
/subsystem=jgroups/channel=ee:write-attribute(name=stack,value=tcp)
이 기본 tcp 스택은 IP 멀티 캐스트를 사용하여 초기 클러스터 멤버십을 검색하는 MPING 프로토콜을 사용합니다. 대체 멤버십 검색 프로토콜의 스택 구성은 다음 섹션을 참조하십시오.
22.2.3. TCPPING 구성 링크 복사링크가 클립보드에 복사되었습니다!
이 절차에서는 TCPPING 프로토콜을 사용하여 정적 클러스터 멤버십 목록을 정의하는 새 Cryostat 스택을 생성합니다. tcpping 스택을 생성하고 이 새 스택을 사용하도록 기본 ee 채널을 설정하는 기본 스크립트가 제공됩니다. 이 스크립트의 관리 CLI 명령은 환경에 맞게 사용자 지정해야 하며 일괄 처리로 처리됩니다.
다음 스크립트를 텍스트 편집기에 복사하여 로컬 파일 시스템에 저장합니다.
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 정의된 프로토콜 순서가 중요합니다.
환경에 대한 스크립트를 수정합니다.
-
관리형 도메인에서 실행 중인 경우
/subsystem=jgroups명령 앞에/profile=PROFILE_NAME을 사용하여 업데이트할 프로필을 지정해야 합니다. 사용자 환경에 대해 선택 사항인 TCPPING 속성을 조정합니다.
-
initial_hosts: host[PORT]구문을 사용하여 쉼표로 구분된 호스트 목록입니다. 이 구문은 잘 알려져 있으며 초기 멤버십을 조회할 수 있습니다. -
port_range: 필요한 경우 포트 범위를 할당할 수 있습니다. 포트 범위를2로 할당하고 호스트의 초기 포트가7600인 경우 TCPPING은 포트7600-7602의 호스트에 연결을 시도합니다. 포트 범위는initial_hosts에 지정된 각 주소에 적용됩니다. -
timeout: 클러스터 멤버에 대한 시간 초과 값(밀리초)입니다.
-
-
관리형 도메인에서 실행 중인 경우
스크립트 파일을 관리 CLI에 전달하여 스크립트를 실행합니다.
EAP_HOME/bin/jboss-cli.sh --connect --file=/path/to/SCRIPT_NAME
$ EAP_HOME/bin/jboss-cli.sh --connect --file=/path/to/SCRIPT_NAMECopy to Clipboard Copied! Toggle word wrap Toggle overflow
이제 TCPPING 스택을 사용할 수 있으며 TCP가 네트워크 통신에 사용됩니다.
22.2.4. TCPGOSSIP 구성 링크 복사링크가 클립보드에 복사되었습니다!
이 절차에서는 TCPGOSSIP 프로토콜을 사용하여 외부 gossip 라우터를 사용하여 클러스터 멤버를 검색하는 새 Cryostat 스택을 생성합니다. tcpgossip 스택을 생성하고 이 새 스택을 사용하도록 기본 ee 채널을 설정하는 기본 스크립트가 제공됩니다. 이 스크립트의 관리 CLI 명령은 환경에 맞게 사용자 지정해야 하며 일괄 처리로 처리됩니다.
다음 스크립트를 텍스트 편집기에 복사하여 로컬 파일 시스템에 저장합니다.
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 정의된 프로토콜 순서가 중요합니다.
환경에 대한 스크립트를 수정합니다.
-
관리형 도메인에서 실행 중인 경우
/subsystem=jgroups명령 앞에/profile=PROFILE_NAME을 사용하여 업데이트할 프로필을 지정해야 합니다. 환경에 대해 선택 사항인 TCPGOSSIP 속성을 조정합니다.
-
initial_hosts: host[PORT]구문을 사용하여 쉼표로 구분된 호스트 목록입니다. 이 구문은 잘 알려져 있으며 초기 멤버십을 조회할 수 있습니다. -
reconnect_interval: 연결이 끊긴 스텁이 gossip 라우터에 다시 연결하려고 시도하는 간격(밀리초)입니다. -
sock_conn_timeout: 소켓 생성의 최대 시간입니다. 기본값은1000밀리초입니다. -
sock_read_timeout: 읽기를 차단할 최대 시간(밀리초)입니다. 값이0이면 무기한 차단됩니다.
-
-
관리형 도메인에서 실행 중인 경우
스크립트 파일을 관리 CLI에 전달하여 스크립트를 실행합니다.
EAP_HOME/bin/jboss-cli.sh --connect --file=/path/to/SCRIPT_NAME
$ EAP_HOME/bin/jboss-cli.sh --connect --file=/path/to/SCRIPT_NAMECopy to Clipboard Copied! Toggle word wrap Toggle overflow
TCPGOSSIP 스택을 사용할 수 있으며 TCP는 네트워크 통신에 사용됩니다. 이 스택은 gossip 라우터와 함께 사용하도록 구성되어 있어 Cryostat 클러스터 멤버가 다른 클러스터 멤버를 찾을 수 있습니다.
22.2.5. 네트워크 인터페이스에 Cryostat 바인딩 링크 복사링크가 클립보드에 복사되었습니다!
기본적으로 Cryostat는 기본 구성에서 localhost를 가리키는 프라이빗 네트워크 인터페이스에만 바인딩됩니다. 보안상의 이유로, Cryostat는 JBoss EAP 시작 중에 지정된 -b 인수에 의해 정의된 네트워크 인터페이스에 바인딩되지 않습니다. 클러스터링 트래픽은 공용 네트워크 인터페이스에 노출되지 않아야 합니다.
네트워크 인터페이스 구성 방법에 대한 자세한 내용은 이 가이드의 네트워크 및 포트 구성 장을 참조하십시오.
보안상의 이유로 Cryostat는 공용이 아닌 네트워크 인터페이스에만 바인딩해야 합니다. 성능상의 이유로 Cryostat 트래픽의 네트워크 인터페이스는 전용 VLAN(Virtual Local Area Network)의 일부여야 합니다.
22.2.6. 클러스터 보안 링크 복사링크가 클립보드에 복사되었습니다!
클러스터를 안전하게 실행하기 위해 해결해야 할 몇 가지 문제가 있습니다.
인증 구성
Cryostat 인증은 AUTH 프로토콜에 의해 수행됩니다. 이는 인증된 노드만 클러스터에 참여할 수 있도록 하는 것입니다.
해당 서버 구성 파일에서 적절한 속성 설정으로 AUTH 프로토콜을 추가합니다. AUTH 프로토콜은 pbcast.GMS 프로토콜 바로 전에 구성해야 합니다.
암호화 구성
메시지를 암호화하기 위해 Cryostat는 클러스터 멤버가 공유하는 시크릿 키를 사용합니다. 발신자는 공유 비밀 키를 사용하여 메시지를 암호화하고 수신자는 동일한 비밀 키를 사용하여 메시지를 해독합니다. SYM_ENCRYPT 프로토콜을 사용하여 구성된 대칭 암호화 에서 노드는 공유 키 저장소를 사용하여 시크릿 키를 검색합니다. ASYM_ENCRYPT 프로토콜을 사용하여 구성된 비대칭 암호화 에서 노드는 AUTH 를 사용하여 인증한 후 클러스터의 코디네이터에서 시크릿 키를 검색합니다.
SYM_ENCRYPT 및 ASYM_ENCRYPT 프로토콜에 액세스하려면 Red Hat JBoss Enterprise Application Platform 7.0 Update 01 또는 최신 누적 패치를 JBoss EAP 설치에 적용해야 합니다.
Symmetric Encryption 사용
SYM_ENCRYPT 를 사용하려면 각 노드의 Cryostat 구성에서 참조될 키 저장소를 설정해야 합니다.
키 저장소를 생성합니다.
다음 명령에서
VERSION을 적절한 Cryostat JAR 버전으로 바꾸고PASSWORD를 키 저장소 암호로 바꿉니다.java -cp EAP_HOME/modules/system/layers/base/org/jgroups/main/jgroups-VERSION.jar org.jgroups.demos.KeyStoreGenerator --alg AES --size 128 --storeName defaultStore.keystore --storepass PASSWORD --alias mykey
$ java -cp EAP_HOME/modules/system/layers/base/org/jgroups/main/jgroups-VERSION.jar org.jgroups.demos.KeyStoreGenerator --alg AES --size 128 --storeName defaultStore.keystore --storepass PASSWORD --alias mykeyCopy to Clipboard Copied! Toggle word wrap Toggle overflow 그러면 Cryostat 구성에서 참조될
defaultStore.keystore파일이 생성됩니다.jgroups하위 시스템에서SYM_ENCRYPT프로토콜을 구성합니다.해당 서버 구성 파일에서 적절한 속성 설정으로
SYM_ENCRYPT프로토콜을 추가합니다.SYM_ENCRYPT프로토콜은pbcast.NAKACK2프로토콜 바로 전에 구성해야 합니다.Copy to Clipboard Copied! Toggle word wrap Toggle overflow
SYM_ENCRYPT 를 사용하는 경우 AUTH 를 구성하는 것은 선택 사항입니다.
Asymmetric Encryption 사용
jgroups하위 시스템에서ASYM_ENCRYPT프로토콜을 구성합니다.해당 서버 구성 파일에서 적절한 속성 설정으로
ASYM_ENCRYPT프로토콜을 추가합니다.ASYM_ENCRYPT프로토콜은pbcast.NAKACK2프로토콜 바로 전에 구성해야 합니다.Copy to Clipboard Copied! Toggle word wrap Toggle overflow jgroups하위 시스템에서AUTH프로토콜을 구성합니다.AUTH는ASYM_ENCRYPT에 필요합니다. 자세한 내용은 인증 구성 섹션을 참조하십시오.
22.2.7. Cryostat 스레드 풀 구성 링크 복사링크가 클립보드에 복사되었습니다!
jgroups 하위 시스템에는 기본,internal,oob 및 timer 스레드 풀이 포함되어 있습니다. 이러한 풀은 모든 Cryostat 스택에 대해 구성할 수 있습니다.
다음 표에는 각 스레드 풀에 구성할 수 있는 특성과 각각에 대한 기본값이 나열되어 있습니다.
| 스레드 풀 이름 | keepalive-time | max-threads | min-threads | queue-length |
|---|---|---|---|---|
| default | 60000L | 300 | 20 | 100 |
| internal | 60000L | 4 | 2 | 100 |
| cnfB | 60000L | 300 | 20 | 0 |
| 타이머 | 5000L | 4 | 2 | 500 |
다음 구문을 사용하여 관리 CLI를 사용하여 Cryostat 스레드 풀을 구성합니다.
/subsystem=jgroups/stack=STACK_TYPE/transport=TRANSPORT_TYPE/thread-pool=THREAD_POOL_NAME:write-attribute(name=ATTRIBUTE_NAME, value=ATTRIBUTE_VALUE)
/subsystem=jgroups/stack=STACK_TYPE/transport=TRANSPORT_TYPE/thread-pool=THREAD_POOL_NAME:write-attribute(name=ATTRIBUTE_NAME, value=ATTRIBUTE_VALUE)
다음은 udp 스택의 기본 스레드 풀에서 max-threads 값을 500 으로 설정하는 관리 CLI 명령의 예입니다.
/subsystem=jgroups/stack=udp/transport=UDP/thread-pool=default:write-attribute(name="max-threads", value="500")
/subsystem=jgroups/stack=udp/transport=UDP/thread-pool=default:write-attribute(name="max-threads", value="500")
22.2.8. Cryostat Send 및 Receive Buffers 구성 링크 복사링크가 클립보드에 복사되었습니다!
버퍼 크기 경고 해결
기본적으로 Cryostat는 특정 전송 및 수신 버퍼 값으로 구성됩니다. 그러나 운영 체제는 사용 가능한 버퍼 크기를 제한할 수 있으며 JBoss EAP는 구성된 버퍼 값을 사용하지 못할 수 있습니다. 이 경우 다음과 유사한 JBoss EAP 로그에 경고가 표시됩니다.
이 문제를 해결하려면 버퍼 크기를 늘리는 방법에 대한 지침은 운영 체제 설명서를 참조하십시오. Red Hat Enterprise Linux 시스템의 경우 root 사용자로 /etc/sysctl.conf 를 편집하여 시스템을 다시 시작할 수 있는 버퍼 크기에 대한 최대 값을 구성합니다. 예를 들면 다음과 같습니다.
# Allow a 25MB UDP receive buffer for JGroups net.core.rmem_max = 26214400 # Allow a 1MB UDP send buffer for JGroups net.core.wmem_max = 1048576
# Allow a 25MB UDP receive buffer for JGroups
net.core.rmem_max = 26214400
# Allow a 1MB UDP send buffer for JGroups
net.core.wmem_max = 1048576
/etc/sysctl.conf 를 수정한 후 sysctl -p 를 실행하여 변경 사항을 적용합니다.
Cryostat 버퍼 크기 구성
UDP 및 TCP Cryostat 스택에서 다음 전송 속성을 설정하여 JBoss EAP에서 사용하는 Cryostat 버퍼 크기를 구성할 수 있습니다.
- UDP 스택
-
ucast_recv_buf_size -
ucast_send_buf_size -
mcast_recv_buf_size -
mcast_send_buf_size
-
- TCP 스택
-
recv_buf_size -
send_buf_size
-
Cryostat 버퍼 크기는 관리 콘솔 또는 관리 CLI를 사용하여 구성할 수 있습니다.
다음 구문을 사용하여 관리 CLI를 사용하여 Cryostat 버퍼 크기 속성을 설정합니다.
/subsystem=jgroups/stack=STACK_NAME/transport=TRANSPORT/property=PROPERTY_NAME:add(value=BUFFER_SIZE)
/subsystem=jgroups/stack=STACK_NAME/transport=TRANSPORT/property=PROPERTY_NAME:add(value=BUFFER_SIZE)
다음은 tcp 스택에서 recv_buf_size 속성을 20000000 으로 설정하는 관리 CLI 명령 예제입니다.
/subsystem=jgroups/stack=tcp/transport=TRANSPORT/property=recv_buf_size:add(value=20000000)
/subsystem=jgroups/stack=tcp/transport=TRANSPORT/property=recv_buf_size:add(value=20000000)
Cryostat 버퍼 크기는 구성 탭에서 Cryostat 하위 시스템으로 이동하고, 관련 스택을 보고, 전송을 선택하고, 전송 속성 탭을 선택하여 관리 콘솔을 사용하여 구성할 수도 있습니다.
22.2.9. Cryostat 문제 해결 링크 복사링크가 클립보드에 복사되었습니다!
22.2.9.1. 노드가 클러스터를 형성하지 않음 링크 복사링크가 클립보드에 복사되었습니다!
IP 멀티 캐스트에 대해 시스템이 올바르게 설정되었는지 확인합니다. IP 멀티캐스트를 테스트하는 데 사용할 수 있는 JBoss EAP에는 McastReceiverTest 및 McastSenderTest 의 두 가지 테스트 프로그램이 있습니다.
터미널에서 McastReceiverTest 를 시작합니다.
java -cp EAP_HOME/bin/client/jboss-client.jar org.jgroups.tests.McastReceiverTest -mcast_addr 230.11.11.11 -port 5555
$ java -cp EAP_HOME/bin/client/jboss-client.jar org.jgroups.tests.McastReceiverTest -mcast_addr 230.11.11.11 -port 5555
그런 다음 다른 터미널 창에서 McastSenderTest 를 시작합니다.
java -cp EAP_HOME/bin/client/jboss-client.jar org.jgroups.tests.McastSenderTest -mcast_addr 230.11.11.11 -port 5555
$ java -cp EAP_HOME/bin/client/jboss-client.jar org.jgroups.tests.McastSenderTest -mcast_addr 230.11.11.11 -port 5555
특정 네트워크 인터페이스 카드(NIC)에 바인딩하려면 -bind_addr Cryostat_BIND_ADDRESS 를 사용합니다. 여기서 Cryostat _BIND_ADDRESS 는 바인딩하려는 NIC의 IP 주소입니다. 발신자와 수신자 모두에서 이 매개변수를 사용합니다.
McastSenderTest 터미널 창을 입력하면 McastReceiverTest 창에 출력이 표시됩니다. 그렇지 않은 경우 다음 단계를 시도합니다.
-
sender 명령에
-ttl VALUE를 추가하여 멀티 캐스트 패킷의 time-to-live를 늘립니다. 이 테스트 프로그램에서 사용하는 기본값은32이고VALUE는255를 초과해서는 안 됩니다. - 시스템에 여러 인터페이스가 있는 경우 올바른 인터페이스를 사용하고 있는지 확인합니다.
- 시스템 관리자에게 문의하여 선택한 인터페이스에서 멀티 캐스트가 작동하는지 확인하십시오.
클러스터의 각 시스템에서 멀티 캐스트가 올바르게 작동하고 있으면 위의 테스트를 반복하여 네트워크를 테스트하여 발신자를 한 시스템에 배치하고 수신자를 다른 시스템에 배치할 수 있습니다.
22.2.9.2. 실패 탐지에서 Missing Heartbeats의 원인 링크 복사링크가 클립보드에 복사되었습니다!
하트비트 승인이 시간 초과 및 max_tries 로 정의되는 T( T ) 동안 수신되지 않았기 때문에 클러스터 멤버가 FD(실패 탐지)로 의심되는 경우가 있습니다.
예를 들어 A Pings B, B pings C, C pings D 및 D pings A, B, C, D ping 노드 클러스터의 경우 다음과 같은 이유로 C가 의심될 수 있습니다.
-
B 또는 C는
T초 이상 100 % CPU에서 실행됩니다. 따라서 C가 하트비트 승인을 B에 전송하더라도 B는 100 % CPU 사용량에 있기 때문에 처리하지 못할 수 있습니다. - B 또는 C는 가비지 수집 중이므로 위와 동일한 상황이 발생합니다.
- 위의 두 사례의 조합입니다.
- 네트워크가 패킷을 손실됩니다. 이 문제는 일반적으로 네트워크에 트래픽이 많이 있고 스위치가 패킷 삭제 시작, 일반적으로 먼저 브로드캐스트를 시작한 다음 IP 멀티캐스트 및 TCP 패킷이 마지막으로 수행됩니다.
-
B 또는 C는 콜백을 처리하고 있습니다. 예를 들어, C가
T+ 1초를 처리하는 채널을 통해 원격 방법 호출을 수신한 경우, 이 시간 동안 C는 하트비트를 포함한 다른 메시지를 처리하지 않습니다. 따라서 B는 하트비트 승인을 받지 못하고 C를 의심할 것입니다.