메인 콘텐츠로 건너뛰기

개요

자가 관리형 ClickHouse(OSS)에서 ClickHouse Cloud로 데이터를 마이그레이션하는 주요 방법은 두 가지입니다.
  • 데이터를 직접 가져오거나 푸시하는 remoteSecure() 함수를 사용하는 방법
  • 클라우드 객체 스토리지를 통해 BACKUP/RESTORE 명령을 사용하는 방법
이 마이그레이션 가이드는 BACKUP/RESTORE 방식에 중점을 두며, 오픈 소스 ClickHouse의 데이터베이스 또는 전체 서비스를 S3 버킷을 통해 ClickHouse Cloud로 마이그레이션하는 실용적인 예시를 제공합니다.
사전 요구 사항
  • Docker가 설치되어 있어야 합니다
  • S3 버킷 및 IAM 사용자가 있어야 합니다
  • 새 ClickHouse Cloud 서비스를 생성할 수 있어야 합니다
이 가이드의 단계를 쉽게 따라 하고 재현할 수 있도록, 2개의 세그먼트와 2개의 레플리카로 구성된 ClickHouse 클러스터용 Docker Compose 레시피 중 하나를 사용합니다.
클러스터 필요이 Backup 메서드에는 ClickHouse 클러스터가 필요합니다. 테이블을 MergeTree 엔진에서 ReplicatedMergeTree로 변환해야 하기 때문입니다. 단일 인스턴스를 실행 중이라면 대신 “remoteSecure()를 사용하여 자가 관리형 ClickHouse와 ClickHouse Cloud 간 마이그레이션”의 단계를 따르십시오.

OSS 준비

먼저 examples 리포지토리의 Docker Compose 구성을 사용해 ClickHouse 클러스터를 구동합니다. 이미 실행 중인 ClickHouse 클러스터가 있다면 클러스터를 구동하는 단계는 건너뛰어도 됩니다.
  1. examples 리포지토리를 로컬 머신에 복제합니다
  2. 터미널에서 examples/docker-compose-recipes/recipes/cluster_2S_2R 디렉터리로 cd합니다
  3. Docker가 실행 중인지 확인한 다음 ClickHouse 클러스터를 시작합니다:
다음과 같이 표시됩니다:
폴더의 루트 디렉터리에서 새 터미널 창을 열고 다음 명령을 실행하여 클러스터의 첫 번째 노드에 연결합니다:

MergeTree 테이블에서 ReplicatedMergeTree 테이블로

ClickHouse Cloud는 SharedMergeTree를 사용합니다. Backup을 복원할 때 ClickHouse는 ReplicatedMergeTree 테이블을 자동으로 SharedMergeTree 테이블로 변환합니다. 클러스터를 실행 중이라면 이미 테이블에서 ReplicatedMergeTree 엔진을 사용하고 있을 가능성이 높습니다. 그렇지 않다면 Backup을 수행하기 전에 MergeTree 테이블을 ReplicatedMergeTree로 변환해야 합니다. MergeTree 테이블을 ReplicatedMergeTree로 변환하는 방법을 보여주기 위해 먼저 MergeTree 테이블로 시작한 다음, 이를 나중에 ReplicatedMergeTree로 변환하겠습니다. 새 샘플 테이블을 생성하고 데이터를 적재하기 위해 New York taxi data guide의 처음 두 단계를 따르겠습니다. 편의를 위해 해당 단계도 아래에 포함되어 있습니다. 다음 명령을 실행하여 새 데이터베이스를 생성하고 S3 버킷의 데이터를 새 테이블에 삽입합니다:
다음 명령을 실행하여 테이블을 DETACH하십시오.
그런 다음 이를 복제된 테이블로 ATTACH합니다:
마지막으로, 레플리카 메타데이터를 복원합니다:
ReplicatedMergeTree로 변환되었는지 확인하세요:
이제 나중에 S3 버킷의 백업을 복원할 수 있도록 Cloud 서비스를 설정할 준비가 되었습니다.

ReplicatedMergeTree를 사용하는 분산 테이블

구성에서 여러 세그먼트에 걸쳐 분산 테이블을 사용하는 경우, 각 노드에 로컬 ReplicatedMergeTree 테이블이 필요하며, 쿼리 진입점 역할을 하는 Distributed 테이블도 필요합니다. 다음 명령을 실행하여 모든 클러스터 노드에 로컬 복제된 테이블을 생성하세요:
그런 다음 이를 기반으로 Distributed 테이블을 생성합니다:
분산 테이블을 통해 데이터를 삽입하세요:

Cloud 준비

