База знаний DCImanager 6

Как восстановить базу данных Clickhouse?

При принудительной перезагрузке платформы DCImanager 6 может повредиться база данных (БД) Clickhouse, и контейнер clickhouse_server прекратит работу.

В результате перестанет отображаться статистика сервера, а в интерфейсе появится ошибка: Error 10106, Graphite request error, Got response code 503:

Диагностика

  1. Подключитесь к серверу с платформой по SSH.
  2. Подключитесь к контейнеру clickhouse_server

    Имена контейнеров могут отличаться в зависимости от используемой версии Docker Compose. Вместо символа подчёркивания в именах контейнеров может использоваться дефис.

    Чтобы узнать точные имена контейнеров, выполните команду: 

    docker ps -a
    docker exec -it clickhouse_server sh
  3. Проверьте наличие в логе контейнера clickhouse-server.log ошибки ClickHouse init process failed

    grep 'ClickHouse init process failed'  /var/log/clickhouse-server/clickhouse-server.log

    Если вывод покажет ошибки, значит причина — в повреждённой БД Clickhouse. Пример вывода: 

    ClickHouse init process failed.
  4. Проверьте лог clickhouse-server.err.log в реальном времени: 

    tail -F /var/log/clickhouse-server/clickhouse-server.err.log

    Если БД Clickhouse повреждена, в нём отобразятся ошибки вида: 

    2023.02.07 08:42:05.203655 [ 115 ] {} <Error> dci.graphite (ec566f01-a447-406f-b275-92a2b3cd85ab): Detaching broken part /var/lib/clickhouse/store/ec5/ec566f01-a447-406f-b275-92a2b3cd85ab/202212_43911_57173_11575 (size: 0.00 B). If it happened after update, it is likely because of backward incompatibility. You need to resolve this manually
    2023.02.07 08:42:05.211909 [ 115 ] {} <Error> dci.graphite (ec566f01-a447-406f-b275-92a2b3cd85ab): while loading part 202212_43911_57178_11580 on path store/ec5/ec566f01-a447-406f-b275-92a2b3cd85ab/202212_43911_57178_11580: Code: 27. DB::ParsingException: Cannot parse input: expected 'columns format version: 1\n' at end of stream. (CANNOT_PARSE_INPUT_ASSERTION_FAILED), Stack trace (when copying this message, always include the lines below)

Решение

  1. Запустите восстановление базы: 

    docker exec -it clickhouse_server touch /var/lib/clickhouse/flags/force_restore_data
  2. Проверьте лог clickhouse-server.err.log на наличие ошибок вида: 

    2023.02.08 03:19:33.367657 [ 546 ] {7d518126-889d-4c64-83bf-f87356dc802a} <Error> DynamicQueryHandler: Cannot send exception to client: Code: 24. DB::Exception: Cannot write to ostream at offset 280. (CANNOT_WRITE_TO_OSTREAM)

    Проверить можно командой: 

    cat /var/log/clickhouse-server/clickhouse-server.err.log | grep 'Cannot write to ostream'
  3. Если вывод показал ошибки, перезапустите контейнер командой: 

    docker stop clickhouse_server; docker start clickhouse_server