Обновление ClickHouse

Для работы системы необходимо, чтобы был развернут кластер ClickHouse (база данных в терминах системы).

Поддерживаемые версии ClickHouse:

  • До R-Vision SIEM 1.7.0: ClickHouse 23.1.

  • R-Vision SIEM 1.7.0—​1.8.0: ClickHouse 23.1—​23.2.

  • Начиная с R-Vision SIEM 1.9.0: ClickHouse 23.1—​24.7.

Рекомендуется устанавливать ClickHouse максимальной поддерживаемой версии. Более новые версии ClickHouse обладают большим объемом функциональности и отличаются более высокой производительностью.

Так, например, при обновлении с R-Vision SIEM 1.8.0 до R-Vision SIEM 1.9.0, для повышения эффективности работы системы рекомендуется обновить ClickHouse до версии 24.7.

Для корректной работы системы необходимо использовать ClickHouse поддерживаемой версии. Установка неподдерживаемых версий может привести к непредвиденным последствиям.

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

Способ обновления зависит от расположения ClickHouse:

Обновление ClickHouse в кластере Kubernetes

В представленных командах предполагается, что система R-Vision SIEM установлена в пространство имен (namespace) siem. Если ваше пространство имен отличается, измените значение параметра -n в командах.

Чтобы обновить ClickHouse в кластере Kubernetes:

  1. Добавьте к переменной окружения PATH путь до директории /opt/r-vision/common/bin, в которой располагаются утилиты helm, kubectl и jq:

    export PATH="$PATH:/opt/r-vision/common/bin"
  2. Перейдите в директорию установки ClickHouse:

    cd /opt/r-vision/common/helm/stateful/clickhouse
  3. Сохраните параметры текущей версии ClickHouse:

    ADMIN_PASSWORD=$(kubectl get secret -n siem clickhouse -o jsonpath="{.data.admin-password}" | base64 -d)
    SYNC_PASSWORD=$(helm get values -n siem clickhouse -o json | jq -r '.clusterSettings.password')
    PVC_SIZE=$(helm get values -n siem clickhouse -o json | jq -r '.persistence.size')
    REPLICAS=$(helm get values -n siem clickhouse -o json | jq -r '.replicaCount')
    SHARDS=$(helm get values -n siem clickhouse -o json | jq -r '.shards')
  4. Проверьте корректность команды обновления с помощью опции --dry-run:

    helm upgrade -n siem  clickhouse ./ -f ./custom_values.yaml --set auth.password="${ADMIN_PASSWORD:?}" --set shards="${SHARDS:?}" --set replicaCount="${REPLICAS:?}" --set persistence.size="${PVC_SIZE:?}" --set clusterSettings.password="${SYNC_PASSWORD:?}" --dry-run
    Данная команда только проверяет корректность команды обновления, но не выполняет само обновление.
  5. Если при выполнении шага 4 не возникло ошибок, запустите обновление ClickHouse:

    helm upgrade -n siem  clickhouse ./ -f ./custom_values.yaml --set auth.password="${ADMIN_PASSWORD:?}" --set shards="${SHARDS:?}" --set replicaCount="${REPLICAS:?}" --set persistence.size="${PVC_SIZE:?}" --set clusterSettings.password="${SYNC_PASSWORD:?}"
  6. Убедитесь, что обновление выполнилось успешно:

    kubectl get pod -n siem -l app.kubernetes.io/name=clickhouse --watch

    После выполнения команды состояние каждого пода ClickHouse начнет выводиться в консоль в реальном времени. При успешном обновлении все поды будут иметь статус Running.

    Чтобы прекратить наблюдение за состоянием подов, нажмите сочетание клавиш CTRL+C.

Обновление ClickHouse на выделенном сервере

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

Чтобы обновить ClickHouse на выделенном сервере:

  1. Скачайте RPM-пакеты clickhouse-client, clickhouse-common-static и clickhouse-server нужной версии из официального репозитория ClickHouse.

  2. Запустите обновление:

    dnf install clickhouse-client-x.y.z.rpm clickhouse-common-static-x.y.z.rpm clickhouse-server-x.y.z.rpm

    Здесь x.y.z — версия скачанных пакетов.

  3. Перезапустите сервис ClickHouse:

    systemctl restart clickhouse-server

После обновления ClickHouse необходимо обновить права для пользователей owner, writer и reader.

Обновление прав пользователей

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

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

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

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

При обновлении сервера ClickHouse пользователям owner, writer и reader необходимо заново выдать требуемые права:

  • Для сервера ClickHouse в кластере Kubernetes переназначение прав выполняется автоматически.

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

    -- Выдать необходимые права пользователю owner.
    GRANT ON CLUSTER '{cluster}' ALL on default.* TO 'owner';
    GRANT ON CLUSTER '{cluster}' REMOTE on *.* TO 'owner';
    GRANT ON CLUSTER '{cluster}' CLUSTER on *.* TO 'owner';
    GRANT ON CLUSTER '{cluster}' SELECT ON system.disks TO 'owner';
    GRANT ON CLUSTER '{cluster}' SELECT ON system.storage_policies TO 'owner';
    GRANT ON CLUSTER '{cluster}' SELECT ON system.parts TO 'owner';
    GRANT ON CLUSTER '{cluster}' SELECT ON system.query_log TO 'owner';
    GRANT ON CLUSTER '{cluster}' SELECT ON system.columns TO 'owner';
    
    -- Выдать необходимые права пользователю writer.
    GRANT ON CLUSTER '{cluster}' SELECT ON default.* TO 'writer';
    GRANT ON CLUSTER '{cluster}' INSERT ON default.* TO 'writer';
    GRANT ON CLUSTER '{cluster}' ALTER UPDATE ON default.* TO 'writer';
    GRANT ON CLUSTER '{cluster}' ALTER DELETE ON default.* TO 'writer';
    GRANT ON CLUSTER '{cluster}' REMOTE on *.* TO 'writer';
    GRANT ON CLUSTER '{cluster}' CLUSTER on *.* TO 'writer';
    GRANT ON CLUSTER '{cluster}' SELECT ON system.disks TO 'writer';
    GRANT ON CLUSTER '{cluster}' SELECT ON system.storage_policies TO 'writer';
    GRANT ON CLUSTER '{cluster}' SELECT ON system.parts TO 'writer';
    GRANT ON CLUSTER '{cluster}' SELECT ON system.query_log TO 'writer';
    GRANT ON CLUSTER '{cluster}' SELECT ON system.columns TO 'writer';
    
    -- Выдать необходимые права пользователю reader.
    GRANT ON CLUSTER '{cluster}' SELECT ON default.* TO 'reader';
    GRANT ON CLUSTER '{cluster}' REMOTE on *.* TO 'reader';
    GRANT ON CLUSTER '{cluster}' CLUSTER on *.* TO 'reader';
    GRANT ON CLUSTER '{cluster}' SELECT ON system.disks TO 'reader';
    GRANT ON CLUSTER '{cluster}' SELECT ON system.storage_policies TO 'reader';
    GRANT ON CLUSTER '{cluster}' SELECT ON system.parts TO 'reader';
    GRANT ON CLUSTER '{cluster}' SELECT ON system.query_log TO 'reader';
    GRANT ON CLUSTER '{cluster}' SELECT ON system.columns TO 'reader';