Пакеты с клиентом и сервером Clickhouse имеются в официальных репозиториях Debian Buster. Для их установки можно воспользоваться следующей командой:
# apt-get install clickhouse-server clickhouse-client
Для работы серверу Clickhouse требуется поддержка дополнительных процессорных инструкций SSE 4.2. Чтобы проверить наличие поддержки этих инструкций и пересобрать Clickhouse, если они не поддерживаются, обратитесь к статье Пересборка Clickhouse для процессоров без поддержки SSE 4.2.
В каталоге /etc/clickhouse-server находится файл config.xml с настройками сервера и файл users.xml с настройками пользователей. Оба файла хорошо прокомментированы, но из-за обилия настроек ориентироваться в них довольно тяжело. Я переименовал эти файлы, чтобы создать более компактные файлы конфигурации:
# cd /etc/clickhouse-server/ # cp users.xml users.xml.sample # cp config.xml config.xml.sample
В файл конфигурации config.xml я вписал следующие настройки:
<?xml version="1.0"?> <yandex> <logger> <level>warning</level> <log>/var/log/clickhouse-server/clickhouse-server.log</log> <errorlog>/var/log/clickhouse-server/clickhouse-server.err.log</errorlog> <size>10M</size> <count>10</count> </logger> <display_name>ufa</display_name> <http_port>8123</http_port> <tcp_port>9000</tcp_port> <listen_host>0.0.0.0</listen_host> <max_connections>4096</max_connections> <keep_alive_timeout>3</keep_alive_timeout> <max_concurrent_queries>16</max_concurrent_queries> <uncompressed_cache_size>1073741824</uncompressed_cache_size> <mark_cache_size>5368709120</mark_cache_size> <path>/var/lib/clickhouse/</path> <tmp_path>/var/lib/clickhouse/tmp/</tmp_path> <user_files_path>/var/lib/clickhouse/user_files/</user_files_path> <users_config>users.xml</users_config> <default_profile>default</default_profile> <default_database>zabbix</default_database> <timezone>Asia/Yekaterinburg</timezone> <mlock_executable>true</mlock_executable> <builtin_dictionaries_reload_interval>3600</builtin_dictionaries_reload_interval> <max_session_timeout>3600</max_session_timeout> <default_session_timeout>60</default_session_timeout> <max_table_size_to_drop>0</max_table_size_to_drop> <max_partition_size_to_drop>0</max_partition_size_to_drop> <format_schema_path>/var/lib/clickhouse/format_schemas/</format_schema_path> </yandex>
Смысл большинства настроек можно понять из их названия. Кратко опишу некоторые из них:
Файл users.xml я привёл к следующему виду:
<?xml version="1.0"?> <yandex> <users> <zabbix> <password>zabbix</password> <networks> <ip>127.0.0.1</ip> </networks> <profile>default</profile> <quota>default</quota> </zabbix> </users> <profiles> <default> <max_memory_usage>2147483648</max_memory_usage> <max_query_size>1048576</max_query_size> <max_ast_elements>1000000</max_ast_elements> <use_uncompressed_cache>1</use_uncompressed_cache> <load_balancing>random</load_balancing> <readonly>0</readonly> </default> <readonly> <readonly>1</readonly> </readonly> </profiles> <quotas> <default> <interval> <duration>3600</duration> <queries>0</queries> <errors>0</errors> <result_rows>0</result_rows> <read_rows>0</read_rows> <execution_time>0</execution_time> </interval> </default> </quotas> </yandex>
Файл состоит из трёх секций:
В примере конфигурации выше описан пользователь zabbix с паролем zabbix, который может устанавливать подключения к серверу только с IP-адреса 127.0.0.1, использует профиль default и квоту default.
В профиле default выставлены следующие настройки:
В квоте default выставлено единственное ограничение - длительность обработки запроса ограничена одним часом.
Включим автозапуск сервера:
# systemctl enable clickhouse-server.service
Запустим сервер:
# systemctl start clickhouse-server.service
Если спустя некоторое время в журнале /var/log/clickhouse-server/clickhouse-server.err.log появляются ошибки следующего вида:
2020.04.17 10:44:51.741280 [ 6317714 ] {} <Error> HTTPHandler: std::exception. Code: 1001, type: std::system_error, e.what() = Resource temporarily unavailable
То может помочь увеличение переменной ядра vm.max_map_count следующей командой:
# sysctl -w vm.max_map_count = 524288
Если изменение этой настройки помогло справиться с проблемой, можно прописать её в файл /etc/sysctl.conf, чтобы оно автоматически применялось при загрузке системы:
vm.max_map_count=524288
В документации ядра Linux эта переменная ядра объясняется следующим образом:
This file contains the maximum number of memory map areas a process may have. Memory map areas are used as a side-effect of calling malloc, directly by mmap and mprotect, and also when loading shared libraries.
While most applications need less than a thousand maps, certain programs, particularly malloc debuggers, may consume lots of them, e.g., up to one or two maps per allocation.
The default value is 65536.
Перевод:
Этот файл содержит максимальное количество участков памяти, которое может иметь процесс. Участки памяти косвенно создаются при вызове malloc, а напрямую - при вызове mmap и mprotect, а также при загрузке разделяемых библиотек.
Хотя большинству приложений требуется меньше тысячи участков, некоторые программы, в частности отладчики malloc, могут потреблять значительное их количество, от одного до двух участков при каждом выделении памяти.
Значение по умолчанию - 65536.