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

Установка и настройка кластера ClickHouse с нуля выполняется автономно с помощью Ansible-плейбука и рассчитана на Red OS 7.3. Плейбук содержится в архиве clickhouse_offline-playbook.zip, который поставляется сетевыми инженерами по запросу.

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

Подготовка к установке

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

  1. Перейдите в директорию /etc/yum.repos.d, содержащую конфигурационные файлы репозиториев:

    cd /etc/yum.repos.d
  2. Включите репозиторий RedOS-Base:

    1. Откройте файл RedOS-Base.repo любым удобным способом.

      Пример 1. Пример открытия файла через редактор vi
      vi RedOS-Base.repo
    2. Измените в файле значение параметра enabled на 1:

      enabled=1
  3. Включите репозиторий RedOS-Updates:

    1. Откройте файл RedOS-Updates.repo любым удобным способом.

      Пример 2. Пример открытия файла через редактор vi
      vi RedOS-Updates.repo
    2. Измените в файле значение параметра enabled на 1:

      enabled=1

Установка ClickHouse

Действия выполняются на управляющем узле кластера.

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

  1. Скачайте и распакуйте архив clickhouse_offline-playbook.zip на управляющем узле кластера Kubernetes.

  2. Перейдите в директорию распакованного архива и измените файл hosts.ini:

    • В разделе [clickhouse] укажите полные доменные адреса (FQDN) машин, на которых будет развернут кластер ClickHouse. Рядом с каждым адресом необходимо также указать ее идентификатор id. Рекомендуется указывать id по порядку начиная с "1".

    • В разделе [clickhouse:vars] укажите данные учетной записи с правами администратора для работы под суперпользователем. Если к узлам кластера настроен SSH-доступ, то удалите строку ansible_password.

    Пример содержимого файла hosts.ini
    [clickhouse]
    localhost.localdomain1 id=1
    localhost.localdomain2 id=2
    [clickhouse:vars]
    ansible_user=user
    ansible_password=password
  3. Перейдите в директорию roles/clickhouse-role/defaults в распакованном архиве и настройте параметры кластера в файле main.yml. Перечень параметров приведен в разделе Параметры кластера ClickHouse данной статьи.

    Пример содержимого файла main.yml
    clickhouse_version: "24.3.1.2672"
    # Учетные данные для подключения к СУБД.
    clickhouse_user: user
    clickhouse_password: password
    # Переменные для файлов конфигурации ClickHouse и Keeper. Оставить без изменений.
    clickhouse_servers: "{{ groups['clickhouse'] }}"
    # API-порт для взаимодействия SIEM и ClickHouse.
    grpc_port: 9101
    # HTTP-порт для взаимодействия SIEM и Clickhouse. По умолчанию порт 8123, можно скорректировать (будет запрошен установщиком SIEM).
    http_port: 8123
    # Пароли пользователей owner, writer, reader.
    owner_password: OwnerPassword
    writer_password: WriterPassword
    reader_password: ReaderPassword
    
    # Параметры сервера ClickHouse.
    background_buffer_flush_schedule_pool_size: 6
    background_common_pool_size: 4
    background_distributed_schedule_pool_size: 8
    background_fetches_pool_size: 4
    background_message_broker_schedule_pool_size: 8
    background_move_pool_size: 4
    background_pool_size: 8
    background_merges_mutations_concurrency_ratio: 4
    background_schedule_pool_size: 64
    mark_cache_size: 5368709120
    max_concurrent_queries: 0
    max_server_memory_usage: 0
    # Параметры таблиц MergeTree.
    max_bytes_to_merge_at_max_space_in_pool: 2147483648
    merge_max_block_size: 2048
    number_of_free_entries_in_pool_to_lower_max_size_of_merge: 4
    max_suspicious_broken_parts: 500
    
    # Директории хранения данных.
    hot_volume_path: /var/lib/clickhouse/hot-1/
    cold_volume_path: /var/lib/clickhouse/cold-1/
  4. Перейдите в директорию распакованного архива и запустите плейбук установки:

    ansible-playbook main.yml -i hosts.ini -K -vvv

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

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

Учетные данные для подключения к СУБД

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

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

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

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

API-порт для взаимодействия R-Vision SIEM и ClickHouse задается в параметре grpc_port.

По умолчанию установлен порт 9100. Порт 9100 используется для приложения Node Exporter на рабочих и управляющих узлах кластера, поэтому рекомендуется задать другой порт, например 9101.

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

Пароли пользователей owner, writer, reader

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

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

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

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

Пароли для этих пользователей задаются в параметрах owner_password, writer_password и reader_password соответственно. Пароли должны отвечать следующим требованиям:

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

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

Эти пароли необходимо использовать на этапе ClickHouse config установки R-Vision SIEM.

Параметры ClickHouse

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

Пример настройки параметров ClickHouse
background_buffer_flush_schedule_pool_size: 6
background_common_pool_size: 4
background_distributed_schedule_pool_size: 8
background_fetches_pool_size: 4
background_message_broker_schedule_pool_size: 8
background_move_pool_size: 4
background_pool_size: 8
background_merges_mutations_concurrency_ratio: 4
background_schedule_pool_size: 64
mark_cache_size: 5368709120
max_concurrent_queries: 0
max_server_memory_usage: 0
Пример настройки параметров таблиц MergeTree
max_bytes_to_merge_at_max_space_in_pool: 2147483648
merge_max_block_size: 2048
number_of_free_entries_in_pool_to_lower_max_size_of_merge: 4
max_suspicious_broken_parts: 500

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

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

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

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

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

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

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

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

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

    chown -R clickhouse:clickhouse путь/до/директории
  3. Укажите пути до созданных директорий в параметрах hot_volume_path и cold_volume_path.

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

Например, необходимо хранить события 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. Укажите пути до директорий в параметрах hot_volume_path и cold_volume_path в файле main.yml:

    hot_volume_path: /storage/hot/
    cold_volume_path: /storage/cold/