Перейти к основному содержимому
Версия: 4.5.X

ClickHouse

ClickHouse — это колоночная аналитическая СУБД с открытым кодом, позволяющая выполнять аналитические запросы в режиме реального времени на структурированных больших данных, разрабатываемая компанией Яндекс. Подробнее о ClickHouse.

KOMRAD использует ClickHouse для хранения событий в базе komrad_events и быстрого доступа к ним. Благодаря использованию самых свежих и стабильных релизов, мы встраиваем всё новые инструменты для ускорения поиска и фильтрации по событиям.

Мы самостоятельно собираем пакеты ClickHouse, проверяем их и кладём в дистрибутив.

В состав дистрибутива входят следующие пакеты:

clickhouse-common-static — устанавливает исполняемые файлы ClickHouse.

clickhouse-server — создает символические ссылки для clickhouse-server и устанавливает конфигурационные файлы.

clickhouse-client — создает символические ссылки для clickhouse-client и других клиентских инструментов и устанавливает конфигурационные файлы clickhouse-client.

clickHouse keeper — это альтернативный сервис координации, совместимый с ZooKeeper.

Требования

Процессор

В случае установки из готовых deb-пакетов используйте процессоры с архитектурой x86_64 и поддержкой инструкций SSE 4.2. Для запуска ClickHouse на процессорах без поддержки SSE 4.2 или на процессорах с архитектурой AArch64 и PowerPC64LE необходимо собирать ClickHouse из исходников.

ClickHouse реализует параллельную обработку данных и использует все доступные аппаратные ресурсы. При выборе процессора учитывайте, что ClickHouse работает более эффективно в конфигурациях с большим количеством ядер, но с более низкой тактовой частотой, чем в конфигурациях с меньшим количеством ядер и более высокой тактовой частотой. Например, 16 ядер с 2600 MHz предпочтительнее, чем 8 ядер с 3600 MHz.

Рекомендуется использовать технологии Turbo Boost и hyper-threading. Их использование существенно улучшает производительность при типичной нагрузке.

RAM

Мы рекомендуем использовать как минимум 4 ГБ оперативной памяти, чтобы иметь возможность выполнять нетривиальные запросы. Сервер ClickHouse может работать с гораздо меньшим объёмом RAM, память требуется для обработки запросов.

Необходимый объём RAM зависит от:

  • сложности запросов
  • объёма данных, обрабатываемых в запросах

Для расчета объёма RAM необходимо оценить размер промежуточных данных для операций GROUP BY, DISTINCT, JOIN а также других операций, которыми вы пользуетесь.

ClickHouse может использовать внешнюю память для промежуточных данных. Подробнее об этом можно прочесть на сайте разработчика.

Файл подкачки

Отключайте файл подкачки в продуктовых средах.

Подсистема хранения

Для установки ClickHouse необходимо 2ГБ свободного места на диске.

Объём дискового пространства, необходимый для хранения ваших данных, нужно рассчитывать отдельно. Расчёт должен включать:

  • Приблизительную оценку объёма данных:

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

  • Оценку коэффициента сжатия данных:

чтобы оценить коэффициент сжатия данных, загрузите некоторую выборку данных в ClickHouse и сравните действительный размер данных с размером сохранённой таблицы. Например, данные типа clickstream обычно сжимаются в 6-10 раз.

Для оценки объёма хранилища примените коэффициент сжатия к размеру данных. Если вы планируете хранить данные в нескольких репликах, то необходимо полученный объём умножить на количество реплик.

Парамеры сети

По возможности, используйте сети 10G и более высокого класса.

Пропускная способность сети критически важна для обработки распределенных запросов с большим количеством промежуточных данных. Также скорость сети влияет на задержки в процессах репликации.

Программное обеспечение

ClickHouse разработан для семейства операционных систем Linux. Рекомендуемый дистрибутив Linux — Ubuntu. В системе должен быть установлен пакет tzdata.

ClickHouse может работать и в других семействах операционных систем.

Установка

Возможны различные варианты установки ClickHouse, он может размещаться на одном хосте в случае лицензии Base AiO, или может быть установлен на другом хосте в случае наличия лицензии Enterprise.

ClickHouse установится самостоятельно в случае автоматической установки KOMRAD

Как установить ClickHouse вручную, можно прочитать в разделе ручная установка на Astra Linux

Срок хранения событий

После автоматической или ручной установки события по умолчанию будут храниться в системе 30 дней.

