К основному контенту

Восстановление репликации ClickHouse: Пошаговое руководство для ReplicatedMergeTree и ReplicatedCollapsingMergeTree

Пошаговая инструкция по восстановлению репликации ClickHouse для таблиц ReplicatedCollapsingMergeTree и ReplicatedMergeTree, а также добавлению и синхронизации данных с другого сервера или из бэкапа базы

1. Создание таблиц и настройка репликации

Так как таблицы с движком ReplicatedCollapsingMergeTree не поддерживают восстановление с помощью RESTORE, необходимо вручную создать их на каждом сервере с одинаковым DDL:

CREATE TABLE database.mytable (
    id UInt64,
    event_time DateTime,
    status String,
    sign Int8
) ENGINE = ReplicatedCollapsingMergeTree('/clickhouse/tables/{shard}/database/mytable', '{replica}', sign)
PARTITION BY toYYYYMM(event_time)
ORDER BY (event_time, id);

При этом {shard} и {replica} должны быть заменены на соответствующие параметры кластера.

2. Перемещение данных в каталог detached

Скопировать и поместить parts (части данных) в каталог detached. Данные можно взять из бэкапа или с другого кластера:

rsync -avz /backup/clickhouse/mytable/ /var/lib/clickhouse/data/database/mytable/detached/

Проверить, что файлы успешно скопированы:

ls -l /var/lib/clickhouse/data/database/mytable/detached/

3. Выполнение команд для подключения частей данных

Чтобы сформировать SQL-запросы для подключения частей:

for part in /var/lib/clickhouse/data/database/mytable/detached/*; do
    part_name=$(basename "$part")
    echo "ALTER TABLE database.mytable ATTACH PART '$part_name';"
done

Эта команда выведет SQL-запросы, но не выполнит их.

Если всё выглядит корректно, можно запустить выполнение команд:

for part in /var/lib/clickhouse/data/database/mytable/detached/*; do
    part_name=$(basename "$part")
    clickhouse-client --host=localhost --query "ALTER TABLE database.mytable ATTACH PART '$part_name';"
done

4. Отладка и проверка

Если в каталоге detached нет файлов, команда ничего не выведет. Для отладки можно добавить вывод обрабатываемых частей:

for part in /var/lib/clickhouse/data/database/mytable/detached/*; do
    [ -d "$part" ] || continue  # Пропустить, если это не папка
    part_name=$(basename "$part")
    echo "Processing: $part_name"
    clickhouse-client --host=localhost --query "ALTER TABLE database.mytable ATTACH PART '$part_name';"
done

Так можно отследить, какие части действительно обрабатываются.

5. Проверка успешности восстановления

После выполнения всех команд проверить, что данные восстановились корректно:

SELECT count(*) FROM database.mytable;

При необходимости выполнить OPTIMIZE TABLE:

OPTIMIZE TABLE database.mytable FINAL;

Комментарии

Популярные сообщения из этого блога

Настройка и подключение IPSec в Windows

Настройка IPSec на Windows включает в себя создание правил безопасности и фильтров для защиты сетевого трафика. Ниже — пошаговое руководство. Включение службы IPSec Перед настройкой убедитесь, что служба IPSec Policy Agent запущена: Нажмите Win + R , введите services.msc и нажмите Enter . Найдите IPsec Policy Agent . Если она не работает, нажмите ПКМ → Свойства . Установите Тип запуска: Автоматически , затем нажмите Запустить . Настройка политики IPSec через «Локальную политику безопасности» Нажмите Win + R , введите secpol.msc , нажмите Enter . Перейдите в Политики IP-безопасности в локальном компьютере . В правом окне нажмите Создать политику IP-безопасности → Далее . Укажите имя политики (например, "IPSec VPN"), снимите флажок Активировать правило по умолчанию , нажмите Далее . Нажмите Добавить , чтобы создать правило. Транспортный или туннельный режим : Если IPSec для защищенной локальной сети – выберите Транспортный режим . Если IPSec для VPN – выберите Туннельн...

Как найти и изменить репозитарии для CentOS 8

В CentOS 8 официальные репозитории (BaseOS, AppStream и Extras) управляются с помощью dnf и файлов конфигурации в /etc/yum.repos.d/ . Вот как их найти и изменить: 1. Просмотр текущих репозиториев dnf repolist Если нужно увидеть подробную информацию: dnf repolist all 2. Изменение репозиториев Файлы конфигурации репозиториев находятся в /etc/yum.repos.d/ . Например, основной репозиторий может быть в файле CentOS-AppStream.repo . Открыть его можно так: nano /etc/yum.repos.d/CentOS-AppStream.repo Внутри можно изменить: enabled=1 → включает репозиторий enabled=0 → отключает репозиторий baseurl= или mirrorlist= → задать новый источник пакетов 3. Замена недоступных репозиториев CentOS 8 достиг конца поддержки , и официальные зеркала больше не работают. Вместо них можно подключить Vault или AlmaLinux/Rocky Linux : Использование архивного репозитория CentOS Vault Создайте резервную копию старых .repo файлов: mkdir /root/repo-backup && mv /etc/yum.repos.d/*.repo /root/repo-backu...

Что такое Redfish API? Развертывание серверов через Redfish API: подробное руководство с примерами

Введение в Redfish API Redfish API — это стандартный интерфейс управления серверами, разработанный DMTF (Distributed Management Task Force). Он предоставляет RESTful API для взаимодействия с серверными системами, включая включение/выключение, мониторинг состояния и развертывание операционной системы. Этот API позволяет автоматизировать управление серверами без необходимости физического доступа или использования устаревших интерфейсов, таких как IPMI. Требования Прежде чем приступить к работе, необходимо подготовить следующее: Сервер с поддержкой Redfish (например, HPE iLO, Dell iDRAC, Lenovo XClarity, Cisco UCS и др.). Доступ к Redfish API через сеть. Учетные данные для аутентификации. Инструмент для работы с API (cURL, Postman, Python с библиотекой requests ). Подключение и аутентификация Для взаимодействия с Redfish API используется стандартный HTTP-запрос с аутентификацией по логину и паролю. Например, для проверки работоспособности интерфейса можно выполнить GET-запрос ...