미러링 사용

이 정보에서는 두 개의 Event Streams Enterprise 클러스터를 미러 쌍으로 설정하는 방법을 설명합니다. 유스 케이스에는 복구, 백업 및 위치 복제가 포함됩니다.

Event Streams 에서 미러링을 포함하는 솔루션을 구축할 때, 솔루션이 다음 두 가지 시나리오를 어떻게 처리할지 고려하십시오

데이터 손실
미러링은 비동기입니다. 즉, 메시지가 대상 클러스터에 미러링되기 전에 소스 클러스터에 성공적으로 생성되어야 합니다. 해당 메시지를 미러링하기 전에 소스 클러스터에서 장애가 발생하는 경우 애플리케이션은 해당 메시지의 손실을 처리해야 합니다.
하나 이상
메시지 중복은 미러링 프로세스에서 발생할 수 있습니다. 소스 클러스터에서 커미트된 이용자 그룹 오프셋은 대상 클러스터의 체크포인트로 변환되지 않을 수 있습니다. 장애 복구 시 이용자는 소스 클러스터에서 이미 이용되고 커미트된 메시지를 재처리해야 할 수 있습니다.

Event Streams 에서 미러링을 사용하면 미러링 용량 단위 시간당 추가 요금이 부과됩니다. 자세한 정보를 보려면 카탈로그 로 이동하여 Event Streams 를 검색하십시오. 그런 다음 가격 책정 플랜을 볼 수 있습니다.

현재, 미러링을 활성화하려면 Event Streams 서비스 인스턴스에서 IBM Cloud CLI를 사용해야 합니다.

CLI를 설치하려면 플러그인을 사용하여 IBM Cloud CLI 확장을 참조하세요.

IBM Cloud CLI는 서비스 인스턴스 업데이트 명령을 사용하여 Event Streams 서비스 인스턴스 리소스를 업데이트합니다.서비스 인스턴스 업데이트 명령을 실행하는 데 사용되는 계정의 사용자 ID에는 리소스를 만들 때 필요한 것과 동일한 액세스 정책이 할당되어야 합니다. 액세스 요구사항에 대한 정보는 리소스 작성을 위한 필수 액세스 를 참조하십시오.

Event Streams 서비스 인스턴스에 대한 미러링을 사용으로 설정하는 데 필요한 시간은 다양하지만 정상적인 상황에서는 2시간을 초과하지 않습니다.

설정

두 개의 Enterprise 요금제 클러스터를 프로비저닝해야 합니다. 두 클러스터 모두 동일한 처리량 및 스토리지 용량이 있어야 하며 서비스 대 서비스 바인딩이 있어야 합니다 (자세한 정보는 2단계 참조).

미러링은 단방향이므로 원하는 미러링 방향을 결정하세요. 하나의 클러스터는 소스이고 다른 클러스터는 대상입니다.

소스 클러스터에서 미러링할 토픽을 결정하십시오. 기본적으로 어떤 주제도 미러링되지 않으며, 4단계에서 설명한 대로 미러링이 활성화된 후 사용자 컨트롤을 사용하여 미러링을 활성화할 수 있습니다. 선택사항을 하나 이상의 패턴으로 지정해야 합니다.

대역폭 요구사항을 고려하십시오. 소스 클러스터에 사용 가능한 대역폭이 충분합니까?소스 클러스터에는 미러링을 실행하기 위한 몇 가지 헤드룸이 필요합니다.클러스터 대역폭 제한에 대한 요금제 선택하기를 참조하고 Event Streams 메트릭을 사용하여 소스 클러스터의 사용량과 미러링을 위한 여유 공간이 있는지 확인합니다.

엔터프라이즈 다중 지역-지역 클러스터에서 엔터프라이즈 단일 지역-지역 클러스터로 또는 그 반대로 미러링하는 것은 허용되지만, 특정 거주 요건이 있고 그 의미를 알고 있는 경우가 아니라면 이 구성을 권장하지 않습니다. 엔터프라이즈 다중 지역 클러스터와 엔터프라이즈 단일 지역 클러스터 간의 SLA(서비스 수준 협약) 정책은 더 낮을 수도 있고, 그 반대일 수도 있습니다.

