클러스터 레벨 장애 조치

클러스터 레벨 장애 조치 (Cluster-level failover)

클러스터 레벨 장애 조치(failover)는 일차(primary) 클러스터에 문제가 생겼을 때 Pulsar 클라이언트를 백업(backup) 클러스터로 자동 또는 수동으로 전환하는 기능이에요. 개념, 혜택, 사용 사례, 제약, 사용법, 동작 원리에 대한 자세한 내용은 클러스터 레벨 장애 조치 개념을 참고하세요.

  • 클러스터가 모든 가능한 결과를 처리할 충분한 리소스를 포함할 때만 클러스터 레벨 장애 조치를 구성해야 해요. 백업 클러스터의 워크로드 강도가 크게 증가할 수 있어요.
  • 클러스터를 무정전 전원 장치(UPS)에 연결해 예상치 못한 전원 손실의 위험을 줄이세요.

출처: 문서

본문

클러스터 레벨 장애 조치에 대한 개념, 혜택, 사용 사례, 제약, 사용법, 동작 원리를 포함한 자세한 내용은 클러스터 레벨 장애 조치 개념을 참고하세요.

  • 클러스터가 모든 가능한 결과를 처리할 충분한 리소스를 포함할 때만 클러스터 레벨 장애 조치를 구성해야 해요. 백업 클러스터의 워크로드 강도가 크게 증가할 수 있어요.
  • 클러스터를 무정전 전원 장치(UPS)에 연결해 예상치 못한 전원 손실의 위험을 줄이세요.

사전 요구사항 (Prerequisites)

  • Pulsar Java 클라이언트 2.10 이상 버전.
  • 백업 클러스터의 경우: BookKeeper 노드 수가 ensemble quorum보다 크거나 같아야 해요. ZooKeeper 노드 수는 3 이상이어야 해요.
  • 데이터 손실을 방지하려면 일차 클러스터와 의존 클러스터 사이(primary→backup 또는 backup→backup)에 지리적 복제(geo-replication)를 켜세요.
  • 복제된 서브스크립션(replicated subscription)을 활성화하세요.

클러스터 레벨 장애 조치 구성 (Configure cluster-level failover)

자동 장애 조치 (Automatic failover)

자동 클러스터 레벨 장애 조치를 사용하도록 Java Pulsar 클라이언트를 구성하는 예시예요. 전환(switchover)은 자동으로 트리거돼요.

private PulsarClient getAutoFailoverClient() throws PulsarClientException {
    String primaryUrl = "pulsar+ssl://localhost:6651";
    String secondaryUrl = "pulsar+ssl://localhost:6661";
    String primaryTlsTrustCertsFilePath = "primary/path";
    String secondaryTlsTrustCertsFilePath = "secondary/path";
    Authentication primaryAuthentication = AuthenticationFactory.create(
        "org.apache.pulsar.client.impl.auth.AuthenticationTls",
        "tlsCertFile:/path/to/primary-my-role.cert.pem,"
                + "tlsKeyFile:/path/to/primary-role.key-pk8.pem");
    Authentication secondaryAuthentication = AuthenticationFactory.create(
        "org.apache.pulsar.client.impl.auth.AuthenticationTls",
        "tlsCertFile:/path/to/secondary-my-role.cert.pem,"
                + "tlsKeyFile:/path/to/secondary-role.key-pk8.pem");

    // You can put more failover cluster config in to map
    Map<String, String> secondaryTlsTrustCertsFilePaths = new HashMap<>();
    secondaryTlsTrustCertsFilePaths.put(secondaryUrl, secondaryTlsTrustCertsFilePath);
    Map<String, Authentication> secondaryAuthentications = new HashMap<>();
    secondaryAuthentications.put(secondaryUrl, secondaryAuthentication);
    ServiceUrlProvider failover = AutoClusterFailover.builder()
        .primary(primaryUrl)
        .secondary(List.of(secondaryUrl))
        .failoverDelay(30, TimeUnit.SECONDS)
        .switchBackDelay(60, TimeUnit.SECONDS)
        .checkInterval(1000, TimeUnit.MILLISECONDS)
        .secondaryTlsTrustCertsFilePath(secondaryTlsTrustCertsFilePaths)
        .secondaryAuthentication(secondaryAuthentications)
        .build();

    PulsarClient pulsarClient = PulsarClient.builder()
        .serviceUrlProvider(failover)
        .authentication(primaryAuthentication)
        .tlsTrustCertsFilePath(primaryTlsTrustCertsFilePath)
        .build();

    return pulsarClient;
}

다음 파라미터를 구성하세요.

