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

Базовая настройка ClickHouse

Основные настройки конфигурации

Основные конфигурационные файлы ClickHouse находятся в директории /etc/clickhouse-server/:

  • /etc/clickhouse-server/config.xml - основной файл конфигурации сервера
  • /etc/clickhouse-server/users.xml - файл конфигурации пользователей и прав доступа

Дополнительно, в ClickHouse используются директории для удобного управления конфигурациями:

  • /etc/clickhouse-server/conf.d/ - предназначена для дополнительных конфигурационных файлов сервера. В эту директорию можно добавлять файлы с расширениями для базовой конфигурации сервера, чтобы не изменять основной config.xml.
  • /etc/clickhouse-server/users.d/ - используется для управления конфигурацией пользователей. В эту директорию можно добавлять файлы с конфигурациями пользователей, что облегчает управление правами доступа и настройками пользователей.

Все дополнительные конфигурации должны иметь формат .xml, как и основной файл конфигурации.

Настройка параметров сервера

Чтобы ClickHouse работал стабильно и эффективно, важно правильно настроить параметры сервера.

Логирование

Логирование помогает отслеживать работу ClickHouse и выявлять возможные проблемы.

<clickhouse>
<logger>
<level>information</level>
<log>/var/log/clickhouse-server/clickhouse-server.log</log>
<errorlog>/var/log/clickhouse-server/clickhouse-server.err.log</errorlog>
<size>100M</size>
<count>10</count>
</logger>
</clickhouse>

Расположение основны логов определяется параметрами <log> (логи со всеми сообщениями) и <errorlog> (логи содержащие ошибки). Параметры <size> и count определяют настройки ротации логов, а <level> задаёт уровень логирования.

Порты соединений

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

<clickhouse>
<http_port>8123</http_port>
<tcp_port>9000</tcp_port>
</clickhouse>
  • Порт для HTTP (<http_port>). Порт 8123 используется по умолчанию для HTTP-запросов.
  • Порт для TCP (<tcp_port>). Порт 9000 используется для TCP-соединений, которые ClickHouse использует для работы с клиентами и другими серверами.

Также можно настроить SSL для TCP, чтобы шифровать данные, передаваемые между клиентами и сервером. В таком случае рекомендуется использовать другой порт, например 9440, для зашифрованных соединений. По умолчанию рекомендуется разрешить доступ к следующим портам:

  • 9000/tcp - для нативного TCP протокола ClickHouse
  • 8123/tcp - для HTTP интерфейса ClickHouse

Для доступности портов внешним клиентом используйте следующие команды: Для систем на базе Debian, использующих ufw:

sudo ufw allow 9000/tcp  # Открыть порт для TCP соединений ClickHouse
sudo ufw allow 8123/tcp # Открыть порт для HTTP интерфейса ClickHouse
sudo ufw reload # Применить изменения

Для систем на базе RHEL, использующих firewalld:

sudo firewall-cmd --zone=public --add-port=9000/tcp --permanent  # Открыть порт для TCP соединений ClickHouse
sudo firewall-cmd --zone=public --add-port=8123/tcp --permanent # Открыть порт для HTTP интерфейса ClickHouse
sudo firewall-cmd --reload # Применить изменения

Полный список портов, используемых clickhouse:

ПортОписание
8123Стандартный HTTP-порт.
8443Стандартный HTTP SSL/TLS-порт.
9000Порт нативного протокола (также известен как ClickHouse TCP-протокол). Используется приложениями и процессами ClickHouse, такими как clickhouse-server, clickhouse-client и родные инструменты ClickHouse. Используется для межсерверной коммуникации для распределенных запросов.
9004Порт эмуляции MySQL.
9005Порт эмуляции PostgreSQL (также используется для безопасного соединения, если включен SSL для ClickHouse).
9009Порт межсерверной коммуникации для низкоуровневого доступа к данным. Используется для обмена данными, репликации и межсерверной коммуникации.
9010SSL/TLS для межсерверной коммуникации.
9011Порт нативного протокола PROXYv1.
9019Порт JDBC моста.
9100Порт gRPC.
9181Рекомендуемый порт ClickHouse Keeper.
9234Рекомендуемый порт ClickHouse Keeper Raft (также используется для безопасной коммуникации, если <secure>1</secure> включен).
9363Стандартный порт для метрик Prometheus.
9281Рекомендуемый порт Secure SSL для ClickHouse Keeper.
9440SSL/TLS порт нативного протокола.
42000Стандартный порт для Graphite.

Пути к файлам данных

Правильная настройка путей к данным помогает организовать хранение данных, временных файлов и пользовательских данных.

Пример конфигурации представлен ниже:

