184 похожих чатов

Всем привет. помогите, пожалумста, кто чем может. досталось вот такое хозяйство

кластер кликхауса версии 22.3.7.28. в нем есть шард из 2х реплик. на обоих в определенной БД (назовем ее FOO) когда-то была создана таблица ReplicatedReplacingMergeTree (назовем ее BAR). этот шард некоторое время назад разломали (что конкретно там делали - уже неизвестно). выглядело это так, что 1я реплика работает, а 2я не стартует. сегодня починили 2ю реплику, она стартанула. делаю на ней show tables in FOO, а таблицы BAR нет.

думаю - "ок, с этой репликой хрен пойми что происходило, и это уже неважно, я просто создам таблицу заново, и она насосёт данных с 1й реплики"

таблица с 1го раза не создалась, т.к. в zookeeper-е валялась znode ее 2й реплики. я ее удалил через zkCli.sh (rmr /clickhouse/tables/<shard id>/<table name>/replicas/<replica id>) и создал таблицу, после чего данные успешно поехали с 1й реплики на 2ю. через несколько часов данные полностью синхронизировались, и тут я заметил следующий косяк (он вообще не критичный, но глаз мозолит)

короче, в /var/lib/clickhouse/data/FOO лежат симлинки на каталоги вида /var/lib/clickhouse/store/<something id>/<uuid>, в которых уже содержатся сами данные таблиц. типа такого:
# ls -l /var/lib/clickhouse/data/FOO/
total 0
...
lrwxrwxrwx 1 clickhouse clickhouse 51 Sep 6 2022 BAR -> /var/lib/clickhouse/store/569/569a4d9d-0347-42f8-b25d-5ae7a0558f88/
...

так вот, с моей таблицей вышло так, что ее симлинк (/var/lib/clickhouse/data/FOO/BAR) указывает не туда, где таблица находится на самом деле:
select name, data_paths from system.tables where database = 'FOO' and table = 'BAR';

SELECT
name,
data_paths
FROM system.tables
WHERE (database = 'FOO') AND (table = 'BAR')

Query id: 9cddea7d-399b-4720-8339-292ff518f838

┌─name──data_paths──────────────────────────────────────────────────────────────┐
│ BAR │ ['/var/lib/clickhouse/store/426/426ee10b-1f78-4c0c-8d6d-b6f80d2053d9/'] │
└───────────────────────────────────────────────────────────────────────────────┘

1 rows in set. Elapsed: 0.004 sec.

т.е., по факту таблица FOO.BAR находится здесь:
/var/lib/clickhouse/store/426/426ee10b-1f78-4c0c-8d6d-b6f80d2053d9/

а ее симлинк из /var/lib/clickhouse/data/FOO/BAR указывает в другое место:
/var/lib/clickhouse/store/569/569a4d9d-0347-42f8-b25d-5ae7a0558f88/

как я понял, это произошло из-за того, что какие-то старые ошметки этой таблицы валялись на файловой системе, и перед ее повторным созданием я их не удалил. теперь кликхаус о них тупо не знает

вопрос вот в чем:
1. можно ли это как-то поправить? хотелось удалить старые данные и быть уверенным, что кликхаус их точно уже не контролирует
2. не будет ли это влиять на работу кликхауса?

2 ответов

17 просмотров
Al-Ryz Автор вопроса

о, я сам спросил - сам ответил. в логах КХ при пересоздании таблицы сообщил, что не может создать симлинк, т.к. он уже есть: 2023.09.05 11:04:17.250397 [ 922745 ] {2fff172c-ffc8-4460-857f-98463bc657f6} <Warning> DatabaseAtomic (FOO): std::exception. Code: 1001, type: std::__1::__fs::filesystem::filesystem_error, e.what() = filesystem error: in create_directory_symlink: File exists [/var/lib/clickhouse/store/426/426ee10b-1f78-4c0c-8d6d-b6f80d2053d9/] [/var/lib/clickhouse/data/FOO/BAR] да, надо было сначала удалить его вместе с его target-каталогом. но вот вопрос: а зачем вообще используются эти симлинки, если КХ и без них функционирует?

Al-Ryz Автор вопроса
Al Ryz
о, я сам спросил - сам ответил. в логах КХ при пер...

нашел вот такую issue: https://github.com/ClickHouse/ClickHouse/issues/6787 тут Алексей пишет буквально следующее: On table creation it will: ... - create symlink /data/database/table that resembles the structure of DatabaseOrdinary; ... а потом: Additional considerations: ... - symlinks are actually unneeded but will be created for easy introspection/debugging. ... короче, я так понял, симлинки эти - просто для удобства администраторов. КХ на них не обращает внимания

Похожие вопросы

Обсуждают сегодня

Господа, а что сейчас вообще с рынком труда на делфи происходит? Какова ситуация?
Rꙮman Yankꙮvsky
29
А вообще, что может смущать в самой Julia - бы сказал, что нет единого стандартного подхода по многим моментам, поэтому многое выглядит как "хаки" и произвол. Короче говоря, с...
Viktor G.
2
30500 за редактор? )
Владимир
47
а через ESC-код ?
Alexey Kulakov
29
Чёт не понял, я ж правильной функцией воспользовался чтобы вывести отладочную информацию? но что-то она не ловится
notme
18
У меня есть функция где происходит это: write_bit(buffer, 1); write_bit(buffer, 0); write_bit(buffer, 1); write_bit(buffer, 1); write_bit(buffer, 1); w...
~
14
Добрый день! Скажите пожалуйста, а какие программы вы бы рекомендовали написать для того, чтобы научиться управлять памятью? Можно написать динамический массив, можно связный ...
Филипп
7
Недавно Google Project Zero нашёл багу в SQLite с помощью LLM, о чём достаточно было шумно в определённых интернетах, которые сопровождались рассказами, что скоро всех "ибешни...
Alex Sherbakov
5
Ребят в СИ можно реализовать ООП?
Николай
33
https://github.com/erlang/otp/blob/OTP-27.1/lib/kernel/src/logger_h_common.erl#L174 https://github.com/erlang/otp/blob/OTP-27.1/lib/kernel/src/logger_olp.erl#L76 15 лет назад...
Maksim Lapshin
20
Карта сайта