Обновление 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:
-
Добавьте к переменной окружения
PATH
путь до директории/opt/r-vision/common/bin
, в которой располагаются утилиты helm, kubectl и jq:export PATH="$PATH:/opt/r-vision/common/bin"
-
Перейдите в директорию установки ClickHouse:
cd /opt/r-vision/common/helm/stateful/clickhouse
-
Сохраните параметры текущей версии 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')
-
Проверьте корректность команды обновления с помощью опции
--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
Данная команда только проверяет корректность команды обновления, но не выполняет само обновление. -
Если при выполнении шага 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:?}"
-
Убедитесь, что обновление выполнилось успешно:
kubectl get pod -n siem -l app.kubernetes.io/name=clickhouse --watch
После выполнения команды состояние каждого пода ClickHouse начнет выводиться в консоль в реальном времени. При успешном обновлении все поды будут иметь статус
Running
.Чтобы прекратить наблюдение за состоянием подов, нажмите сочетание клавиш CTRL+C.
Обновление ClickHouse на выделенном сервере
Действия выполняются на каждом узле кластера ClickHouse. |
Чтобы обновить ClickHouse на выделенном сервере:
-
Скачайте RPM-пакеты clickhouse-client, clickhouse-common-static и clickhouse-server нужной версии из официального репозитория ClickHouse.
-
Запустите обновление:
dnf install clickhouse-client-x.y.z.rpm clickhouse-common-static-x.y.z.rpm clickhouse-server-x.y.z.rpm
Здесь
x.y.z
— версия скачанных пакетов. -
Перезапустите сервис 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';