파라미터 기본값 필수? 설명
primary N/A 일차 클러스터의 서비스 URL.
secondary N/A 하나 또는 여러 백업 클러스터의 서비스 URL. 쉼표로 구분된 목록으로 여러 백업 클러스터를 지정할 수 있어요. 참고: 백업 클러스터는 목록에 표시된 순서대로 선택돼요. 모든 백업 클러스터를 사용할 수 있다면, Pulsar 클라이언트는 첫 번째 백업 클러스터를 선택해요.
failoverDelay N/A Pulsar 클라이언트가 일차 클러스터에서 백업 클러스터로 전환하기 전의 지연. 자동 장애 조치는 프로브(probe) 작업으로 제어돼요. 1) 프로브 작업은 먼저 일차 클러스터의 상태를 확인해요. 2) 프로브 작업이 일차 클러스터의 연속 실패 시간이 failoverDelayMs를 초과하는 것을 발견하면, Pulsar 클라이언트를 백업 클러스터로 전환해요.
switchBackDelay N/A Pulsar 클라이언트가 백업 클러스터에서 일차 클러스터로 전환하기 전의 지연. 자동 장애 조치 전환은 프로브 작업으로 제어돼요. 1) Pulsar 클라이언트가 일차에서 백업으로 전환한 후, 프로브 작업은 일차 클러스터의 상태를 계속 확인해요. 2) 일차 클러스터가 잘 동작하고 switchBackDelay보다 오래 연속으로 활성 상태를 유지하면, Pulsar 클라이언트는 일차 클러스터로 다시 전환해요.
checkInterval 30s 아니요 프로브 작업을 수행하는 빈도(초 단위).
secondaryTlsTrustCertsFilePath N/A 아니요 백업 클러스터의 신뢰된 TLS 인증서 파일 경로.
secondaryAuthentication N/A 아니요 백업 클러스터의 인증.

제어된 장애 조치 (Controlled failover)

제어된 클러스터 레벨 장애 조치를 사용하도록 Java Pulsar 클라이언트를 구성하는 예시예요. 전환은 관리자가 수동으로 트리거해요. 하나 또는 여러 백업 클러스터를 가질 수 있지만 오직 하나만 지정할 수 있어요.

public PulsarClient getControlledFailoverClient() throws IOException {
    Map<String, String> header = new HashMap();
    header.put("service_user_id", "my-user");
    header.put("service_password", "tiger");
    header.put("clusterA", "tokenA");
    header.put("clusterB", "tokenB");

    ServiceUrlProvider provider =
            ControlledClusterFailover.builder()
                    .defaultServiceUrl("pulsar://localhost:6650")
                    .checkInterval(1, TimeUnit.MINUTES)
                    .urlProvider("http://localhost:8080/test")
                    .urlProviderHeader(header)
                    .build();

    PulsarClient pulsarClient =
            PulsarClient.builder()
                    .serviceUrlProvider(provider)
                    .build();

    return pulsarClient;
}
파라미터 기본값 필수? 설명
defaultServiceUrl N/A Pulsar 서비스 URL.
checkInterval 30s 아니요 프로브 작업을 수행하는 빈도(초 단위).
urlProvider N/A URL 제공자(provider) 서비스.
urlProviderHeader N/A 아니요 urlProviderHeader는 토큰과 자격 증명을 포함하는 맵이에요. Pulsar 클라이언트와 일차·백업 클러스터 사이에 인증 또는 인가를 활성화했다면 urlProviderHeader를 제공해야 해요.

urlProviderHeader가 어떻게 동작하는지 예시를 보여드릴게요. Pulsar 클라이언트 1을 클러스터 A에 연결한다고 가정해요.

  • Pulsar 클라이언트 1이 URL 제공자 서비스에 토큰 t1을 보내요.
  • URL 제공자 서비스가 자격 증명 c1과 클러스터 A URL을 Pulsar 클라이언트에 반환해요. URL 제공자 서비스는 모든 토큰과 자격 증명을 관리해요. 서로 다른 토큰과 서로 다른 대상 클러스터 URL에 따라 서로 다른 자격 증명을 서로 다른 Pulsar 클라이언트에 반환해요.

참고: 자격 증명은 JSON 파일에 있어야 하고 아래와 같은 파라미터를 포함해야 해요.

{
  "serviceUrl": "pulsar+ssl://target:6651",
  "tlsTrustCertsFilePath": "/security/ca.cert.pem",
  "authPluginClassName": "org.apache.pulsar.client.impl.auth.AuthenticationTls",
  "authParamsString": "\"tlsCertFile\": \"/security/client.cert.pem\" \"tlsKeyFile\": \"/security/client-pk8.pem\""
}
  • Pulsar 클라이언트 1이 자격 증명 c1을 사용해 클러스터 A에 연결해요.

더 알아보기 (Learn more)