서비스 간 바인딩 사용

두 인스턴스가 모두 통신할 수 있도록 두 인스턴스 간에 서비스 대 서비스 바인딩을 구성해야 합니다. 구성하려면 다음 단계를 완료하십시오.

서비스 간 바인딩을 만들 때 IAM은 Event Streams 과 반대되는 방식으로 '소스' 및 '대상'이라는 용어를 사용합니다. IAM 소스 계정에 Event Streams 미러링 대상 인스턴스가 포함되어 있고 그 반대의 경우도 마찬가지입니다.

  1. Event Streams 미러링 소스 서비스 인스턴스를 포함하는 IBM Cloud 계정을 선택하십시오.
  2. IAM에서 권한 패널로 이동하여 작성을 클릭하십시오.
  3. 소스 섹션의 경우:
    • 다른 계정의 대상 인스턴스에 미러링하는 경우, 소스 제목 아래의 "다른 계정"을 선택한 다음, 미러링 대상 인스턴스가 포함된 계정을 선택합니다. 동일한 계정의 서비스 인스턴스 간에 미러링을 수행하는 경우 "이 계정" 의 기본값을 선택된 상태로 둘 수 있습니다.
    • 미러링 대상 Event Streams 인스턴스를 IAM 소스 서비스 인스턴스로 선택하십시오.
  4. 대상 선택사항의 경우 미러링 소스 Event Streams 인스턴스를 IAM 대상 서비스 인스턴스로 선택하십시오.
  5. 리더 역할을 할당하고 승인을 클릭합니다.

요구 사항이 장애 복구인 경우 반대 방향으로 서비스 간 바인딩도 필요합니다.

다음 예제는 명령행을 사용하여 서비스 대 서비스 바인딩을 구성하는 방법을 보여줍니다.

  1. 미러링 소스 인스턴스로 작동하려는 Event Streams 인스턴스가 포함된 IBM Cloud® 계정에 로그인합니다:

    ibmcloud login -c <account containing mirroring source instance>
    
  2. 다음과 같이 권한 부여 정책을 설정하십시오

    ibmcloud iam authorization-policy-create messagehub messagehub Reader --source-service-instance-id <instance id of the mirroring target cluster> [--source-service-account <account containing mirroring target instance>] --target-service-instance-id <instance id of the mirroring source cluster>
    

    동일한 IBM Cloud 계정에서 두 개의 Event Streams 인스턴스 사이에 미러링을 설정하는 경우, 미러링 옵션( --source-service-account )은 생략할 수 있습니다.

서비스 간 바인딩에 대한 자세한 내용은 권한 관리 패널권한을 사용하여 서비스 간 액세스 권한을 부여하기를 참조하세요.

미러링을 활성화하고 미러링할 주제를 선택합니다

미러링을 활성화하려면, service-instance-update 다음과 같은 필수 매개 변수를 사용하여 CLI를 사용하여 대상 클러스터에 대한 명령을 실행하십시오

미러링을 활성화할 때 필요한 매개 변수
필수 매개변수 설명
소스 crn 미러링할 소스 클러스터의 crn
소스 별명 소스 클러스터에 사용되는 별명
대상 별명 대상 클러스터에 사용되는 별명
  • source_crn 는 다음과 같은 형식입니다: crn:v1:bluemix:public:messagehub:us-south:a/aaa:aaaa::
  • source_aliastarget_alias 은 미러링을 사용으로 설정할 때 두 서비스 인스턴스 각각에 대해 구성할 별명입니다. 별명은 토픽 이름에 표시됩니다. 짧고 설명적인 이름을 선택하십시오. 예를 들어 "us-south"와 "us-east"입니다.

CLI 명령 예제

ibmcloud resource service-instance-update "Event Streams resource instance name" -p '{"mirroring":{"source_crn":"<source_crn>", "source_alias":"<source_alias>", "target_alias":"<target_alias>"}}'

미러링할 주제를 선택하세요

