Часть 10. Безопасность и эксплуатация: доступы, обновления, анти-паттерны

Пользователи и права без superuser по умолчанию, изоляция сети и TLS, безопасные обновления с PDB, миграции схемы через ON CLUSTER и сводка анти-паттернов, которые дороже всего обходятся в проде.
Опубликовано:

Финальная часть — про то, что отличает работающий кластер от кластера, который «пока работает».

Пользователи и права

Первое, что нужно сделать после установки: разобраться с пользователем default. Исторически он существует без пароля и с широкими правами — в проде это недопустимо. Либо задайте ему пароль и урежьте права, либо запретите вход по сети, оставив только локальный доступ.

Дальше — разделение по ролям, а не «один аккаунт на всё»:

SQL
CREATE ROLE bi_reader;
GRANT SELECT ON analytics.* TO bi_reader;

CREATE USER grafana IDENTIFIED WITH sha256_password BY '...'
  SETTINGS PROFILE 'readonly_bi';
GRANT bi_reader TO grafana;

CREATE ROLE ingest;
GRANT INSERT, SELECT ON analytics.events TO ingest;
Нажмите, чтобы развернуть и увидеть больше

Практики, которые стоит принять как правило:

Сеть и TLS

ClickHouse слушает несколько портов: HTTP (8123), нативный протокол (9000), их TLS-версии (8443/9440), межсерверный обмен и порт Keeper.

Минимальный набор мер:

Обновления

Обновление ClickHouse в Kubernetes — это rolling restart подов, и он должен уважать кворум и репликацию.

Порядок, который экономит нервы:

  1. Прочитать changelog. ClickHouse развивается быстро; между версиями меняется поведение настроек. Не прыгайте через много мажорных версий сразу.
  2. Обновлять по одной реплике. Должен оставаться живой кворум Keeper и хотя бы одна здоровая реплика каждого шарда.
  3. Keeper и ClickHouse — разными окнами. Не трогайте координацию и данные одновременно.
  4. PodDisruptionBudget для ClickHouse и Keeper — чтобы drain ноды при обслуживании кластера не выбил лишнего. Официальный оператор создаёт PDB сам, но проверьте значения.
  5. Дождаться зелёного статуса между шагами: system.replicas без read-only и с пустеющей очередью, status.readyReplicas в кастомном ресурсе.
  6. Достаточный terminationGracePeriodSeconds, чтобы сервер успел корректно завершиться и сбросить буферы.
  7. Сначала стенд. Обновление проверяется на тестовом кластере с похожими данными и запросами.

Миграции схемы

В кластере DDL выполняется на всех узлах через ON CLUSTER:

SQL
CREATE TABLE analytics.events ON CLUSTER '{cluster}' ( ... )
ENGINE = ReplicatedMergeTree('/clickhouse/tables/{shard}/events', '{replica}')
ORDER BY (event_type, user_id, ts);
Нажмите, чтобы развернуть и увидеть больше

Что важно:

Сводка анти-паттернов

Собранные вместе грабли из всей серии — то, что чаще всего ломает ClickHouse в Kubernetes:

Архитектура

Данные

Инфраструктура

Процессы

Что делать дальше

Разумный порядок внедрения, если начинаете с нуля:

  1. Поднять кластер оператором с 3 узлами Keeper и репликацией (части 2–3).
  2. Настроить storage с запасом и Retain (часть 4).
  3. Спроектировать схему под реальные запросы (часть 5).
  4. Наладить батчевую вставку (часть 6).
  5. Выставить лимиты и профили (часть 7).
  6. Завести мониторинг и алерты (часть 8).
  7. Настроить бэкапы и восстановить их хотя бы раз (часть 9).
  8. Закрыть доступы и описать процедуру обновления.

ClickHouse щедро отдаёт производительность, если попасть в его модель, и наказывает за попытки использовать его как обычную базу. Большая часть этой серии — про то, как оставаться на первой стороне.

Начать поиск

Введите ключевые слова для поиска статей

↑↓
ESC
⌘K Горячая клавиша