Настройка нового кластера ClickHouse

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

Инструкция предлагает автоматизированный способ установки ClickHouse с помощью Ansible-плейбука.

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

  • Debian 11, 12;

  • РЕД ОС 7.3, 8.0;

  • Rocky Linux 8, 9.

Установку ClickHouse можно осуществлять как на одном из узлов кластера, так и на АРМ администратора — отдельном узле, имеющем сетевой доступ к узлам кластера. На АРМ администратора может быть установлена любая операционная система семейства Linux.

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

Если вы установили ClickHouse самостоятельно, перейдите к разделу Установка PostgreSQL на выделенном сервере.

Установка ClickHouse

Чтобы запустить установку:

  1. Скачайте следующие архивы:

    Если у вас есть скачанный установщик системы, архивы можно загрузить из его меню. Для этого:

    1. Запустите установщик системы:

      bash ./evo.platform_<version>.run

      Требуемая версия bash: 4.0 или выше.

      Или сделайте файл установщика исполняемым и запустите непосредственно:

      chmod +x ./evo.platform_<version>.run
      ./evo.platform_<version>.run
    2. Выберите режим работы Downloading additional packages.

      install additional packages

    3. Загрузите необходимый дополнительный пакет.

  2. Распакуйте архив подготовительных пакетов:

    mkdir -p ./sysprep
    tar xvf ./<sysprep_archive> -C ./sysprep

    Здесь:

    • <sysprep_archive> — архив подготовительных пакетов для вашей ОС: sys-prep-clickhouse-debian.tar.gz, sys-prep-clickhouse-redos.tar.gz или sys-prep-clickhouse-rocky.tar.gz.

  3. Запустите скрипт установки Ansible:

    cd ./sysprep
    ./update-system.sh ansible

    Скрипт установит Ansible и коллекции, требуемые для работы плейбука установки кластера ClickHouse.

  4. Вернитесь в директорию, в которую был загружен архив с Ansible-плейбуком, и распакуйте его:

    cd ..
    tar xvf clickhouse-cluster.tar.gz
    В дальнейшем полный путь к директории, в которую распакован архив плейбука, будет упоминаться как <clickhouse_playbook_dir>.
  5. Перейдите в директорию <clickhouse_playbook_dir> и измените файл inventory/hosts.ini:

    1. В разделе [clickhouse] укажите полные доменные имена (FQDN) узлов, на которых будет развернут кластер ClickHouse.

    2. В разделе [clickhouse_keeper] укажите FQDN узлов кластера, которым будет присвоена роль Keeper. Эта роль требуется для координации работы узлов.

      Рекомендуется использовать нечетное количество узлов с ролью Keeper, не менее трех, поскольку для консенсуса используется алгоритм Raft, который принимает решения по правилу большинства.
    3. В разделе [clickhouse_shard<shard_id>] укажите FQDN узлов, на которых будут размещены реплики шарда с номером <shard_id>. Каждый узел в списке соответствует одной реплике. Номера шардов должны быть неповторяющимися целыми числами, начиная с 0. Порядок номеров не важен.

    Пример содержимого файла hosts.ini

    В данном примере настроен кластер ClickHouse из 5 узлов, 3 из которых имеют роль Keeper. Кластер состоит из 2 шардов, по 2 реплики для каждого.

    [clickhouse]
    node1.my.lan
    node2.my.lan
    node3.my.lan
    node4.my.lan
    node5.my.lan
    
    [clickhouse_keeper]
    node1.my.lan
    node2.my.lan
    node3.my.lan
    
    [clickhouse_shard1]
    node1.my.lan
    node2.my.lan
    
    [clickhouse_shard2]
    node4.my.lan
    node5.my.lan
  6. Настройте подключение к кластеру и параметры сервера ClickHouse в файле inventory/group_vars/clickhouse.yml:

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

      К паролям пользователей предъявляются следующие требования:

      • Пароль может содержать только строчные латинские буквы (a—​z), заглавные латинские буквы (A—​Z) и цифры (0—​9).

      • Минимальная длина пароля: 8 знаков.

      Эти пароли необходимо использовать на этапах настройки общесистемного экземпляра ClickHouse и ClickHouse для событий ИБ при установке системы.

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

      • dcc_clickhouse_user — имя пользователя.

      • dcc_clickhouse_password — пароль пользователя.

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

      • owner — пользователь с расширенным набором прав. Используется для создания, обновления и удаления таблиц (хранилищ событий), а также получения служебной информации.

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

      • reader — пользователь с правами только на чтение. Используется для выполнения поисковых запросов.

      Пример настроек данных пользователей в clickhouse.yml
      dcc_clickhouse_user: evo-user
      dcc_clickhouse_password: EvoUserPassword
      dcc_owner_password: OwnerPassword
      dcc_writer_password: WriterPassword
      dcc_reader_password: ReaderPassword
    2. Если необходимо включить шифрование трафика между системой и кластером ClickHouse (режим SSL), добавьте в файл inventory/group_vars/clickhouse.yml следующие строки:

      dcc_clickhouse_ssl_enabled: true
      dcc_https_port: <https_port>

      Здесь:

      • <https_port> — порт для взаимодействия с ClickHouse по протоколу HTTPS. По умолчанию 8443.

      Опция dcc_clickhouse_ssl_enabled включает прослушивание HTTPS-трафика по порту dcc_https_port. Также включается шифрование gRPC-трафика по порту dcc_grpc_port. При этом HTTP-порт dcc_http_port остается открытым, однако порт dcc_grpc_port принимает только зашифрованный трафик.

      Подробное описание назначения портов dcc_https_port, dcc_http_port и dcc_grpc_port приведено в разделе Порты для взаимодействия системы и ClickHouse.

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

      • Имена параметров следует записывать с префиксом dcc: например, dcc_background_buffer_flush_schedule_pool_size.

      • Значения параметров по умолчанию можно просмотреть в файле roles/clickhouse_cluster/defaults/main.yml. Редактировать этот файл не рекомендуется.

      Пример настроек в clickhouse.yml
      # Учетные данные пользователей ClickHouse.
      dcc_clickhouse_user: evo-user
      dcc_clickhouse_password: EvoUserPassword
      dcc_owner_password: OwnerPassword
      dcc_writer_password: WriterPassword
      dcc_reader_password: ReaderPassword
      
      # API-порт для взаимодействия системы и ClickHouse.
      dcc_grpc_port: 9100
      # HTTP-порт для взаимодействия системы и ClickHouse. По умолчанию порт 8123, можно скорректировать (будет запрошен установщиком системы).
      dcc_http_port: 8123
      # HTTPS-порт для взаимодействия системы и ClickHouse. По умолчанию порт 8443, можно скорректировать (будет запрошен установщиком системы).
      dcc_https_port: 8443
      
      # Параметры сервера ClickHouse.
      dcc_background_buffer_flush_schedule_pool_size: 6
      dcc_background_common_pool_size: 4
      dcc_background_distributed_schedule_pool_size: 8
      dcc_background_fetches_pool_size: 4
      dcc_background_message_broker_schedule_pool_size: 8
      dcc_background_move_pool_size: 4
      dcc_background_pool_size: 8
      dcc_background_merges_mutations_concurrency_ratio: 4
      dcc_background_schedule_pool_size: 64
      dcc_mark_cache_size: 5368709120
      dcc_max_concurrent_queries: 0
      dcc_max_server_memory_usage_to_ram_ratio: 0.9
      dcc_max_server_memory_usage: 0
      dcc_input_format_allow_errors_num: 0
      dcc_input_format_allow_errors_ratio: 1
      dcc_max_execution_time: 10
      dcc_queue_max_wait_ms: 1000
      dcc_connect_timeout_with_failover_ms: 750
      dcc_connections_with_failover_max_tries: 2
      dcc_skip_unavailable_shards: 1
      dcc_insert_distributed_sync: 0
      dcc_prefer_localhost_replica: true
      dcc_allow_suspicious_ttl_expressions: 1
      
      # Параметры таблиц MergeTree.
      dcc_max_bytes_to_merge_at_max_space_in_pool: 2147483648
      dcc_merge_max_block_size: 2048
      dcc_number_of_free_entries_in_pool_to_lower_max_size_of_merge: 4
      dcc_max_suspicious_broken_parts: 500
      
      # Директории хранения данных.
      dcc_hot_volume_path: /var/lib/clickhouse/hot-1/
      dcc_cold_volume_path: /var/lib/clickhouse/cold-1/
  7. Вернитесь в директорию, в которую загружены архивы подготовительных пакетов и плейбука.

  8. Скопируйте архив подготовительных пакетов в директорию files распакованного архива плейбука:

    cp <sysprep_archive> <clickhouse_playbook_dir>/files

    Здесь:

    • <sysprep_archive> — архив подготовительных пакетов для вашей ОС: sys-prep-clickhouse-debian.tar.gz, sys-prep-clickhouse-redos.tar.gz или sys-prep-clickhouse-rocky.tar.gz.

  9. Если вы включили опцию dcc_clickhouse_ssl_enabled, настройте TLS-сертификаты для работы ClickHouse в режиме SSL.

    По умолчанию роль generate_certificates, встроенная в плейбук, производит генерацию самоподписанных сертификатов. Все генерируемые сертификаты и ключи сохраняются в директории <clickhouse_playbook_dir>/files/certs на хосте, с которого производится запуск плейбука.

    Если у вас есть заранее подготовленные TLS-сертификаты, которые вы хотите использовать для ClickHouse, выполните следующие действия:

    1. В директории <clickhouse_playbook_dir>/files создайте директорию certs.

    2. Добавьте в директорию certs файлы сертификатов и ключей, соблюдая следующие правила именования:

      Имя файла Назначение

      ca-certificate.crt

      Сертификат доверенного центра сертификации.

      ca-certificate.key

      Ключ доверенного центра сертификации.

      Данный ключ используется для выпуска и подписания сертификатов, которые генерируются ролью generate_certificates при работе плейбука.

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

      <node_fqdn>_server.crt

      Сертификат сервера, выпущенный доверенным центром сертификации.

      Сертификаты должны быть сгенерированы для каждого узла кластера ClickHouse.

      <node_fqdn>_server.key

      Приватный ключ для сертификата <node_fqdn>_server.crt.

      Приватные ключи должны быть сгенерированы для каждого узла кластера ClickHouse.

      Здесь:

      • <node_fqdn> — FQDN узла, указанное в файле hosts.ini.

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

    Если установка системы будет производиться не с того же хоста, с которого выполняется развертывание ClickHouse, скопируйте сертификат доверенного центра сертификации <clickhouse_playbook_dir>/files/certs/ca-certificate.crt на этот хост.

    Путь к сертификату центра сертификации на хосте, с которого производится установка системы, потребуется указать на этапе ClickHouse setup установки системы.

  10. Перейдите в директорию распакованного архива и запустите плейбук установки:

    cd <clickhouse_playbook_dir>
    ansible-playbook -i inventory/hosts.ini playbooks/deploy_clickhouse_cluster.yml

    Опциональные параметры запуска плейбука:

    • -u <user> — имя пользователя, от имени которого будет создана SSH-сессия для развертывания ClickHouse.

    • -K — запрос пароля, если для выполнения операций от имени пользователя, который производит развертывание, требуется повышение привилегий.

    • -vvv — расширенное логирование.