서비스 인스턴스 업데이트가 완료되면, 소스에서 대상 클러스터로 미러링할 주제를 선택해야 합니다. 이 작업은 CLI에서 'ibmcloud es mirroring-topic-selection-set' 명령을 사용하여 수행됩니다. 선택된 주제에서 소비하는 데 익숙한 소비자 그룹은 소스에서 대상 클러스터로 미러링됩니다. 주제 선택사항은 정규식 패턴 또는 쉼표로 구분된 해당 패턴 목록의 양식입니다.

다음 명령은 미러링할 모든 주제를 선택합니다.

ibmcloud es mirroring-topic-selection-set --select '.*'

다음과 같이 미러링할 주제를 나열하여 주제를 선택할 수 있습니다.

ibmcloud es mirroring-topic-selection-set --select topic1,topic2,topic3

선택사항 작성에 대한 자세한 정보는 사용자 제어 미러링 을 참조하십시오.

주제 선택이 완료되면, 대상 클러스터는 소스 클러스터의 별칭이 붙은 미러링 사용자 컨트롤을 사용하여 미러링을 위해 선택된 주제를 표시합니다.

단계 3.1: (주제 및 그룹 이름 변환) 주제 및 그룹 이름이 어떻게 변환되는지 지정

변환 규칙을 지정하여 대상 클러스터에서 다른 이름으로 데이터를 토픽으로 미러링할 수 있습니다. 다음의 세 가지 시나리오에서는 가능한 변형에 대해 설명하고, 각각의 사용 사례를 설명합니다.

미러링이 활성화된 후에는 언제든지 미러링되는 주제 또는 소비자 그룹을 지정할 수 있지만, 주제 또는 그룹 변환은 미러링이 활성화된 시점에만 가능합니다. 미러링이 이미 활성화되어 있는 경우, 주제 또는 그룹 변환을 지정하기 위해 후속 활성화 요청을 하기 전에 먼저 미러링을 비활성화해야 합니다.

시나리오 1: 이전 접두사 또는 접미사를 제거하고 새로운 접두사 또는 접미사를 추가하여 주제를 변환

다음 네 가지 추가 매개변수를 구성합니다.

| 주제 이름 바꾸기에 필요한 필수 매개변수 | 설명 | 설명 | -- | -- | | 제거_접두사 | 소스 클러스터의 토픽 이름에서 제거할 접두사입니다. | | remove_suffix | 소스 클러스터의 토픽 이름에서 제거할 접미사입니다. | | 추가_접두사 | 대상 클러스터의 토픽 이름에 추가할 접두사입니다. | | 추가_접미사 | 대상 클러스터의 토픽 이름에 추가할 접미사입니다. |

ibmcloud resource service-instance-update 명령은 -p 명령행 인수를 통해 지정되어야 합니다. 이 옵션이 지정되면, 일치하는 접두사 또는 접미사를 가진 주제만 미러링 대상이 됩니다. 예를 들어, app1-remove_prefix 를 가지고 있고, 주제 선택을 abc.* 로 지정하면, app1-abc 로 시작하는 주제만 미러링됩니다.

"이름 변경" 유형의 변환을 지정하고 " add_prefix " 또는 " add_suffix "에 대한 매개변수를 지정하지 않으면 대상 클러스터의 미러링된 토픽에서 이러한 매개변수가 제거됩니다. 주제 패턴은 주제 이름에 소스 접두사 또는 접미사가 제거된 후, 접두사 또는 접미사가 추가되기 전에 적용됩니다.

다음 CLI 명령어 예시를 참조하세요:

{
  "mirroring": {
    "source_crn": "crn:v1:...",
    "source_alias": "source",
    "target_alias": "target",
    "options": {
      "topic_name_transform": {
        "type": "rename",
        "rename": {
          "add_prefix": "newprefix-",
          "remove_prefix": "oldprefix-",
          "add_suffix": "-newsuffix",
          "remove_suffix": "-oldsuffix"
        }
      }
    }
  }
}

시나리오 2: 미러링된 주제에 접미사로 소스 별칭 추가하기

Topic_name_transform 유형을 use_alias 설정하여 주제 이름 변환을 적용합니다. 이 구성을 사용하면 구성에 지정된 소스 별칭이 source 소스 클러스터에서 app1-topic 토픽이 대상 클러스터에서 app1-topic.source 토픽에 미러링됩니다.

