В процесі використання ClickHouse стало питання резервного копіювання та відновлення. Як то кажуть резервних копій багато не буває, тому крім aws volume snapshots потрібно налаштувати додатковий варіант. В ClickHouse для цього варіантів не багато, зручним вважаю використовувати чудовий інструмент як clickhouse-backup.
Підготовка
Для початку необхідно встановити його, подивитися останні версії можемо тут. Обираємо необхідний пакет або тип встановлення який зручніший для Вас. В моєму випадку буду встановлювати з rpm пакету на AMAZON Linux2. Завантажуємо на сервер ClickHouse використовуючи wget:
[root@clickhouse: ~]# wget https://github.com/AlexAkulov/clickhouse-backup/releases/download/v1.3.1/clickhouse-backup-1.3.1-1.x86_64.rpm
Далі потрібно налаштувати утиліту clickhouse-backup. Після встановлення створилась директорія /etc/clickhouse-backup/ в якій розташований приклад конфігураційного файлу config.yml.example, прочитаємо його використовуючи cat або самою утилітою яка роздрукує конфігурацію за замовчуванням:
[root@clickhouse: ~]# clickhouse-backup default-config
general:
remote_storage: none
max_file_size: 1073741824
disable_progress_bar: true
backups_to_keep_local: 0
backups_to_keep_remote: 0
log_level: info
allow_empty_backups: false
download_concurrency: 1
upload_concurrency: 1
restore_schema_on_cluster: ""
upload_by_part: true
download_by_part: true
clickhouse:
username: default
password: ""
host: localhost
port: 9000
disk_mapping: {}
skip_tables:
- system.*
- INFORMATION_SCHEMA.*
- information_schema.*
timeout: 5m
freeze_by_part: false
secure: false
skip_verify: false
sync_replicated_tables: false
log_sql_queries: false
config_dir: /etc/clickhouse-server/
restart_command: systemctl restart clickhouse-server
ignore_not_exists_error_during_freeze: true
debug: false
s3:
access_key: ""
secret_key: ""
bucket: ""
endpoint: ""
region: us-east-1
acl: private
assume_role_arn: ""
force_path_style: false
path: ""
disable_ssl: false
compression_level: 1
compression_format: tar
sse: ""
disable_cert_verification: false
storage_class: STANDARD
concurrency: 1
part_size: 0
debug: false
gcs:
credentials_file: ""
credentials_json: ""
bucket: ""
path: ""
compression_level: 1
compression_format: tar
debug: false
endpoint: ""
cos:
url: ""
timeout: 2m
secret_id: ""
secret_key: ""
path: ""
compression_format: tar
compression_level: 1
debug: false
api:
listen: localhost:7171
enable_metrics: true
enable_pprof: false
username: ""
password: ""
secure: false
certificate_file: ""
private_key_file: ""
create_integration_tables: false
allow_parallel: false
ftp:
address: ""
timeout: 2m
username: ""
password: ""
tls: false
path: ""
compression_format: tar
compression_level: 1
concurrency: 1
debug: false
sftp:
address: ""
port: 22
username: ""
password: ""
key: ""
path: ""
compression_format: tar
compression_level: 1
concurrency: 1
debug: false
azblob:
endpoint_suffix: core.windows.net
account_name: ""
account_key: ""
sas: ""
use_managed_identity: false
container: ""
path: ""
compression_level: 1
compression_format: tar
sse_key: ""
buffer_size: 0
buffer_count: 3
Конфігураційний файл розділений на декілька блоків, в яких є короткий опис необхідних параметрів. Нас буде цікавити блок clickhouse, де потрібно додати логін і пароль користувача серверу clickhouse. Якщо розглянути детальніше, то маємо багато можливостей по віддаленому зберіганню резервних копій після їх створення і не тільки.
Нам необхідно або створити файл config.yml і заповнити його або скопіювати вже наявний config.yml.example в config.yml, обираємо другий варіант:
[root@clickhouse-1: /etc/clickhouse-backup]# cp config.example.yml config.yml
редагуємо файл config.yml, шукаємо блок clickhouse і додаємо ім’я користувача і пароль для підключення до clickhouse:
........
clickhouse:
username: YOUR_CLICKHOUSE_USER
password: "CLICKHOUSE_USER_PASS"
host: localhost
port: 9000
disk_mapping: {}
skip_tables:
- system.*
- INFORMATION_SCHEMA.*
- information_schema.*
timeout: 5m
freeze_by_part: false
secure: false
skip_verify: false
sync_replicated_tables: false
log_sql_queries: false
config_dir: /etc/clickhouse-server/
restart_command: systemctl restart clickhouse-server
ignore_not_exists_error_during_freeze: true
debug: false
.........
зберігаємо зміни, перевіряємо підключення утилітою clickhouse-backup до clickhouse:
[root@clickhouse: /etc/clickhouse-backup]# clickhouse-backup tables
********.****_events 643.97KiB default
********.****_****_events 0B default
********..****_****_enums. 0B default
********.**** 9.56MiB default
********.****_****_events 0B default
********.****_****_on_day 571.28KiB default
********.****_****_track 735.51KiB default
********.****_****_events 83.02KiB default
********.events 1.49MiB default
Перевірка підключення пройшла успішно, отримали список доступних таблиць. Переходимо до створення резервних копій).
Створення резервної копії
Будемо створювати локальні резервні копії, без переміщення до віддаленого сховища. Для створення повної копії баз використовуємо наступну команду:
[root@clickhouse: ~]# clickhouse-backup create 12-04-22-full-clickhouse-db
2022/04/11 13:49:05.447530 info done backup=11-04-22-full-db operation=create table=********.********_events
2022/04/11 13:49:05.452289 info done backup=11-04-22-full-db operation=create table=********.********_pipeline_events
2022/04/11 13:49:05.457037 info done backup=11-04-22-full-db operation=create table=********.********
2022/04/11 13:49:05.477884 info done backup=11-04-22-full-db operation=create table=********
2022/04/11 13:49:05.480613 info done backup=11-04-22-full-db operation=create table=********.**_********_events
2022/04/11 13:49:05.665248 info done backup=11-04-22-full-db operation=create table=********.tasks********_on_day
2022/04/11 13:49:05.869420 info done backup=11-04-22-full-db operation=create table=********.tasks********
2022/04/11 13:49:05.878801 info done backup=11-04-22-full-db operation=create table=********.task********_events
2022/04/11 13:49:05.896916 info done backup=11-04-22-full-db operation=create table=********_events
2022/04/11 13:49:05.904683 info done backup=11-04-22-full-db duration=762ms operation=create
якщо необхідно утиліта дозволяє створити резервні копії окремих таблиць, як це зробити дивимося в help:
[root@clickhouse: ~]# clickhouse-backup create --help
NAME:
clickhouse-backup create - Create new backup
USAGE:
clickhouse-backup create [-t, --tables=<db>.<table>] [--partitions=<partition_names>] [-s, --schema] [--rbac] [--configs] <backup_name>
...
Утиліта дозволяє переглянути список створених копій:
[root@clickhouse: ~]# clickhouse-backup list
12-04-22-full-clickhouse-db 13.37MiB 12/04/2022 07:10:14 local
Взагалі рекомендую ознайомитись з доступними ключами та можливостями clickhouse-backup скориставшись ключем —help:
[root@clickhouse-1: ~]# clickhouse-backup --help
......
DESCRIPTION:
Run as 'root' or 'clickhouse' user
COMMANDS:
tables Print list of tables
create Create new backup
create_remote Create and upload
upload Upload backup to remote storage
list Print list of backups
download Download backup from remote storage
restore Create schema and restore data from backup
restore_remote Download and restore
delete Delete specific backup
default-config Print default config
print-config Print current config
clean Remove data in 'shadow' folder from all `path` folders available from `system.disks`
server Run API server
help, h Shows a list of commands or help for one command
GLOBAL OPTIONS:
--config FILE, -c FILE Config FILE name. (default: "/etc/clickhouse-backup/config.yml") [$CLICKHOUSE_BACKUP_CONFIG]
--help, -h show help
--version, -v print the version
За замовчуванням всі резервні копії створюються в директорії /var/lib/clickhouse/backup, переглянемо її місткість:
[root@clickhouse: /var/lib/clickhouse/backup/11-04-22-full-db]# ls -ll
drwxr-x--- 4 995 clickhouse 4096 Apr 11 13:49 metadata
-rw-r----- 1 995 clickhouse 1493 Apr 11 13:49 metadata.json
drwxr-x--- 4 995 clickhouse 4096 Apr 11 13:49 shadow
де:
- metadata – в ньому знаходиться DDL SQL, який потрібний під час відновлення;
- shadow – данні баз даних, які отримали під час резервного копіювання;
Відновлення з резервної копії
Тепер видалимо базу day_track, щоб перевірити процес відновлення:
clickhouse :) show databases;
SHOW DATABASES
Query id: 200c8843-5822-4f04-a900-e141f30b5112
┌─name───────────────┐
│ INFORMATION_SCHEMA │
│ anal***** │
│ default │
│ information_schema │
│ day │
│ ***_test. │
│ system │
│ ******** │
└────────────────────┘
8 rows in set. Elapsed: 0.003 sec.
clickhouse :) drop database day_track ;
DROP DATABASE ***_track
Query id: 5cc54913-0c3f-46c0-8672-95b634cdec0d
Ok.
0 rows in set. Elapsed: 0.003 sec.
clickhouse :) show databases;
SHOW DATABASES
Query id: 200c8843-5822-4f04-a900-e141f30b5112
┌─name───────────────┐
│ INFORMATION_SCHEMA │
│ anal***** │
│ default │
│ information_schema │
│ ***_test. │
│ system │
│ ******** │
└────────────────────┘
8 rows in set. Elapsed: 0.003 sec.
Для відновлення обираємо наш створений бекап 12-04-22-full-clickhouse-db і відновлюємо командою clickhouse-backup restore.
[root@clickhouse:]# clickhouse-backup restore 12-04-22-full-clickhouse-db
2022/04/12 07:34:31.262968 info done backup=12-04-22-full-clickhouse-db operation=restore table=*********.*****_events
2022/04/12 07:34:31.263025 info done backup=12-04-22-full-clickhouse-db operation=restore table=*********.*****_****_events
2022/04/12 07:34:31.263060 info done backup=12-04-22-full-clickhouse-db operation=restore table=*********.*****_events_enums
2022/04/12 07:34:31.271409 info done backup=12-04-22-full-clickhouse-db operation=restore table=*********
2022/04/12 07:34:31.271635 info done backup=12-04-22-full-clickhouse-db operation=restore table=*********.***_**_events
2022/04/12 07:34:31.966739 info done backup=12-04-22-full-clickhouse-db operation=restore table=*********.*****
2022/04/12 07:34:32.564075 info done backup=12-04-22-full-clickhouse-db operation=restore table=*********.*****
2022/04/12 07:34:32.568800 info done backup=12-04-22-full-clickhouse-db operation=restore table=*********.******_events
2022/04/12 07:34:32.606507 info done backup=12-04-22-full-clickhouse-db operation=restore table=*********_******.events
2022/04/12 07:34:32.606544 info done backup=12-04-22-full-clickhouse-db duration=1.502s operation=restore
2022/04/12 07:34:32.606559 info done backup=12-04-22-full-clickhouse-db operation=restore
підключаємось до clickhouse, перевіряємо список баз даних:
[root@clickhouse:]# clickhouse-client -u *** --password *****
ClickHouse client version 22.2.2.1.
Connecting to localhost:9000 as user ****.
Connected to ClickHouse server version 22.2.2 revision 54455.
clickhouse:) SHOW DATABASES
SHOW DATABASES
Query id: ff5de867-938e-4b1b-82a7-92e118a25904
┌─name───────────────┐
│ INFORMATION_SCHEMA │
│ anal***** │
│ default │
│ information_schema │
│ day. │
│ ****test │
│ system │
│ ******** │
└────────────────────┘
8 rows in set. Elapsed: 0.002 sec.
як бачимо, видалена база повернулася в стрій.
Далі за бажання, можемо налаштувати cron на сервері clickhouse який буде запускати резервне копіювання або скористатися іншими утилітами для автоматизації даного процесу.
Корисні посилання
- https://github.com/AlexAkulov/clickhouse-backup
- https://habr.com/ru/post/569282/
- https://chowdera.com/2020/12/20201223211845195D.html
- https://dev.to/jv/backup-and-restore-with-clickhouse-backup-dn9