데이터를 새 Cloud 서비스로 복원하게 됩니다. 아래 단계에 따라 새 Cloud 서비스를 생성하십시오.
1

Cloud Console 열기

https://console.clickhouse.cloud/로 이동하십시오.
2

새 서비스 생성

3

서비스 구성 및 생성

원하는 리전과 구성을 선택한 다음 Create service를 클릭하십시오.
4

액세스 역할 생성

SQL 콘솔을 여십시오.

S3 액세스 설정

S3에서 백업을 복원하려면 ClickHouse Cloud와 S3 버킷 간에 보안 액세스를 구성해야 합니다.
  1. “Accessing S3 data securely”의 단계에 따라 액세스 역할을 생성하고 역할 ARN을 가져오십시오.
  2. “How to create an S3 bucket and IAM role”에서 생성한 S3 버킷 정책에 이전 단계에서 얻은 역할 ARN을 추가해 업데이트하십시오.
업데이트된 S3 버킷 정책은 다음과 비슷합니다.
이 정책에는 두 ARNs가 모두 포함됩니다.
  • IAM user (docs-s3-user): 자가 관리형 ClickHouse 클러스터가 S3에 백업할 수 있도록 허용합니다.
  • ClickHouse Cloud role (ClickHouseAccess-001): Cloud 서비스가 S3에서 복원할 수 있도록 허용합니다.

Backup 수행하기(자가 관리형 배포)

각 세그먼트는 개별적으로 Backup해야 합니다. 각 세그먼트의 노드에 연결한 후, 세그먼트별로 고유한 대상 경로를 사용해 Backup 명령을 실행하십시오. BUCKET_URL, KEY_ID, SECRET_KEY를 보유한 AWS 자격 증명으로 교체하십시오. 아직 없다면 가이드 “S3 버킷 및 IAM role 생성 방법”에서 이를 준비하는 방법을 확인할 수 있습니다. 세그먼트 1:
세그먼트 2:
모든 것이 올바르게 구성되어 있으면 아래와 유사한 응답이 표시되며 여기에는 Backup에 할당된 고유 ID와 Backup 상태가 포함됩니다.
단일 노드 배포분산 테이블을 사용하지 않는다면, 명령 하나로 전체 데이터베이스를 Backup할 수 있습니다:
이제 앞서 비어 있던 S3 버킷을 확인하면 몇 개의 폴더가 생성된 것을 볼 수 있습니다: 전체 마이그레이션을 수행하는 경우에는, 다음 명령으로 전체 서버를 Backup할 수 있습니다:
위 명령은 다음 항목을 Backup합니다:
  • 모든 사용자 데이터베이스와 테이블
  • 사용자 계정과 비밀번호
  • 역할 및 권한
  • 설정 프로필
  • 행 정책
  • 쿼터
  • 사용자 정의 함수
다른 클라우드 서비스 제공업체(CSP)를 사용하는 경우 TO S3()(AWS와 GCP 모두) 및 TO AzureBlobStorage() 구문을 사용할 수 있습니다. 데이터베이스가 매우 큰 경우 Backup을 백그라운드에서 실행하도록 ASYNC 사용을 고려하십시오:
그런 다음 Backup ID를 사용하여 Backup 진행 상태를 모니터링할 수 있습니다:
증분 Backup도 생성할 수 있습니다. Backup 전반에 대한 자세한 내용은 Backup 및 복원 문서를 참조하십시오.

ClickHouse Cloud로 복원

각 세그먼트의 Backup을 하나씩 순서대로 Cloud 서비스에 복원합니다. ROLE_ARN“S3 데이터에 안전하게 액세스하기”에서 얻은 값으로 설정합니다. 두 번째 복원부터(그리고 그 이후의 모든 복원에서도) 충돌로 실패하지 않고 세그먼트 데이터가 이미 복원된 테이블에 추가되도록 SETTINGS allow_non_empty_tables=true를 사용합니다. 세그먼트 1:
세그먼트 2:
비분산 배포분산 테이블을 사용하지 않는 경우, 단일 명령으로 데이터베이스를 복원할 수 있습니다:
전체 서비스도 비슷한 방식으로 복원할 수 있습니다:
복원이 완료되면 Cloud에서 데이터가 사용 가능한지 확인할 수 있습니다.
ClickHouse Cloud는 내부적으로 SharedMergeTree를 사용하므로 기존 분산 테이블은 더 이상 필요하지 않습니다. 이를 삭제하고, 쿼리에서 기존 테이블 이름을 그대로 사용할 수 있도록 뷰로 대체할 수 있습니다:
분산형이 아닌 ReplicatedMergeTree 테이블은 SharedMergeTree로 복원됩니다:
마지막 수정일 2026년 6월 12일