다음 CLI 명령어 예시를 참조하세요:

{
  "mirroring": {
    "source_crn": "crn:v1:...",
    "source_alias": "source",
    "target_alias": "target",
    "options": {
        "topic_name_transform": {
            "type": "use_alias"
      }
    }
  }
}

시나리오 3: 토픽 이름이 변경되지 않은 상태로 미러링됨

topic_name_transform 이 시나리오에서는 유형을 none 로 설정하여 '완료된 작업'을 적용합니다. app1-topic 이 구성을 사용하면 소스 클러스터의 주제가 대상 클러스터의 app1-topic 라는 주제로 미러링됩니다.

다음 CLI 명령어 예시를 참조하세요:

{
  "mirroring": {
    "source_crn": "crn:v1:...",
    "source_alias": "source",
    "target_alias": "target",
    "options": {
        "topic_name_transform": {
            "type": "none"
      }
    }
  }
}

단계 3.2: 해당 소비자 그룹 ID 변환

기본적으로, 미러 메이커는 대상 클러스터에 미러링할 때 소비자 그룹 ID를 수정하지 않습니다. 그러나, Event Streams 를 사용하면 다음 두 가지 시나리오에서 설명한 것처럼 그룹 ID의 데이터를 수정할 수 있습니다. 주제와 마찬가지로, 그룹 ID 패턴은 소스 접두사 또는 접미사를 제거한 후, 접두사 또는 접미사를 추가하기 전에 적용됩니다. "이름 변경" 유형의 변환을 지정하고 " add_prefix " 또는 " add_suffix "에 대한 매개변수를 지정하지 않으면, 대상 클러스터의 미러링된 그룹 ID에서 이러한 매개변수가 제거됩니다.

ibmcloud resource service-instance-update 명령은 -p 명령행 인수를 통해 지정되어야 합니다.

시나리오 1: 이전 접두사 또는 접미사를 제거하고 새로운 접두사 또는 접미사를 추가하여 그룹 ID를 변환합니다

다음 네 가지 추가 매개변수를 구성합니다.

| 그룹 ID 이름 변경에 필요한 필수 매개변수 | 설명 | 설명 | -- | -- | | 제거_접두사 | 소스 클러스터의 그룹 ID에서 제거할 접두사입니다. | | remove_suffix | 소스 클러스터의 그룹 ID에서 제거할 접미사입니다. | | 추가_접두사 | 대상 클러스터의 그룹 ID에 추가할 접두사입니다. | | 추가_접미사 | 대상 클러스터의 그룹 ID에 추가할 접미사입니다. |

이 옵션이 지정되면, 일치하는 접두사 또는 접미사를 가진 그룹 ID만 미러링 대상이 됩니다. remove_prefix 예를 들어, 소스 클러스터의 aaaadd_prefixbbb 이고, 대상 클러스터의 bbb-group-id 가 인 경우, 소스 클러스터에서 aaa-group-id 로 시작하는 소비자 그룹이 대상 클러스터의 로 미러링됩니다.

다음 CLI 명령어 예시를 참조하세요:

{
  "group_id_transform": {
    "type": "rename",
    "rename": {
       "add_prefix": "newprefix-",
       "remove_prefix": "oldprefix-",
       "add_suffix": "-newsuffix",
       "remove_suffix": "-oldsuffix"
    }
  }
}

시나리오 2: 소비자 그룹 ID가 미러링되고 이름은 변경되지 않음

topic_name_transform 이 시나리오에서는 유형을 none 로 설정하여 '완료된 작업'을 적용합니다. aaa-group-id 이 구성을 사용하면 소스 클러스터의 주제가 대상 클러스터의 aaa-group-id 라는 주제로 미러링됩니다.

다음 CLI 명령어 예시를 참조하세요:

"group_id_transform": {
  "type": "none"
}

스키마 마이그레이션 접근 방식 Event Streams