Вы можете установить необходимый Вам параметр хранения событий в базе (TTL - Time to live). Это можно сделать через запрос к базе Clickhouse. Подключитесь к Clickhouse

ALTER TABLE komrad_events.events
MODIFY TTL FROM_UNIXTIME(key_time) + INTERVAL 365 DAY;

Доступные интервалы: INTERVAL 1 YEAR + INTERVAL 3 MONTH + INTERVAL 1 WEEK + INTERVAL 4 DAY

Настроить горячее/холодное хранение событий

При установке KOMRAD необходимо выбрать разделение хранилища на горячее/холодное. В блоке ClickHouse при установке выбрать:

  • Указать TTL для таблицы событий? [Y/n]: y
  • Создать хранилище событий 'hot/cold'? [Y/n]: y

Войти в ClickHouse командой:

 clickhouse-client --user=komrad --password=pass

Ввести запрос с необходимыми значениями интервалов:

ALTER TABLE komrad_events.events MODIFY TTL FROM_UNIXTIME(key_time) TO VOLUME 'hot_volume', FROM_UNIXTIME(key_time) + INTERVAL 10 minute TO VOLUME 'cold_volume', FROM_UNIXTIME(key_time) + INTERVAL 10 day

Другие способы настройки горячего/холодного хранения событий описаны здесь

Клиент командной строки

ClickHouse предоставляет собственный клиент командной строки: clickhouse-client. Клиент поддерживает запуск с аргументами командной строки и с конфигурационными файлами.

Подключение

Клиент устанавливается пакетом clickhouse-client и запускается командой clickhouse-client. Для подключения с корректными правами используйте:

clickhouse-client --user=komrad --password=pass

Параметры командной строки

--host, -h — имя сервера, по умолчанию — localhost. Вы можете использовать как имя, так и IPv4 или IPv6-адрес

--port — порт для подключения, по умолчанию — 9000. Обратите внимание: для HTTP-интерфейса и нативного интерфейса используются разные порты

--user, -u — имя пользователя, по умолчанию — default и komrad, создаваемый в процессе установки

--password — пароль, по умолчанию — пустая строка или pass

--query, -q — запрос для выполнения, при использовании в неинтерактивном режиме

--queries-file, -qf - путь к файлу с запросами для выполнения. Необходимо указать только одну из опций: query или queries-file

--database, -d — выбрать текущую БД. Без указания значение берется из настроек сервера (по умолчанию — БД default)

--multiline, -m — если указано — разрешить многострочные запросы, не отправлять запрос по нажатию Enter

--multiquery, -n — если указано — разрешить выполнять несколько запросов, разделённых точкой с запятой

--format, -f — использовать указанный формат по умолчанию для вывода результата

--vertical, -E — если указано, использовать по умолчанию формат Vertical для вывода результата. То же самое, что –format=Vertical. В этом формате каждое значение выводится на отдельной строке, что удобно для отображения широких таблиц

--time, -t — если указано, в неинтерактивном режиме вывести время выполнения запроса в поток stderr

--stacktrace — если указано, в случае исключения, выводить также его стек-трейс

--config-file — имя конфигурационного файла

--secure — если указано, будет использован безопасный канал

--history_file - путь к файлу с историей команд

--param_<name> — значение параметра для запроса с параметрами

Конфигурационные файлы

Clickhouse—client использует первый существующий файл из:

  • определенного параметром --config-file
  • ./clickhouse-client.xml
  • ~/.clickhouse-client/config.xml
  • /etc/clickhouse-client/config.xml

Пример конфигурационного файла:

<config>
<user>komrad</user>
<password>pass</password>
<secure>False</secure>
</config>

Работа с базой данных

Подробный список запросов к базе можно посмотреть здесь. В данном разделе перечислим самые необходимые.

  • Создать базу
CREATE DATABASE komrad_events
  • Удалить базу
DROP DATABASE komrad_events
  • Проверить наличие баз
SHOW DATABASES

Устранение неисправностей

Сервер не запущен

Проверьте, запущен ли сервер

Команда:

sudo systemctl status clickhouse-server.service

Если сервер не запущен, запустите его с помощью команды:

sudo systemctl start clickhouse-server.service

Проверьте журналы

Основной лог clickhouse-server по умолчанию — /var/log/clickhouse-server/clickhouse-server.log.

или лог ошибок

sudo cat /var/log/clickhouse-server/clickhouse-server.err.log

В случае успешного запуска вы должны увидеть строки, содержащие:

  • <Information> Application: starting up. — сервер запускается

  • <Information> Application: Ready for connections. — сервер запущен и готов принимать соединения