После установки кластера ClickHouse рекомендуется настроить балансировку запросов к его узлам. Методы балансировки запросов к СУБД описаны в разделе Настройка балансировки запросов к ClickHouse и PostgreSQL.

Параметры кластера ClickHouse

Порты для взаимодействия системы и ClickHouse

API-порт для взаимодействия системы и ClickHouse задается в параметре dcc_grpc_port. По умолчанию установлен порт 9100.

Для взаимодействия системы и ClickHouse по протоколу HTTP по умолчанию используется порт 8123. Его можно изменить в параметре dcc_http_port.

Для взаимодействия системы и ClickHouse по протоколу HTTPS по умолчанию используется порт 8443. Его можно изменить в параметре dcc_https_port.

Параметры ClickHouse

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

Пример настройки параметров ClickHouse
dcc_background_buffer_flush_schedule_pool_size: 6
dcc_background_common_pool_size: 4
dcc_background_distributed_schedule_pool_size: 8
dcc_background_fetches_pool_size: 4
dcc_background_message_broker_schedule_pool_size: 8
dcc_background_move_pool_size: 4
dcc_background_pool_size: 8
dcc_background_merges_mutations_concurrency_ratio: 4
dcc_background_schedule_pool_size: 64
dcc_mark_cache_size: 5368709120
dcc_max_concurrent_queries: 0
dcc_max_server_memory_usage_to_ram_ratio: 0.9
dcc_max_server_memory_usage: 0
dcc_input_format_allow_errors_num: 0
dcc_input_format_allow_errors_ratio: 1
dcc_max_execution_time: 10
dcc_queue_max_wait_ms: 1000
dcc_connect_timeout_with_failover_ms: 750
dcc_connections_with_failover_max_tries: 2
dcc_skip_unavailable_shards: 1
dcc_insert_distributed_sync: 0
dcc_prefer_localhost_replica: true
dcc_allow_suspicious_ttl_expressions: 1
Пример настройки параметров таблиц MergeTree
dcc_max_bytes_to_merge_at_max_space_in_pool: 2147483648
dcc_merge_max_block_size: 2048
dcc_number_of_free_entries_in_pool_to_lower_max_size_of_merge: 4
dcc_max_suspicious_broken_parts: 500