Event Streams 는 스키마 마이그레이션에 대한 두 가지 접근 방식을 제공하며, 각각 다른 전략을 활용합니다.

  1. 일괄 스키마 가져오기/내보내기 도구: 이 방법은 스키마 ID를 소스 클러스터에 있는 그대로 보존합니다. 소스 클러스터와 대상 클러스터 간에 변환이 발생하지 않는 경우 또는 스키마 호환성을 엔드 투 엔드로 유지해야 하는 간단한 리프트 앤 시프트 시나리오에 이 접근 방식을 사용하세요. 자세한 내용은 다른 스키마 레지스트리에서 데이터 가져오기를 참조하세요.

  2. ID 변환을 통한 미러링을 통한 스키마 동기화. 아래에 설명된 이 방법은 소스에서 대상 클러스터로 마이그레이션하는 동안 스키마 ID를 변환합니다. 단계적 마이그레이션 또는 변환이 필요한 경우 이 접근 방식을 사용합니다. 이 방법을 사용하면 레지스트리 클러스터 간에 스키마가 동기화되므로 대상 클러스터의 소비자는 메시지를 즉시 읽을 수 있습니다. 또한 나중에 마이그레이션할 수 있는 스키마와 ID 충돌의 위험 없이 새 스키마를 등록할 수 있습니다.

ID 변환을 통한 미러링을 통한 스키마 동기화

미러링을 통한 스키마 동기화는 한 인스턴스에서 다른 인스턴스로 스키마 레지스트리 요청을 전달하는 방식으로 작동합니다. 대상 스키마 레지스트리가 특수한 '미러링 모드'로 작동하여 스키마 관련 요청을 소스 레지스트리에 투명하게 프록시하고 필요에 따라 ID 변환을 적용하므로 사용자는 대상 인스턴스를 통해 소스 인스턴스에서 읽고 쓸 수 있습니다. 이 접근 방식은 인스턴스 간 데이터 액세스를 간소화하고 환경 전반에서 원활한 스키마 동기화를 지원합니다.

주의 사항

미러링을 사용하여 스키마를 동기화하기 전에 다음 주의 사항을 검토하세요:

  1. 두 레지스트리 간에 스키마를 대량으로 내보내고 가져오는 동안 유지 관리 기간이 필요하며, 이 기간은 몇 시간 이내로 소요됩니다.
  2. 토픽 이름 바꾸기가 작동하려면 스키마가 Confluent Avro Serdes를 사용해야 하므로 토픽 이름에서 주제를 파생할 수 있습니다. Confluent 스키마와 연관된 주제가 주제 이름에서 파생될 수 있기 때문입니다(예: 주제 및 주제/기록 주제 명명 전략의 경우).
  3. S2S 인증 미러링은 중단되지 않아야 하며, s2s 인증 또는 미러링을 비활성화하면 스키마 레지스트리 요청이 전달되지 않습니다.
  4. 변환이 필요한 경우 마이그레이션을 수행하기 전에 대상 인스턴스 스키마 레지스트리를 주제 이름 바꾸기 규칙으로 구성해야 합니다.
  5. 마이그레이션이 완료될 때까지 이름 바꾸기 규칙은 변경할 수 없습니다. 마이그레이션 중에 변경하면 레지스트리 간에 불일치가 발생할 수 있습니다.

지시사항

다음 지침에서는 스키마 레지스트리 미러링을 사용하여 두 인스턴스 간에 스키마를 이동하는 방법을 간략하게 설명합니다.

내보내기 유틸리티는 아직 CLI에 추가되지 않았습니다.

허용된 스키마 값

| 값 | 설명 | 설명 | -- | -- | | 프록시 | 요청이 대상 인스턴스에서 소스 인스턴스로 전달됩니다. | | 읽기 전용 | 리더 IAM 역할이 필요한 요청이 허용됩니다. 나머지는 모두 거부되었습니다(403). | | 비활성/생략됨 | 요청 전달이 비활성화되었습니다. 기본값입니다. |

요청 예제

다음 CLI 명령어 예시를 참조하세요:

ibmcloud resource service-instance-update \
"trgt-instance-name" \
-p '{
"mirroring": {
"source_crn": "<src instance crn>",
"source_alias": "source",
"target_alias": "target",
"schemas": "proxied"
}
}'