Если clickhouse-server не запустился из-за ошибки конфигурации, Вы увидите <Error> - строку с описанием ошибки.

Например:

2019.01.11 15:23:25.549505 [ 45 ] {} <Error> ExternalDictionaries: Failed reloading 'event2id' external dictionary: Poco::Exception. Code: 1000, e.code() = 111, e.displayText() = Connection refused, e.what() = Connection refused

Если Вы не видите ошибки в конце файла, просмотрите весь файл начиная со строки:

<Information> Application: starting up.

При попытке запустить второй экземпляр clickhouse-server журнал выглядит следующим образом:

2019.01.11 15:25:11.151730 [ 1 ] {} <Information> : Starting ClickHouse 19.1.0 with revision 54413
2019.01.11 15:25:11.154578 [ 1 ] {} <Information> Application: starting up
2019.01.11 15:25:11.156361 [ 1 ] {} <Information> StatusFile: Status file ./status already exists - unclean restart. Contents:
PID: 8510
Started at: 2019-01-11 15:24:23
Revision: 54413
2019.01.11 15:25:11.156673 [ 1 ] {} <Error> Application: DB::Exception: Cannot lock file ./status. Another server instance in same directory is already running.
2019.01.11 15:25:11.156682 [ 1 ] {} <Information> Application: shutting down
2019.01.11 15:25:11.156686 [ 1 ] {} <Debug> Application: Uninitializing subsystem: Logging Subsystem
2019.01.11 15:25:11.156716 [ 2 ] {} <Information> BaseDaemon: Stop SignalListener thread

Проверьте логи system.d

Если из логов clickhouse-server Вы не получили необходимой информации или логов нет, то Вы можете посмотреть логи system.d командой:

sudo journalctl -u clickhouse-server

Запустите clickhouse-server в интерактивном режиме

sudo -u clickhouse /usr/bin/clickhouse-server --config-file /etc/clickhouse-server/config.xml

Эта команда запускает сервер как интерактивное приложение со стандартными параметрами скрипта автозапуска. В этом режиме clickhouse-server выводит сообщения в консоль.

Сбор и запись логов ClickHouse в файл

При возникновении проблем с СУБД ClickHouse, имеет смысл выполнить следующую команду:

sudo clickhouse-diagnostics collect --host localhost --password pass -u komrad

Где вместо pass (пароль по умолчанию), необходимо указать ваш пароль от ClickHouse.

После выполнения указанной команды, Вы увидите строчку по типу archive ready at: /home/iru/p/packaging/user/1665645734320.tar.gz, которая укажет на расположение созданного файла. Пожалуйста, предоставьте этот файл техподдержке KOMRAD. Это поможет при расследовании проблем, связанных с работой СУБД ClickHouse.

Параметры конфигурации

Проверьте:

  • Параметры подключения к clickhouse-server с другой машины.

Для XML

sudo nano /etc/clickhouse-server/config.xml

Для YAML

sudo nano /etc/clickhouse-server/config.yaml

Проверьте раскомментирована ли строка,
<!-- <listen_host>0.0.0.0</listen_host> -->,

<!-- Listen specified host. use :: (wildcard IPv6 address), if you want to
accept connections both with IPv4 and IPv6 from everywhere. -->
<!-- <listen_host>::</listen_host> -->
<!-- Same for hosts with disabled ipv6: -->
<listen_host>0.0.0.0</listen_host>
<!-- Default values - try listen localhost on ipv4 and ipv6: -->
<!--
<listen_host>::</listen_host>
<listen_host>127.0.0.1</listen_host>
-->

Для yaml файла:

# Same for hosts without support for IPv6:
listen_host: 0.0.0.0

Сохраните файл и закройте его. Для применения новой конфигурации перезапустите службу, выполнив:

sudo systemctl restart clickhouse-server.service

Сервер ClickHouse прослушивает порт 8123 для HTTP-соединений и порт 9000 для соединений из clickhouse-client. Разрешите доступ к обоим портам для IP-адреса вашего сервера, где будет установлен KOMRAD Enterprise SIEM с помощью следующих команд:

sudo ufw allow from IP_адрес_ПК_KOMRAD/32 to any port 8123
sudo ufw allow from IP_адрес_ПК_KOMRAD/32 to any port 9000
примечание

По умолчанию сервер ClickHouse принимает только локальные подключения

  • Параметры безопасного подключения

Проверьте:

  • настройку tcp_port_secure

  • параметры для SSL-сертификатов

