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

Восстановление репликации в 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.

Комментарии

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

Debian 10: Подключение и Настройка Архивных Репозиториев для Работы

Актуальные рабочие репозитории для Debian 10: подключение и исправление проблем Debian 10 "Buster" официально устарел, и его репозитории были перемещены в архив. Это означает, что стандартные зеркала больше не содержат пакеты для данной версии. Однако можно продолжать использовать Debian 10, подключив архивные репозитории. В этой статье рассмотрим, как правильно настроить систему и устранить возможные проблемы. 1. Подключение архивных репозиториев для Debian 10 Шаг 1: Редактирование файла sources.list Для работы с пакетами необходимо обновить список репозиториев в файле /etc/apt/sources.list . Откройте его с правами суперпользователя: sudo nano /etc/apt/sources.list Замените его содержимое на следующее: deb http://archive.debian.org/debian buster main contrib non-free deb http://archive.debian.org/debian-security buster/updates main contrib non-free deb http://archive.debian.org/debian buster-updates main contrib non-free Сохраните изменения ( Ctrl + X , затем Y и Enter ). Ш...

Настройка и подключение 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 – выберите Туннельн...

Полный обзор AWX для Ansible: возможности, назначение и логика работы

AWX — это веб-интерфейс, REST API и механизм управления для Ansible, который делает автоматизацию удобнее и управляемее. Он является основой для Red Hat Ansible Automation Platform (AAP) и предоставляет мощные возможности для администрирования инфраструктуры. 🔹 Возможности AWX Управление инвентарем Подключение к динамическим инвентарям (например, AWS, GCP, VMware). Группировка хостов и управление ими через GUI. Импорт инвентаря из статических файлов (INI, YAML, JSON). Планирование и выполнение заданий Запуск плейбуков по расписанию. Возможность ручного запуска через интерфейс. Параллельное выполнение нескольких задач. Контроль доступа и безопасность Ролевая модель управления (RBAC). Поддержка интеграции с LDAP, SAML, OAuth. Гибкие политики доступа к ресурсам. Логирование и мониторинг Детальный журнал выполнения задач. Интеграция с Grafana, Prometheus, ELK. Уведомления (Slack, Email, Webhook). CI/CD и интеграция с SCM Авто...