주제 이름 변환

전달 중에 토픽 이름을 변경할 수 있습니다. 예를 들어 올바른 규칙을 사용하면 old-my-topicnew-my-topic 이 될 수 있습니다. 이 기능을 활성화하면 소스 인스턴스는 원래 이름만 인식하고 대상 인스턴스는 새 (변환된) 토픽 이름만 인식합니다. 반환된 모든 결과는 그에 따라 변환됩니다.

변환 규칙을 제공하지 않으면 Event Streams 의 기존 미러링 동작에 따라 use_alias 이 사용됩니다. 주제 이름을 변경하지 않고 전달하려면 topic_name_transform 유형 none 을 사용합니다. 변환은 기존 CLI 변환 필드를 사용하여 구성합니다.

마이그레이션 흐름

두 개의 Event Streams 인스턴스 간에 마이그레이션하는 경우 다음과 같은 흐름이 권장됩니다.

  1. schemas: proxied 을 지정하여 두 인스턴스 간에 미러링을 사용하도록 설정합니다.
  2. 대상 스키마 레지스트리를 사용하도록 애플리케이션을 업데이트하세요.
  3. schemas: read-only 으로 전환하여 대상 레지스트리에 대한 모든 쓰기를 차단합니다. 이 변경을 수행하기 전에 미러링을 일시적으로 비활성화해야 합니다.
  4. 소스 인스턴스에서 모든 스키마를 내보냅니다.
  5. 소스 인스턴스에서 내보낸 모든 스키마를 대상으로 가져옵니다. IBM Cloud® CLI를 사용하여 수행할 수 있습니다: ibmcloud [...].
  6. 미러링을 비활성화합니다.

스키마 내보내기

자세한 내용은 Confluent 문서를 참조하세요.

Event Streams CLI에서는 스키마 가져오기에 v1 exportVersion 값이 있어야 합니다.

  1. 최신 v2.x.x 소스 코드를 다운로드하세요(예: https://github.com/Apicurio/apicurio-registry/archive/refs/tags/2.6.13.Final.zip ).

  2. 내보내기 클라이언트 빌드: mvn -pl utils/exportConfluent -am -DskipTests -Pprod package.

  3. 내보내기를 실행합니다( confluent-schema-registry-export.zip )에 출력을 저장합니다:

    java -jar utils/exportConfluent/target/apicurio-registry-utils-exportConfluent-2.6.13.Final.jar \
    "https://token:<password>@<my-event-streams-instance.com>/confluent" \
    --client-props basic.auth.credentials.source=URL
    

스키마 가져오기

스키마는 Event Streams CLI를 사용하여 가져올 수 있습니다.

  1. event-streams[es] 플러그인이 설치되어 있는지 확인: ibmcloud plugin list.

  2. 로그인 IBM Cloud®: ibmcloud login [...].

  3. 가져오려는 Event Streams 인스턴스를 초기화합니다: ibmcloud es init.

  4. 스키마를 가져옵니다:

    ibmcloud es schema-import \
    -f confluent-schema-registry-export.zip
    

유효성 검증

다음 명령을 실행하여 현재 서비스 인스턴스 정보를 얻을 수 있습니다:

ibmcloud resource service-instance "Event Streams resource instance name" --output=json

출력의 마지막 작업 섹션을 검토합니다.정보는 업데이트가 진행됨에 따라 지속적으로 업데이트됩니다. 미러링 활성화 과정이 완료되면, 마지막 작업 정보에 업데이트가 성공했는지, 동기화가 성공했는지가 표시됩니다.

"last_operation": {
  "type": "update",
  "state": "in progress",
  "description": "Update in progress.",
  "updated_at": null,
  "cancelable": false
}

다음과 같이 성공이 표시될 때까지 명령을 다시 실행합니다:

"last_operation": {
  "type": "update",
  "state": "succeeded",
  "description": "Update succeeded.",
  "updated_at": null,
  "cancelable": false
}

IBM Cloud Monitoring 대시보드 Event Streams 미러링에는 미러링 상태가 표시됩니다.