16.3. 고가용성 구현
브로커 클러스터를 생성한 후 HA(고가용성)를 구현하여 안정성을 개선할 수 있습니다. HA를 사용하면 하나 이상의 브로커가 오프라인 상태인 경우에도 브로커 클러스터는 계속 작동할 수 있습니다.
HA 구현에는 다음과 같은 몇 가지 단계가 포함됩니다.
- 실시간 백업 그룹이 무엇인지 이해하고 요구 사항에 가장 적합한 HA 정책을 선택해야 합니다. AMQ Broker에서 HA가 작동하는 방법 이해 를 참조하십시오.
적절한 HA 정책을 선택한 경우 클러스터의 각 브로커에 HA 정책을 구성합니다. 다음 내용을 참조하십시오.
- 장애 조치( failover)를 사용하도록 클라이언트 애플리케이션을 구성합니다.
이후 고가용성을 위해 구성된 브로커 클러스터의 문제를 해결해야 하는 경우 클러스터에서 브로커를 실행하는 각 JVM(Java Virtual Machine) 인스턴스에 대해 Garbage Collection(GC) 로깅을 활성화하는 것이 좋습니다. JVM에서 GC 로그를 활성화하는 방법에 대한 자세한 내용은 JVM에서 사용하는 JDK(Java Development Kit) 버전에 대한 공식 설명서를 참조하십시오. AMQ Broker가 지원하는 JVM 버전에 대한 자세한 내용은 Red Hat AMQ 7 지원 구성 을 참조하십시오.
16.3.1. 고가용성 이해
AMQ Broker에서는 클러스터의 브로커를 라이브 백업 그룹으로 그룹화하여 HA(고가용성)를 구현합니다. 실시간 백업 그룹에서 라이브 브로커는 백업 브로커와 연결되어 있으며 실패할 경우 라이브 브로커에 대해 넘겨받을 수 있습니다. AMQ Broker는 실시간 백업 그룹 내에서 페일오버( HA 정책라고도 함)에 대한 몇 가지 다른 전략도 제공합니다.
16.3.1.1. 라이브 백업 그룹이 고가용성을 제공하는 방법
AMQ Broker에서는 클러스터의 브로커를 함께 연결하여 실시간 백업 그룹 을 구성하여 HA(고가용성)를 구현합니다. 라이브 백업 그룹은 장애 조치( failover )를 제공합니다. 즉, 하나의 브로커가 실패하면 다른 브로커가 메시지 처리를 대신할 수 있습니다.
실시간 백업 그룹은 하나 이상의 백업 브로커( 하위 브로커라고 함)에 연결된 하나의 라이브 브로커( 마스터 브로커라고도 함)로 구성됩니다. 라이브 브로커는 클라이언트 요청을 제공하는 반면 백업 브로커는 패시브 모드로 대기합니다. 라이브 브로커가 실패하면 백업 브로커가 라이브 브로커를 대체하여 클라이언트가 작업을 다시 연결하고 계속할 수 있습니다.
16.3.1.2. 고가용성 정책
HA(고가용성) 정책은 실시간 백업 그룹에서 페일오버가 발생하는 방식을 정의합니다. AMQ Broker는 다음과 같은 다양한 HA 정책을 제공합니다.
- 공유 저장소(권장)
실시간 및 백업 브로커는 공유 파일 시스템의 공통 디렉터리에 메시징 데이터를 저장합니다. 일반적으로 SAN(Storage Area Network) 또는 NFS(네트워크 파일 시스템) 서버. JDBC 기반 지속성을 구성한 경우 지정된 데이터베이스에 브로커 데이터를 저장할 수도 있습니다. 공유 저장소를 사용하면 라이브 브로커가 실패하는 경우 백업 브로커는 공유 저장소에서 메시지 데이터를 로드하여 실패한 라이브 브로커에 대해 인수합니다.
대부분의 경우 복제 대신 공유 저장소를 사용해야 합니다. 공유 저장소는 네트워크를 통해 데이터를 복제하지 않으므로 일반적으로 복제보다 성능이 향상됩니다. 공유 저장소는 또한 라이브 브로커와 해당 백업이 동시에 작동하는 네트워크 분리 (split brain") 문제를 방지할 수 있습니다.
- 복제
라이브 및 백업 브로커는 네트워크를 통해 메시징 데이터를 지속적으로 동기화합니다. 라이브 브로커가 실패하면 백업 브로커가 동기화된 데이터를 로드하고 실패한 라이브 브로커에 대해 인수합니다.
라이브 브로커와 백업 브로커 간의 데이터 동기화를 통해 실시간 브로커가 실패하면 메시징 데이터가 손실되지 않습니다. 라이브 및 백업 브로커가 처음에 함께 참여하면 라이브 브로커는 네트워크를 통해 모든 기존 데이터를 백업 브로커에 복제합니다. 이 초기 단계가 완료되면 라이브 브로커가 수신될 때 실시간 브로커에 영구 데이터를 백업 브로커에 복제합니다. 즉, 라이브 브로커가 네트워크를 벗어나면 백업 브로커는 라이브 브로커가 해당 시점까지 받은 모든 영구 데이터가 있습니다.
복제는 네트워크를 통해 데이터를 동기화하므로 네트워크 실패로 인해 라이브 브로커와 해당 백업이 동시에 활성화된 네트워크가 격리될 수 있습니다.
- 실시간 전용(제한 HA)
라이브 브로커가 정상적으로 중지되면 메시지 및 트랜잭션 상태를 다른 라이브 브로커에 복사한 다음 종료합니다. 그런 다음 클라이언트는 다른 브로커에 다시 연결하여 메시지를 계속 보내고 받을 수 있습니다.
추가 리소스
- live-backup 그룹의 브로커 간에 공유되는 영구 메시지 데이터에 대한 자세한 내용은 6.1절. “저널 기반 지속성 정보” 을 참조하십시오.
16.3.1.3. 복제 정책 제한 사항
네트워크 격리(때로 "split brain")라고 하는 것은 HA(복제 고가용성) 정책의 제한입니다. 어떻게 작동하는지, 그리고 그것을 피하는 방법을 이해해야합니다.
네트워크 격리는 라이브 브로커와 백업이 연결이 끊어지면 발생할 수 있습니다. 이러한 상황에서 라이브 브로커와 백업 모두 동시에 활성화될 수 있습니다. 특히 백업 브로커가 클러스터의 라이브 브로커의 절반 이상에 연결할 수 있는 경우에도 활성 상태가 됩니다. 이 상황에서 브로커 간에 메시지 복제가 없기 때문에 각각 클라이언트를 제공하고 다른 하나는 이를 인식하지 않고 메시지를 처리합니다. 이 경우 각 브로커는 완전히 다른 저널을 가지고 있습니다. 이 상황에서 복구하는 것은 매우 어려울 수 있으며 경우에 따라서는 불가능합니다.
네트워크 분리를 방지하려면 다음을 고려하십시오.
- 네트워크 분리 가능성 을 제거 하려면 공유 저장소 HA 정책을 사용하십시오.
복제 HA 정책을 사용하는 경우 최소 3개의 라이브 백업 쌍 을 사용하여 네트워크 격리 발생 가능성을 줄일 수 있습니다.
최소 3개의 라이브 백업 쌍을 사용하면 실시간 백업 브로커 쌍에서 복제 중단을 경험할 때 발생하는 쿼럼 투표에서 대부분의 결과를 얻을 수 있습니다.
복제 HA 정책을 사용할 때 몇 가지 추가 고려 사항은 다음과 같습니다.
- 라이브 브로커가 실패하고 백업 전환이 라이브로 전환되면 새 백업 브로커가 라이브에 연결되거나 원래 라이브 브로커에 failback이 발생할 때까지 추가 복제가 발생하지 않습니다.
- 라이브 백업 그룹의 백업 브로커가 실패하면 라이브 브로커는 계속 메시지를 제공합니다. 그러나 다른 브로커가 백업으로 추가되거나 원래 백업 브로커가 다시 시작될 때까지 메시지가 복제되지 않습니다. 이 기간 동안 메시지는 실시간 브로커로만 유지됩니다.
- 실시간 백업 쌍의 두 브로커가 이전에 종료되었지만 이제 다시 시작할 수 있다고 가정합니다. 이 경우 메시지 손실을 방지하려면 가장 최근의 활성 브로커를 먼저 다시 시작해야 합니다. 가장 최근의 활성 브로커가 백업 브로커인 경우 먼저 다시 시작하기 위해 이 브로커를 마스터 브로커로 수동으로 재구성해야 합니다.