Базовая настройка 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 | Порт межсерверной коммуникации для низкоуровневого доступа к данным. Используется для обмена данными, репликации и межсерверной коммуникации. | 
| 9010 | SSL/TLS для межсерверной коммуникации. | 
| 9011 | Порт нативного протокола PROXYv1. | 
| 9019 | Порт JDBC моста. | 
| 9100 | Порт gRPC. | 
| 9181 | Рекомендуемый порт ClickHouse Keeper. | 
| 9234 | Рекомендуемый порт ClickHouse Keeper Raft (также используется для безопасной коммуникации, если <secure>1</secure>включен). | 
| 9363 | Стандартный порт для метрик Prometheus. | 
| 9281 | Рекомендуемый порт Secure SSL для ClickHouse Keeper. | 
| 9440 | SSL/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.