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

Восстановление репликации в ClickHouse после расхождения метаданных с ZooKeeper

Как восстановить репликацию в ClickHouse при рассинхронизации метаданных

Описание проблемы

При расхождении метаданных между ClickHouse и ZooKeeper могут возникать следующие ошибки:

Ошибка TABLE_IS_READ_ONLY

Received exception from server (version 22.2.2):
Code: 242. DB::Exception: Received from localhost:9000. DB::Exception: Table is in readonly mode (zookeeper path: /clickhouse/tables/demo_db/demo_table). (TABLE_IS_READ_ONLY)

Таблица переходит в режим "только для чтения" из-за проблем с репликацией.

Ошибка CANNOT_ASSIGN_ALTER

Received exception from server (version 22.2.2):
Code: 517. DB::Exception: Received from localhost:9000. DB::Exception: Metadata on replica is not up to date with common metadata in Zookeeper. It means that this replica still not applied some of previous alters. Probably too many alters executing concurrently (highly not recommended). You can retry this error. (CANNOT_ASSIGN_ALTER)

Метаданные реплики устарели, так как некоторые изменения (ALTER) не были применены.


Восстановление работоспособности

Удаление сломанной реплики
Подключаемся к ClickHouse-клиенту:

clickhouse-client --host localhost

Удаляем проблемную реплику:

ALTER TABLE demo_db.demo_table DROP REPLICA 'replica_name';

Остановка репликации
Приостанавливаем отправку данных и выполнение очереди репликации:

SYSTEM STOP REPLICATED SENDS demo_db.demo_table;
SYSTEM STOP REPLICATION QUEUES demo_db.demo_table;

Очистка данных в ZooKeeper
Подключаемся к ZooKeeper:

/usr/share/zookeeper/bin/zkCli.sh

Удаляем данные о таблице:

rmr /clickhouse/tables/demo_db/demo_table

Перезапуск ClickHouse
Перезапускаем сервер для применения изменений:

systemctl restart clickhouse-server

Повторное подключение таблицы
После перезапуска отключаем и повторно подключаем таблицу:

clickhouse-client --host localhost
DETACH TABLE demo_db.demo_table;
ATTACH TABLE demo_db.demo_table;

Восстанавливаем реплику:

SYSTEM RESTORE REPLICA demo_db.demo_table;

Проверка состояния репликации
Проверяем статус репликации:

SELECT * FROM system.replicas WHERE table = 'demo_table' AND database = 'demo_db'\G

Если is_readonly = 0 и queue_size = 0, значит, репликация восстановлена.


Полезные команды

Просмотр структуры таблицы:

SHOW CREATE TABLE demo_db.demo_table;

Список таблиц в базе:

SHOW TABLES FROM demo_db;

Подключение всех разделов в таблице:

ALTER TABLE demo_db.demo_table ATTACH PARTITION ALL;

Перезапуск реплики, если в ZooKeeper были потеряны метаданные:

clickhouse-client --host localhost --query "SYSTEM RESTORE REPLICA demo_db.demo_table;"

Проверка состояния реплики на ноде:

clickhouse-client --host localhost --query "SELECT * FROM system.replicas WHERE table = 'demo_table'" --format=Vertical

Этот алгоритм позволит восстановить репликацию и устранить проблемы с расхождением метаданных между ClickHouse и ZooKeeper.

Комментарии

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

Настройка и подключение 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-запрос ...