-
반응형
- 목차
들어가며.
이번 글에서는 Altinity clickhouse-backup 이미지를 기반으로 ClickHouse 의 MergeTree 테이블을 Backup 하는 방법에 대해서 알아봅니다.
https://hub.docker.com/r/altinity/clickhouse-backup
https://hub.docker.com/r/altinity/clickhouse-backup
hub.docker.com
https://github.com/Altinity/clickhouse-backup
GitHub - Altinity/clickhouse-backup: Tool for easy backup and restore for ClickHouse® using object storage for backup files.
Tool for easy backup and restore for ClickHouse® using object storage for backup files. - GitHub - Altinity/clickhouse-backup: Tool for easy backup and restore for ClickHouse® using object storage...
github.com
ClickHouse 환경 세팅.
먼저 ClickHouse 환경을 먼저 세팅해보도록 하겠습니다.
아래의 명령어는 ClickHouse Server 를 1개를 실행하기 위한 도커 명령어입니다.
ClickHouse Container 뿐만 아니라 docker network 와 volume 도 함께 생성 후 바인딩합니다.
docker network create clickhouse docker volume create clickhouse docker run -d --platform linux/amd64 \ --name clickhouse \ --hostname clickhouse \ --network clickhouse \ --volume clickhouse:/var/lib/clickhouse \ altinity/clickhouse-server:22.3.8.40.altinitystable
그리고 Backup 데이터를 보관할 원격 저장소인 MinIO 로 함께 실행합니다.
docker run --name minio -d \ --network clickhouse \ -e MINIO_ROOT_USER=ROOTUSER -e MINIO_ROOT_PASSWORD=123456789 \ -p 9000:9000 -p 9001:9001 \ bitnami/minio
docker exec minio \ bash -c ' mc alias set ch-backup http://localhost:9000 ROOTUSER 123456789 && \ mc mb ch-backup/clickhouse '
생성된 ClickHouse 와 MinIO 의 컨테이너들은 아래와 같이 표현됩니다.
MergeTree Engine Table 생성하기.
이제 Backup 을 수행할 MergeTree Table 을 생성합니다.
Table Create DDL 은 아래와 같습니다.
CREATE TABLE default.products_local ( id UInt64, name String, price Float64, created_at DateTime ) ENGINE = MergeTree() ORDER BY id PARTITION BY toYYYYMM(created_at);
그리고 아래와 같이 3개의 데이터를 생성합니다.
INSERT INTO default.products_local VALUES (1, 'Product A', 10.0, '2023-01-01 15:00:00'), (2, 'Product B', 20.0, '2023-02-01 15:00:00'), (3, 'Product C', 30.0, '2023-03-01 15:00:00');
clickhouse-backup 실행하기.
altinity/clickhouse-backup 이미지를 기반으로 Backup 을 수행합니다.
Backup 을 위해서 실행 중인 ClickHouse Server 의 Disk 에 접근이 허용되어야 합니다.
clickhouse-backup 컨테이너는 ClickHouse Server 에 바인딩된 Volume 를 공유하여 ClickHouse Server 의 파일시스템에 접근합니다.
이러한 방식으로 Part 파일들에 접근할 수 있고, 생성된 Part 파일들을 백업할 수 있습니다.
cat <<'EOF'> /tmp/config.yml general: remote_storage: s3 clickhouse: host: clickhouse port: 9000 username: "" password: "" database: "default" sync_replicated_tables: true log_sql_queries: false timeout: 5m data_path: '/var/lib/clickhouse' s3: access_key: "ROOTUSER" secret_key: "123456789" bucket: "clickhouse" endpoint: "http://minio:9000" path: clickhouse region: "us-east-1" force_path_style: true EOF
docker run -it --rm -u clickhouse \ --network clickhouse \ --platform linux/amd64 \ --mount type=bind,source=/tmp/config.yml,target=/etc/clickhouse-backup/config.yml \ -v "clickhouse:/var/lib/clickhouse" \ altinity/clickhouse-backup:2.6.5 bash -c 'clickhouse-backup create backup && clickhouse-backup upload backup'
아래의 이미지는 MinIO 에 추가된 ClickHouse Backup 파일들의 목록입니다.
이는 실제 생성된 3개의 Part 파일들이 백업되고 저장된 결과입니다.
새로운 ClickHouse Server 에 Restore.
마지막으로 새로운 ClickHouse Server 를 실행하여 Backup 된 스냅샷을 복원해보겠습니다.
clickhouse-2 라는 이름의 Volume 과 Container 를 생성합니다.
docker volume create clickhouse-2 docker run -d --platform linux/amd64 \ --name clickhouse-2 \ --hostname clickhouse-2 \ --network clickhouse \ --volume clickhouse-2:/var/lib/clickhouse \ altinity/clickhouse-server:22.3.8.40.altinitystable
그리고 Restore 실행이 필요합니다.
Restore 를 위한 명령어는 아래와 같습니다.
config.yml 의 ClickHouse Network 설정은 새로 생성된 clickhouse-2 에 맞추어 설정합니다.
그리고 새로운 clickhouse-2 의 Volume 은 Restore 를 수행할 Docker Container 에 바인딩합니다.
cat <<'EOF'> /tmp/config.yml general: remote_storage: s3 clickhouse: host: clickhouse-2 port: 9000 username: "" password: "" database: "default" sync_replicated_tables: true log_sql_queries: false timeout: 5m data_path: '/var/lib/clickhouse' s3: access_key: "ROOTUSER" secret_key: "123456789" bucket: "clickhouse" endpoint: "http://minio:9000" path: clickhouse region: "us-east-1" force_path_style: true EOF docker run -it --rm -u clickhouse \ --network clickhouse \ --platform linux/amd64 \ --mount type=bind,source=/tmp/config.yml,target=/etc/clickhouse-backup/config.yml \ -v "clickhouse-2:/var/lib/clickhouse" \ altinity/clickhouse-backup:2.6.5 bash -c 'clickhouse-backup download backup && clickhouse-backup restore backup'
Restore 이후에 아래와 같이 복원된 결과를 확인할 수 있습니다.
docker exec clickhouse-2 \ clickhouse-client --query="select * from default.products_local;"
반응형'Database > Clickhouse' 카테고리의 다른 글
[ClickHouse] Multi Sharding 구현하기 ( Docker, Shards ) (0) 2024.02.17 [Clickhouse] Shard & Replica Cluster 구성하기 (0) 2024.02.14 [ClickHouse] Compact Wide Parts 알아보기 ( part_type ) (0) 2024.01.16 [ClickHouse] Block 알아보기 (0) 2024.01.10 [ClickHouse config.xml] listen_try 알아보기 (0) 2024.01.02