Настройка ClickHouse
Содержание
Настройка сервера
Для настройки сервера ClickHouse используется XML-файл /etc/clickhouse-server/config.xml
.
Настройка журналов
Для настройки журналирования используется секция clickhouse
/logger
:
<clickhouse>
<logger>
<level>warning</level>
<log>/var/log/clickhouse-server/clickhouse-server.log</log>
<errorlog>/var/log/clickhouse-server/clickhouse-server.err.log</errorlog>
<size>1000M</size>
<count>10</count>
</logger>
</clickhouse>
Назначение опций:
level
- уровень журналирования:test
- для использования только разработчиками,trace
,debug
,information
,notice
,warning
,error
,critical
,fatal
,none
- отключение журналирования,log
- файл журнала со всеми сообдениями уровня level,errorlog
- файл журнала ошибок,size
- размер одного файла журнала, по достижении которого ClickHouse продолжит ведение журнала в новом файле,count
- количество архивных файлов журнала.
Также имеется возможность вести журнал через syslog. Подробности см. в официальной документации.
Документация ClickHouse / Конфигурационные параметры сервера / logger
Настройка доступа по протоколу MySQL
Для включения доступа к серверу ClickHouse по протоколу MySQL можно добавить в секцию clickhouse
опцию mysql_port
:
<clickhouse>
<mysql_port>9004</mysql_port>
</clickhouse>
Документация ClickHouse / Конфигурационные параметры сервера / mysql_port
Настройка прослушиваемых адресов
Для настройки прослушиваемых IP-адресов предназначена опция listen_host
, которую можно указывать более одного раза:
<clickhouse>
<listen_host>::1</listen_host>
</clickhouse>
Возможные варианты:
::
- прослушивание всех адресов IPv4 и IPv6,0.0.0.0
- прослушивание всех адресов только IPv4,::1
- прослушивание локального петлевого интерфейса IPv6,127.0.0.1
- прослушивание локального петлевого интерфейса IPv4.
По умолчанию клиент ClickHouse предпочитает использовать IPv6-адреса. Если сервер настроен на прослушивание только адресов IPv4, то подключиться без явного указания адреса IPv4 в таком случае не получится. Если вы не собираетесь использовать адреса IPv6, то для отключения IPv6, достаточно присвоить следующей переменной ядра значение 1:
net.ipv6.conf.all.disable_ipv6 = 1
После этого нужно перезапустить сервер ClickHouse, чтобы он закрыл сокет на адресе IPv6 и открыл сокет только на адресе IPv4:
# systemctl restart clickhouse-server
Документация ClickHouse / Конфигурационные параметры сервера / listen_host
Размер кэша несжатых данных
Для включения использования кэша несжатых данных и для настройки его размера предназначены следующие опции:
<clickhouse>
<use_uncompressed_cache>0</use_uncompressed_cache>
<uncompressed_cache_size>8589934592</uncompressed_cache_size>
</clickhouse>
Обратите внимание, что по умолчанию кэш несжатых данных отключен, а при включении его размер по умолчанию составит 8 гигабайт максимум. Кэш используется только для таблиц семейства MergeTree. Размер кэша будет увеличиваться по мере его наполнения, а по достижении максимального размера из него начнут удаляться наименее востребованные данные.
Документация ClickHouse / Конфигурационные параметры сервера / use_uncompressed_cache
Документация ClickHouse / Конфигурационные параметры сервера / uncompressed_cache_size
Размер кэша засечек
Для настройки размера кэша засечек используется опция mark_cache_size
из секции clickhouse
:
<clickhouse>
<mark_cache_size>5368709120</mark_cache_size>
</clickhouse>
По умолчанию размер кэша ограничен 5 гигабайтами. Засечки являются разновидностью индексов, которые используются для таблиц семейства MergeTree. Каждая засечка в индексе соответствует некоторому количеству строк, упорядоченных по первичному ключу. Для поиска интересующих данных ClickHouse ищет засечки, между которыми могут находиться интересующие строки, после чего считывает и фильтрует сами строки. Размер кэша будет увеличиваться по мере его наполнения, а по достижении максимального размера из него начнут удаляться нименее востребованные засечки.
Документация ClickHouse / Конфигурационные параметры сервера / mark_cache_size
Настройка журнала запросов
Для отключения всех журналов, которые ClickHouse ведёт в таблицах базы данных, кроме таблиц query_log
и query_thread_log
, можно воспользоваться такими опциями:
<clickhouse>
<asynchronous_metric_log remove="1"/>
<metric_log remove="1"/>
<part_log remove="1" />
<session_log remove="1"/>
<text_log remove="1" />
<trace_log remove="1"/>
</clickhouse>
Для отключения журналов, которые ClickHouse ведёт в таблицах query_log
и query_thread_log
, можно воспользоваться такими опциями, которые отключат ведение журналов на уровне настроек по умолчанию для всех пользователей:
<clickhouse>
<profiles>
<default>
<log_queries>0</log_queries>
<log_query_threads>0</log_query_threads>
</default>
</profiles>
</clickhouse>
Для настройки таблицы, в которой будет вестись журнал запросов, предназначена секция yandex
/query_log
файла конфигурации:
<clickhouse>
<query_log>
<database>system</database>
<table>query_log</table>
<engine>Engine = MergeTree PARTITION BY event_date ORDER BY event_time TTL event_date + INTERVAL 30 day</engine>
<flush_interval_milliseconds>7500</flush_interval_milliseconds>
</query_log>
</clickhouse>
Назначение опций:
database
- имя базы данных, в которой находится таблица журнала запросов,table
- имя таблицы журнала запросов,partition_by
- ключ секционирования таблицы, нельзя указывать вместе с опцией engine,ttl
- настройки времени хранения записей в таблице, нельзя указывать вместе с опцией engine,engine
- настройки таблицы семейства MergeTree, нельзя указывать вместе с опцией partition_by,flush_interval_milliseconds
- интервал, с которым записи из буфера будут помещаться в таблицу.
Возможные значения опции partition_by:
toStartOfHour(event_time)
- почасовые секции,event_date
- посуточные секции,toMonday(event_date)
- понедельные секции, каждая секция начинается с понедельника и заканчивается воскресеньем,toYYYYMM(event_date)
- помесячные секции.
Значения опции ttl можно указывать, например, в следующем виде: event_date + INTERVAL 30 DAY DELETE
.
Для настройки таблицы, в которой будет вестись журнал выполнения запросов отдельными потоками, предназначена секция yandex
/query_thread_log
, которая настраивается полностью аналогично предыдущей таблице.
Рекомендуется использовать посуточные секции и опцию таблицы SETTING ttl_only_drop_parts = 1
, которая предписывает не вычищать из таблицы устаревшие записи поотдельности, а удалять устаревшие секции целиком.
Документация ClickHouse / Конфигурационные параметры сервера / query_log
Altinity Knowledge Base / System tables eat my disk
Настройка пользователей
Включение управления доступом через SQL-запросы
По умолчанию список пользователей и их права настраиваются с помощью файла /etc/clickhouse-server/users.xml
. Однако ClickHouse умеет хранить эту информацию в базе данных. Для включения этой функциональности нужно вписать в файл конфигурации, в секцию, соответствующую пользователю default
, следующую опцию:
<access_management>1</access_management>
Далее нужно перезапустить сервер ClickHouse:
# systemctl restart clickhouse-server
Goodbye XML, hello SQL! ClickHouse User Management Goes Pro
Заведение пользователей
Какой бы ни использовался метод управления пользователями - через файл /etc/clickhouse-server/users.xml
или через SQL-запросы, может пригодиться вычислить хэш от пароля пользователя. Хэш в формате password_sha256_hex
или sha256_hash
можно вычислить одним из двух следующих способов:
В командной строке с помощью утилиты sha256sum
:
$ echo -n '<password>' | sha256sum | tr -d '-'
dd81ca61fb57a4ff454c1cf89335a1f5e96afa849dfad4e0116b6ec35309fdea
В клиенте ClickHouse с помощью функций hex
и SHA256
:
SELECT HEX(SHA256('<password>'));
Далее полученный хэш пароля можно вписать в файл /etc/clickhouse-server/users.xml
следующим образом (пример соответствует пользователю с именем default
):
<yandex>
<users>
<default>
<password_sha256_hex>dd81ca61fb57a4ff454c1cf89335a1f5e96afa849dfad4e0116b6ec35309fdea</password_sha256_hex>
</default>
<users>
</yandex>
Или этот же хэш пароля можно вписать в SQL-запрос для создания пользователя или изменения его пароля:
CREATE USER default IDENTIFIED WITH sha256_hash BY 'dd81ca61fb57a4ff454c1cf89335a1f5e96afa849dfad4e0116b6ec35309fdea';
ALTER USER default IDENTIFIED WITH sha256_hash BY 'dd81ca61fb57a4ff454c1cf89335a1f5e96afa849dfad4e0116b6ec35309fdea';
Creating Users and Roles in ClickHouse
Проверка учётной записи
Для проверки учётной записи можно воспользоваться клиентом ClickHouse для командной строки:
$ echo 'SELECT 1;' | clickhouse-client -h 192.168.1.2 -d db -u user --password 'p4$$w0rd'
Если на проверяемом узле не установлен клиент ClickHouse для командной строки, то для проверки учётной записи можно воспользоваться утилитой curl
и сервером HTTP, встроенным в сервер ClickHouse:
$ echo 'SELECT 1;' | curl --data-binary @- -u 'user:p4$$w0rd' 'http://192.168.1.2:8123/?database=db'
В обеих командах:
192.168.1.2
- IP-адрес или доменное имя сервера ClickHouse,db
- название базы данных, к которой есть доступ у проверяемого пользователя,user
- имя проверяемого пользователя,p4$$w0rd
- пароль проверяемого пользователя.
Drivers and Interfaces / HTTP Interface
Настройка клиента
Для настройки консольного клиента ClickHouse для входа без пароля можно создать в домашнем каталоге подкаталог .clickhouse-client
и поместить внутрь него файл config.xml
со следующим содержимым:
<config>
<host>192.168.1.2</host>
<port>9000</port>
<user>user</user>
<password>p4$$w0rd</password>
<database>db</database>
<!-- <format>PrettyCompactMonoBlock</format>
<multiline>1</multiline>
<multiquery>1</multiquery>
<stacktrace>1</stacktrace>
<pager>less -SR</pager>
<max_parser_depth>2500</max_parser_depth> -->
</config>
Где:
192.168.1.2
- IP-адрес или доменное имя сервера ClickHouse, к которому клиент будет подключаться по умолчанию,9000
- порт сервера ClickHouse, на котором он принимает подключения от клиентов, работающих по его двоичному протоколу,db
- название базы данных, к которой пользователь будет подключен по умолчанию,user
- имя пользователя,p4$$w0rd
- пароль пользователя.
В файле конфигурации можно указать значение для любой опции командной строки: несколько примеров приведено в закомментированном блоке между символами <!--
и -->
.