Используйте правильные параметры при подключении. Например, используйте параметр port_secure при использовании clickhouse_client.

  • Настройки пользователей

Возможно, вы используете неверное имя пользователя или пароль.

Мониторинг ресурсов

Проверка объема базы в оперативной памяти в байтах

Выполните команду:

sudo ps -aux | grep -i clickhouse-server | awk '{print $5}'

Проверка занимаемого базами на диске пространства

Запрос в ClickHouse

SELECT 'komrad-event', table, formatReadableSize(sum(data_compressed_bytes) AS size) AS compressed, formatReadableSize(sum(data_uncompressed_bytes) AS usize) AS uncompressed, round(usize / size, 2) AS compr_rate, sum(rows) AS rows, count() AS part_count FROM system.parts WHERE (active = 1) AND (table LIKE '%') AND (database LIKE '%') GROUP BY database, table ORDER BY size DESC;

или в консоли Linux

sudo du -sm /var/lib/clickhouse/

Размер базы данных ClickHouse в мегабайтах.

Регулятор масштабирования процессора (CPU Scaling Governor)

Всегда используйте значение performance. Опция on-demand работает значительно хуже при постоянных высоких нагрузках

echo 'performance' | sudo tee /sys/devices/system/cpu/cpu*/cpufreq/scaling_governor

Ограничения процессора

Процессоры могут перегреваться. Используйте команду dmesg, чтобы увидеть, была ли ограничена тактовая частота процессора из-за перегрева. Ограничение также может быть установлено извне на уровне центра обработки данных. Вы можете использовать утилиту turbostat для наблюдения за процессором под нагрузкой.

Использование оперативной памяти

Для небольших объёмов данных (сжатых до ~200 Гб) лучше всего использовать столько памяти, сколько соответствует объёму данных. Для больших объёмов данных и при обработке интерактивных (online) запросов следует использовать разумный объём оперативной памяти (128 Гб и более), чтобы подмножество горячих данных поместилось в кэше страниц. Даже при объёмах данных ~50 Тб на сервер, использование 128 Гб оперативной памяти значительно повышает производительность запросов по сравнению с 64 Гб.

Не отключайте overcommit (стратегия чрезмерного выделения памяти). Значение cat/proc/sys/vm/overcommit_memory должно быть равно 0 или 1. Запустите:

echo 0 | sudo tee /proc/sys/vm/overcommit_memory

Используйте утилиту perf top, которая показывает, сколько процессорного времени использует каждая конкретная функция в режиме реального времени.

осторожно

Если в вашей системе меньше 16 Гб ОЗУ, могут возникнуть различные ошибки памяти, поскольку настройки по умолчанию не соответствуют этому объёму памяти. Рекомендуемый объём оперативной памяти составляет 32 Гб или более. Вы можете использовать ClickHouse в системе с небольшим объемом оперативной памяти, даже с 2 Гб, но она требует дополнительной настройки и может работать с низкой скоростью

Подсистема хранения данных

Если Ваш бюджет позволяет Вам использовать SSD, используйте SSD. Если нет, используйте HDD. Подойдут жесткие диски SATA с частотой вращения 7200 оборотов в минуту.

Отдавайте предпочтение большому количеству серверов с локальными жесткими дисками, а не меньшему количеству серверов с подключенными дисковыми полками. Но для хранения архивов с редкими запросами подойдут полки.

RAID

При использовании HDD вы можете комбинировать RAID-10, RAID-5, RAID-6 или RAID-50. Для Linux лучше использовать программный RAID (с помощью утилиты mdadm). Мы не рекомендуем использовать LVM. При создании RAID-10 используйте far layout. Если позволяет ваш бюджет, выберите RAID-10.

Если у вас более 4 дисков, используйте RAID-6 (предпочтительно) или RAID-50 вместо RAID-5. При использовании RAID-5, RAID-6 или RAID-50 всегда увеличивайте stripe_cache_size, поскольку значение по умолчанию обычно не является лучшим выбором:

echo 4096 | sudo tee /sys/block/md2/md/stripe_cache_size

Рассчитайте точное число, исходя из количества устройств и размера блока, используя формулу:

2 * num_devices * chunk_size_in_bytes / 4096