<clickhouse>
<path>/var/lib/clickhouse/</path>
<tmp_path>/var/lib/clickhouse/tmp/</tmp_path>
<clickhouse>
  • Основной путь для хранения данных (<path>). Рекомендуется использовать выделенный раздел или диск для хранения данных, особенно если вы работаете с большими объемами.
  • Путь для временных файлов (<tmp_path>). Временные файлы часто создаются при выполнении крупных запросов или при сортировке данных. Рекомендуется указывать путь на диск с высокой скоростью записи и достаточным свободным пространством.

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

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

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

Пользователи в ClickHouse настраиваются с помощью дополнительных конфигурационных файлов в директории /etc/clickhouse-server/users.d. Дополнительные конфигурационные файлы позволяют добавить новых пользователей, задать пароли и определить, из каких сетей пользователь может обращаться к серверу ClickHouse.

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

<clickhouse>
<users>
<default>
<password>your_password</password>
<networks>
<ip>::/0</ip>
</networks>
<profile>default</profile>
</default>
</users>
</clickhouse>

Описание параметров:

  • <default> - имя пользователя. По умолчанию, в ClickHouse существует пользователь default с базовыми настройками. Вы можете создавать новых пользователей, добавляя дополнительные блоки с именами пользователей вместо default.

  • <password> - пароль пользователя. Пароль может быть задан:

    • В открытом виде - пароль прописывается в исходном виде, например, <password>MyStrongP@ssWoRd</password>.

    • В виде хеша - вместо самого пароля задаётся его хэш (например SHA256). Для этого вместо тега <password> можно использовать такие теги, как <password_sha256_hex> или <password_double_sha1_hex>, например:

      <password_sha256_hex>c2a1f9160a14a9d2e0eced4b5cf5998e5eebc54cf45b8e3742d2a9c2b1f23368</password_sha256_hex>
  • <networks> - блок определяет, с каких IP-адресов или сетей пользователь может подключаться к ClickHouse.

    <ip>::/0</ip> - разрешает доступ со всех IP-адресов. Это подходит для тестовой среды, но в production рекомендуется ограничить доступ конкретными сетями или IP-адресами для повышения безопасности.

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

    <ip>192.168.0.0/24</ip>
  • <profile> - определяет ограничения и права для пользователя, такие как лимиты на использование ресурсов, доступ к базам данных, таблицам и т.д.

Настройка прав доступа

Права доступа в ClickHouse управляются через профили пользователей и права, присваиваемые этим профилям. Вы можете ограничить доступ к базам данных, таблицам, а также ограничивать список операций которые может выполнять пользователь (например, SELECT, INSERT, DROP).

Например, в конфигурации ниже для пользователя устанавливается ограничение по максимальному количеству используемой памяти и типу операций, которые может выполнять пользователь - только операции чтения:

<clickhouse>
<profiles>
<restricted_user>
<max_memory_usage>1000000000</max_memory_usage>
<readonly>1</readonly>
</restricted_user>
</profiles>
</clickhouse>

Подробнее про профили вы можете прочитать в официальной документации clickhouse. После внесения изменений перезапустите сервер ClickHouse для применения настроек:

sudo systemctl restart clickhouse-server

Оптимизация хранения данных

Сжатие данных

В clickhouse может активно использоваться сжатие, которое позволяет достигать уменьшения объема хранимых данных в несколько раз. Пример конфигурации представлен ниже:

<clickhouse>
<compression>
<case>
<min_part_size>10000000000</min_part_size>
<min_part_size_ratio>0.01</min_part_size_ratio>
<method>zstd</method>
</case>
</compression>
</clickhouse>

Описание параметров:

  • <min_part_size> - определяет минимальный размер части данных (в байтах), к которой будет применяться указанная схема сжатия.

    Обычно стоит оставить этот параметр на уровне 10000000000 (10 ГБ), если у вас большие объемы данных. Для меньших объемов данных этот параметр может быть уменьшен. Однако, в большинстве случаев лучше оставить значение по умолчанию, так как это обеспечивает хорошее соотношение между степенью сжатия и производительностью.

  • <min_part_size_ratio> - определяет минимальное отношение размера части данных к размеру всего раздела, при котором будет применяться схема сжатия.

    Значение 0.01 означает, что сжатие будет применяться, если размер части данных составляет не менее 1% от общего объема раздела. Это значение можно оставить по умолчанию, так как оно хорошо сбалансировано для большинства случаев.

  • <method> - определяет метод сжатия, который будет использоваться для данных. В данном примере используется метод zstd (Zstandard), который обеспечивает высокую степень сжатия при приемлемой скорости работы.

Рекомендации по использованию методов сжатия:

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

Если у вас есть специфические требования к сжатию (например, более высокая степень сжатия или компромисс в пользу скорости), вы можете рассмотреть другие методы, такие как deflate или gzip. Но в большинстве случаев zstd является лучшим выбором для ClickHouse.