clickhouse-backup – утиліта для резервного копіювання та відновлення

 

В процесі використання 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 який буде запускати резервне копіювання або скористатися іншими утилітами для автоматизації даного процесу.

Корисні посилання

Click to rate this post!
[Total: 0 Average: 0]