Директории хранения данных

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

  • dcc_hot_volume_path — директория для хранения часто используемых данных (горячее хранение);

  • dcc_cold_volume_path — директории для хранения редко используемых данных (холодное хранение).

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

Пример настройки директорий хранения
dcc_hot_volume_path: /var/lib/clickhouse/hot-1/
dcc_cold_volume_path: /var/lib/clickhouse/cold-1/

Если планируется хранить события в отдельной директории, то:

  1. Создайте необходимые директории под горячее и холодное хранение данных с помощью команды:

    mkdir <dir_path>

    Здесь:

    • <dir_path> — путь до директории горячего или холодного хранения.

  2. Выдайте права на созданные директории группе пользователей clickhouse с помощью команды:

    chown -R clickhouse:clickhouse <dir_path>

    Здесь:

    • <dir_path> — путь до директории горячего или холодного хранения.

  3. Укажите пути до созданных директорий в параметрах dcc_hot_volume_path и dcc_cold_volume_path в файле clickhouse.yml.

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

Например, необходимо хранить события ClickHouse в директориях /storage/hot (горячее хранение) и /storage/cold (холодное хранение).

Чтобы настроить хранение в этих директориях:

  1. Создайте директории с помощью команд:

    mkdir /storage/hot
    mkdir /storage/cold
  2. Выдайте права на директории группе пользователей clickhouse с помощью команд:

    chown -R clickhouse:clickhouse /storage/hot
    chown -R clickhouse:clickhouse /storage/cold

    Если в директории /storage планируется хранение только данных событий ClickHouse, то, вместо выдачи прав на каждую поддиректорию по отдельности, вы можете выдать права сразу на всю директорию /storage:

    chown -R clickhouse:clickhouse /storage
  3. Укажите пути до директорий в параметрах dcc_hot_volume_path и dcc_cold_volume_path в файле clickhouse.yml:

    dcc_hot_volume_path: /storage/hot/
    dcc_cold_volume_path: /storage/cold/

Была ли полезна эта страница?

Обратная связь