Размер блока (block size) в 64 Кб достаточен для большинства конфигураций RAID. Средний размер записи на сервере ClickHouse составляет примерно 1 Мб (1024 Кб), и, таким образом, рекомендуемый размер страйпа (stripe size) также составляет 1 Мб. При необходимости размер блока можно оптимизировать, установив значение 1 Мб, деленное на количество дисков с нечетностью в RAID-массиве, так что каждая запись распараллеливается на всех доступных дисках с нечетностью. Никогда не устанавливайте размер блока слишком маленьким или слишком большим.

Вы можете использовать RAID-0 на SSD. Независимо от использования RAID, всегда используйте дублирование для обеспечения безопасности данных.

Включите NCQ с длинной очередью (long queue). Для HDD выберите планировщик CFQ, а для SSD выберите noop. Не уменьшайте значение параметра readahead. Для HDD включите запись кэша (write cache).

Убедитесь, что fstrim включен для дисков NVME и SSD в вашей ОС (обычно он реализуется с помощью службы cronjob или systemd).

Файловая система

Ext4 - самый надежный вариант. Установите параметры монтирования noatime. XFS тоже работает хорошо. Большинство других файловых систем также должны работать нормально.

FAT32 и exFAT не поддерживаются из-за отсутствия жёстких ссылок.

Не используйте сжатые файловые системы, потому что ClickHouse выполняет сжатие самостоятельно и лучше. Не рекомендуется использовать зашифрованные файловые системы, потому что Вы можете использовать встроенное шифрование в ClickHouse, что лучше.

Хотя ClickHouse может работать через NFS, это не самая лучшая идея.

Ядро Linux

Не используйте устаревшее ядро Linux.

Сеть

Если вы используете IPv6, увеличьте размер кэша маршрутов (the size of the route cache). Ядро Linux до версии 3.2 имело множество проблем с реализацией IPv6.

По возможности, используйте сеть ёмкостью не менее 10 Гб. 1 Гб тоже подойдет, но учтите, что такая сеть подходит хуже для исправления реплик с десятками терабайт данных или для обработки распределенных запросов с большим объёмом промежуточных данных.

THP (transparent huge pages)

Если Вы используете старое ядро Linux, отключите THP. Это мешает работе распределителя памяти, что приводит к значительному снижению производительности. В новых ядрах Linux THP — это нормально.

echo 'madvise' | sudo tee /sys/kernel/mm/transparent_hugepage/enabled

Настройка гипервизора

Если Вы используете OpenStack, установите

cpu_mode=host-passthrough

в файле nova.conf

Если вы используете libvirt, установите

<cpu mode='host-passthrough'/>

в конфигурации XML.

Это важно для того, чтобы ClickHouse мог получить корректную информацию с помощью инструкции cpuid. В противном случае вы можете получить различные проблемы и ошибки при запуске гипервизора на старых моделях процессоров.

Антивирусное программное обеспечение

Если Вы используете антивирус, то настройте его так, чтобы он пропускал/игнорировал папки с файлами данных ClickHouse (/var/lib/clickhouse). В противном случае производительность может снизиться, и Вы можете столкнуться с неожиданными ошибками во время приёма данных и фоновых слияний.

Управление доступом

ClickHouse поддерживает управление доступом на основе подхода RBAC

Объекты системы доступа в ClickHouse:

  1. Аккаунт пользователя
  2. Роль
  3. Политика доступа к строкам
  4. Профиль настроек
  5. Квота

Вы можете настроить объекты системы доступа, используя:

  • SQL-ориентированный воркфлоу

  • конфигурационные файлы сервера: users.xml и config.xml

Рекомендуется использовать SQL-воркфлоу. Оба метода конфигурации работают одновременно, поэтому, если для управления доступом Вы используете конфигурационные файлы, Вы можете плавно перейти на SQL-воркфлоу.

осторожно

Нельзя одновременно использовать оба метода для управления одним и тем же объектом системы доступа

Чтобы посмотреть список всех пользователей, ролей, профилей и пр., а также все привилегии, используйте запрос SHOW ACCESS.

Использование

По умолчанию сервер ClickHouse предоставляет аккаунт пользователя default, для которого выключена функция SQL-ориентированного управления доступом, но у него есть все права и разрешения. Аккаунт default используется во всех случаях, когда имя пользователя не определено. Например, при входе с клиента или в распределенных запросах. При распределенной обработке запроса default используется, если в конфигурации сервера или кластера не указаны свойства user и password.

Если вы начали пользоваться ClickHouse недавно, попробуйте следующий сценарий:

  1. Включите SQL-ориентированное управление доступом для пользователя default
  2. Войдите под пользователем default и создайте всех необходимых пользователей. Не забудьте создать аккаунт администратора (GRANT ALL ON **.** TO admin_user_account WITH GRANT OPTION)
  3. Ограничьте разрешения для пользователя default и отключите для него SQL-ориентированное управление доступом

