Clickhouse ошибка DB::Exception: Replica already exists..
При моргании сети или при длительной недоступности одной из реплик clickhouse — возможно ее повреждение.
В таком случае сервер может не стартовать службу clickhouse и при попытке пересоздания реплицируемой таблицы вы получите ошибку 253 Replica already exists..
Чтобы исправить эту ошибку и восстановить реплику clickhouse выполните следующее:
Cкопируйте sql файл с доступной живой реплики по пути
1 |
/var/lib/clickhouse/metadata/default |
где default для БД, файл будет иметь название имя_таблицы.sql
Этот фай поместите на сломанную реплику, по аналогичному пути.
Далее выполните следующие команды:
1 |
chown clickhouse:clickhouse <table_name>.sql |
1 |
chmod 0640 <table_name>.sql |
Инициируйте процесс принудительного восстановления
1 |
sudo -u clickhouse touch /var/lib/clickhouse/flags/force_restore_data |
Запустите службу clickhouse
1 |
service clickhouse-server start |
Если при создании реплицируемой таблицы вы все еще получаете данную ошибку — удалите данные о таблице из zookeeper
Для этого откройте консоль zookeeper (расположена в директории с установленным zookeeper)
1 |
zkCli.sh |
При возникновении ошибки Replica already exists.. обычно указан путь в zookeeper, в котором хранится информация о реплике, например:
1 |
/clickhouse/tables/tx/replicas/srv1 |
Выполните команду на удаление этого пути в запущенной ранее консоли zookeeper
1 |
rmr /clickhouse/tables/tx/replicas/srv1 |
Теперь выполните команду
1 |
get /clickhouse/tables/tx/replicas/srv1 |
Если вы получили ошибку Node does not exist — значит информация о реплике удалена.
Теперь перезапустите clickhouse
1 |
service clickhouse-server restart |
После этих действий вы сможете создать реплицируемую таблицу, данные автоматически синхронизируются с доступных реплик.
Добавить комментарий