Настройка нового кластера 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 любым удобным способом.

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

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

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

      Example 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.

    Example 3. Пример содержимого файла 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.

    Пример содержимого файла 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
    # Пароли пользователей 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).

Example 4. Пример настройки учетных данных
clickhouse_user: user
clickhouse_password: password

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

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

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

Example 5. Пример настройки порта
grpc_port: 9101

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

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

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

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

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

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

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

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

Example 6. Пример настройки паролей пользователей
owner_password: OwnerPassword
writer_password: WriterPassword
reader_password: ReaderPassword
Эти пароли необходимо использовать на этапе ClickHouse config установки R-Vision SIEM.

Параметры сервера ClickHouse

Подробную информацию о параметрах сервера можно найти в официальной документации ClickHouse.

Вы можете настроить следующие параметры сервера ClickHouse:

  • background_buffer_flush_schedule_pool_size — количество потоков для выполнения фонового сброса данных.

    Рекомендуемое значение: (1—​2) * количество ядер процессора.

  • background_common_pool_size — количество потоков для освобождения памяти.

    Рекомендуемое значение: (0—​1) * количество ядер процессора.

  • background_distributed_schedule_pool_size — количество потоков для выполнения фоновых задач.

    Рекомендуемое значение: (1—​2) * количество ядер процессора.

  • background_fetches_pool_size — количество потоков для репликации данных.

    Рекомендуемое значение: (0—​1) * количество ядер процессора.

  • background_message_broker_schedule_pool_size — количество потоков для фонового вывода сообщений.

    Рекомендуемое значение: (1—​2) * количество ядер процессора.

  • background_move_pool_size — количество потоков для перемещений данных между дисками.

    Рекомендуемое значение: (0—​1) * количество ядер процессора.

  • background_pool_size — количество потоков для слияний и мутаций таблиц.

    Рекомендуемое значение: (1—​2) * количество ядер процессора.

  • background_merges_mutations_concurrency_ratio — отношение количества слияний и мутаций, которые могут выполняться одновременно, к количеству потоков background_pool_size. Например, если параметр принимает значение 2, а background_pool_size — 16, то сервер ClickHouse может одновременно выполнять 32 слияния.

  • background_schedule_pool_size — количество потоков для выполнения фоновых задач.

    Рекомендуемое значение: (8—​16) * количество ядер процессора.

  • mark_cache_size — приблизительный размер (в байтах) кэша меток.

    Рекомендуемое значение: 1—​5 ГБ.

  • max_concurrent_queries — максимальное количество одновременно обрабатываемых запросов. Если принимает значение "0", то ограничений нет.

    Рекомендуемое значение: (1—​2) * количество ядер процессора.

  • max_server_memory_usage — максимальный объем оперативной памяти (в байтах), используемой сервером ClickHouse. Если принимает значение "0", то объем памяти определяется автоматически следующим образом: memory_amount * max_server_memory_usage_to_ram_ratio.

    Здесь:

    • memory_amount — общий объем оперативной памяти.

    • max_server_memory_usage_to_ram_ratio — доля оперативной памяти, используемой сервером ClickHouse. Если принимает значение "0", то сервер может использовать всю оперативную память. По умолчанию параметр не задан и воспринимается системой равным "0.9".

    Рекомендуемое значение: 90% от доступного объема оперативной памяти.

Example 7. Пример настройки параметров 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

Таблицы семейства MergeTree позволяют использовать механизм репликации данных. Подробную информацию о MergeTree-параметрах можно найти в официальной документации ClickHouse.

Вы можете настроить следующие параметры MergeTree-таблиц:

  • max_bytes_to_merge_at_max_space_in_pool — максимальный общий размер (в байтах) таблиц, которые могут быть слиты.

    Рекомендуемое значение: 1—​4 ГБ.

  • merge_max_block_size — количество строк, которые считываются в память из слитых таблиц.

    Рекомендуемое значение: 1024—​4096.

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

    Рекомендуемое значение: 1—​4.

  • max_suspicious_broken_parts — максимальное количество испорченных таблиц. При преувеличении происходит отключение автоматического удаления.

Example 8. Пример настройки параметров таблиц 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, то оставьте настройки по умолчанию.

Example 9. Пример настройки директорий хранения
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/