Особенности реализации

  • Вы можете выдавать разрешения на базы данных или таблицы, даже если они не существуют
  • При удалении таблицы все связанные с ней привилегии не отзываются. Если вы затем создадите новую таблицу с таким же именем, все привилегии останутся действительными. Чтобы отозвать привилегии, связанные с удаленной таблицей, необходимо выполнить, например, запрос REVOKE ALL PRIVILEGES ON db.table FROM ALL
  • У привилегий нет настроек времени жизни

Аккаунт пользователя

Аккаунт пользователя — это объект системы доступа, позволяющий авторизовать кого-либо в ClickHouse. Аккаунт содержит:

  • Идентификационную информацию
  • Привилегии, определяющие область действия запросов, которые могут быть выполнены пользователем
  • Хосты, которые могут подключаться к серверу ClickHouse
  • Назначенные роли и роли по умолчанию
  • Настройки и их ограничения, которые применяются по умолчанию при входе пользователя
  • Присвоенные профили настроек

Привилегии присваиваются аккаунту пользователя с помощью запроса GRANT или через назначение ролей. Отозвать привилегию можно с помощью запроса REVOKE. Чтобы вывести список присвоенных привилегий, используется выражение SHOW GRANTS.

Запросы управления:

Применение настроек

Настройки могут быть заданы разными способами: для аккаунта пользователя, для назначенных ему ролей или в профилях настроек. При входе пользователя, если настройка задана для разных объектов системы доступа, значение настройки и ее ограничения применяются в следующем порядке (от высшего приоритета к низшему):

  1. Настройки аккаунта
  2. Настройки ролей по умолчанию для аккаунта. Если настройка задана для нескольких ролей, порядок применения не определен
  3. Настройки из профилей настроек, присвоенных пользователю или его ролям по умолчанию. Если настройка задана в нескольких профилях, порядок применения не определен
  4. Настройки, которые по умолчанию применяются ко всему серверу, или настройки из профиля по умолчанию

Роль

Роль — это контейнер объектов системы доступа, которые можно присвоить аккаунту пользователя.

Роль содержит:

  • Привилегии
  • Настройки и ограничения
  • Список назначенных ролей

Запросы управления:

Привилегии можно присвоить роли с помощью запроса GRANT. Для отзыва привилегий у роли ClickHouse предоставляет запрос REVOKE.

Политика доступа к строкам

Политика доступа к строкам — это фильтр, определяющий, какие строки доступны пользователю или роли. Политика содержит фильтры для конкретной таблицы, а также список ролей и/или пользователей, которые должны использовать данную политику.

Запросы управления:

Профиль настроек

Профиль настроек — это набор настроек. Профиль настроек содержит настройки и ограничения, а также список ролей и/или пользователей, по отношению к которым применяется данный профиль.

Запросы управления:

Квота

Квота ограничивает использование ресурсов.

Квота содержит набор ограничений определенной длительности, а также список ролей и/или пользователей, на которых распространяется данная квота.

Запросы управления:

Включение SQL-ориентированного управления доступом

  • Настройте каталог для хранения конфигураций

ClickHouse хранит конфигурации объектов системы доступа в каталоге, установленном в конфигурационном параметре сервера access_control_path.

  • Включите SQL-ориентированное управление доступом как минимум для одного аккаунта

По умолчанию управление доступом на основе SQL выключено для всех пользователей. Вам необходимо настроить хотя бы одного пользователя в файле конфигурации users.xml и присвоить значение 1 параметру access_management.

Не работает ClickHouse на виртуальной машине (Ошибка 1001)?

В случае, если Ваш процессор (BMI или avx512) поддерживает более производительные пакеты ClickHouse, но среда виртуализации не даёт их использовать и в журнале ClickHouse постоянно появляется сообщение об ошибке 1001 (см. скриншот ниже), Вам необходимо установить простую версию ClickHouse.

Ошибка 1001

Установить более простую версию пакетов ClickHouse можно так:

dpkg -i clickhouse-server_v22.9.3.18_amd64_signed.deb clickhouse-keeper_v22.9.3.18_amd64_signed.deb clickhouse-common-static_v22.9.3.18_amd64_signed.deb clickhouse-client_v22.9.3.18_amd64_signed.deb

После чего необходимо перезагрузить машину.

Как очистить логи ClickHouse?

При большом количестве EPS может возникнуть ситуация, когда логи ClickHouse занимают много места. Для просмотра занятого пространства подключитесь к clickhouse-client

SELECT
database,
table,
formatReadableSize(sum(data_compressed_bytes) AS size) AS compressed,
formatReadableSize(sum(data_uncompressed_bytes) AS usize) AS uncompressed,
round(usize / size, 2) AS compr_rate,
sum(rows) AS rows,
count() AS part_count
FROM system.parts
WHERE (active = 1) AND (database LIKE '%') AND (table LIKE '%')
GROUP BY
database,
table
ORDER BY size DESC;

Вам покажет таблицы логов и сколько они занимают места

Для мягкого удаления выполните следующее запросы:

TRUNCATE TABLE system.trace_log;
TRUNCATE TABLE system.query_log;
TRUNCATE TABLE system.query_thread_log;
TRUNCATE TABLE system.asynchronous_metric_log;
TRUNCATE TABLE system.part_log;
TRUNCATE TABLE system.metric_log;
TRUNCATE TABLE system.session_log;

Как собрать логи при проблемах с СУБД ClickHouse?

При возникновении проблем с СУБД ClickHouse, имеет смысл выполнить следующую команду:

sudo clickhouse-diagnostics collect --host localhost --password pass -u komrad

Где вместо pass (пароль по умолчанию), необходимо указать Ваш пароль от ClickHouse.

После выполнения указанной команды, Вы увидите строчку по типу archive ready at: /home/iru/p/packaging/user/1665645734320.tar.gz, которая укажет на расположение созданного файла. Пожалуйста, предоставьте этот файл техподдержке KOMRAD. Это поможет при расследовании проблем, связанных с работой СУБД ClickHouse.

Смена пароля пользователю default через файл конфигурации

Данный вид смены пароля предназначен для инсталляции в автоматическом режиме с использованием конфигурационных файлов .yaml.

  1. Создайте пароль для ClickHouse, указав вместо pass ваш пароль:

    echo -n "pass" | sha256sum | tr -d '-'
  2. Для смены пароля пользователя default откройте файл настройки пользователей ClickHouse:

    sudo nano  /etc/clickhouse-server/users.yaml
  3. В открывшемся файле вы можете поменять пароль пользователю default в формате SHA256 hash function:

    password_sha256_hex: '1ba3d16e9881959f8c9a9762854f72c6e6321cdd44358a10a4e939033117eab9'
  4. Перезагрузите сервер:

    sudo systemctl restart clickhouse-server.service

Смена пароля пользователю komrad

Данный вид смены пароля предназначен для инсталляции в автоматическом режиме с использованием конфигурационных файлов .yaml.

Таким же образом Вы можете сменить пароль пользователю default, при этом подключение к clickhouse-client должно быть выполнено от пользователя komrad

  1. Дайте возможность пользователям изменять права:

    sudo nano  /etc/clickhouse-server/users.yaml
  2. Раскомментируйте строку:

        # User can create other users and grant rights to them.
    # NOTE: turn off access management for user default after setting up ACL
    # https://clickhouse.com/docs/en/operations/access-rights/#access-control-usage
    access_management: 1
  3. Перезагрузите сервер:

    sudo systemctl restart clickhouse-server.service
  4. Подключитесь через клиент:

    clickhouse-client --user=default --password=pass
  5. Заменить пароль пользователю komrad можно, выполнив запрос:

    ALTER USER komrad IDENTIFIED WITH plaintext_password BY 'password2';

    В данном случае пользователю komrad поменяется пароль на password2

  6. Убрать возможность изменять роли:

    sudo nano  /etc/clickhouse-server/users.yaml
  7. Закомментируйте строку:

        # User can create other users and grant rights to them.
    # NOTE: turn off access management for user default after setting up ACL
    # https://clickhouse.com/docs/en/operations/access-rights/#access-control-usage
    #access_management: 1
  8. Перезагрузите сервер:

    sudo systemctl restart clickhouse-server.service

Смена пароля пользователя ClickHouse в KOMRAD

sudo nano  /etc/echelon/komrad/komrad-processor.yaml
  # Тип хранилища, в данной версии поддерживается только:
# - clickhouse - ClickHouse v22.3-LTS
kind: clickhouse
clickhouse:
# Название БД
name: komrad_events
user: komrad
password: [укажите ваш пароль]
# Адрес хоста с ClickHouse-server
host: localhost
# Порт ClickHouse-server
port: 9000
# Режим работы - с TLS или без
sslmode: disable
# Режим вставки - выбор опции: синхронная или асинхронная вставка
insert_type: async
dial-timeout: 30s
compress: ""
connection-open-strategy: in-order
max-open-conns: 15
max-idle-conns: 10
conn-max-lifetime: 1h

Перезапустите komrad-processor:

sudo systemctl restart komrad-processor.service

Перенос таблицы на другой диск

  1. Предположим, мы монтируем новое устройство по пути /mnt/disk_1 и хотим перенести таблицу events на него

  2. Смените владельца созданного каталога на пользователя ClickHouse:

    chown -R clickhouse:clickhouse /mnt/disk_1/clickhouse
  3. Задайте специальную политику хранения, которая должна включать оба диска - старый и новый:

    nano /etc/clickhouse-server/config.d/storage.xml

    storage.xml

    <yandex>
    <storage_configuration>
    <disks>
    <!--
    default disk is special, it always
    exists even if not explicitly
    configured here, but you can’t change
    it’s path here (you should use <path>
    on top level config instead)
    -->
    <default>
    <!--
    You can reserve some amount of free space
    on any disk (including default) by adding
    keep_free_space_bytes tag
    -->
    </default>
    <disk_1> <!-- disk name -->
    <path>/mnt/disk_1/clickhouse/</path>
    </disk_1>
    </disks>
    <policies>
    <move_from_default_to_disk_1> <!-- name for new storage policy -->
    <volumes>
    <default>
    <disk>default</disk>
    <max_data_part_size_bytes>10000000&</max_data_part_size_bytes>
    </default>
    <disk_1_vol> <!-- name of volume -->
    <!--
    we have only one disk in that volume
    and we reference here the name of disk
    as configured above in <disks> section
    -->
    <disk>disk_1</disk>
    </disk_1_vol>
    </volumes>
    <move_factor>0.99</move_factor>
    </move_from_default_to_disk_1>
    </policies>
    </storage_configuration>
    </yandex>
  4. Обновите параметр storage_policy для таблиц до новой политики:

    ALTER TABLE komrad_events.events MODIFY SETTING storage_policy='move_from_default_to_disk_1';
  5. Подождите, пока все части таблиц не изменят свое disk_name на новый диск:

    SELECT name,disk_name, path from system.parts WHERE table='events' and active;
    SELECT disk_name, path, sum(rows), sum(bytes_on_disk), uniq(partition), count() FROM system.parts WHERE table='events' and active GROUP BY disk_name, path ORDER BY disk_name, path;
  6. Удалите диск «по умолчанию» из новой политики хранения. В серверной оболочке:

    nano /etc/clickhouse-server/config.d/storage.xml

    storage.xml

    <yandex>
    <storage_configuration>
    <disks>
    <!--
    default disk is special, it always
    exists even if not explicitly
    configured here, but you can’t change
    it’s path here (you should use <path>
    on top level config instead)
    -->
    <default>
    <!--
    You can reserve some amount of free space
    on any disk (including default) by adding
    keep_free_space_bytes tag
    -->
    </default>
    <disk_1> <!-- disk name -->
    <path>/mnt/disk_1/clickhouse/</path>
    </disk_1>
    </disks>
    <policies>
    <move_from_default_to_disk_1> <!-- name for new storage policy -->
    <volumes>
    <!-- <default> УДАЛИТЬ СТРОКУ
    <disk>default</disk> УДАЛИТЬ СТРОКУ
    <max_data_part_size_bytes>10000000</max_data_part_size_bytes> УДАЛИТЬ СТРОКУ
    </default> УДАЛИТЬ СТРОКУ -->
    <disk_1_vol> <!-- name of volume -->
    <!--
    we have only one disk in that volume
    and we reference here the name of disk
    as configured above in <disks> section
    -->
    <disk>disk_1</disk>
    </disk_1_vol>
    </volumes>
    <move_factor>0.99</move_factor>
    </move_from_default_to_disk_1>
    </policies>
    </storage_configuration>
    </yandex>
  7. Clickhouse автоматически не перезагружает конфигурационный файл. Поскольку мы удалили некоторые диски из политики хранения, необходимо перезапустить сервер Clickhouse вручную

  8. Перезапустите сервер ClickHouse:

    sudo systemctl restart clickhouse-server
  9. Убедитесь, что политика хранения использует правильные диски, выполнив следующий запрос:

    SELECT * FROM system.storage_policies WHERE policy_name='move_from_default_to_disk_1';