Развёртывание ClickHouse на VPS для высокопроизводительных аналитических баз данных
TL;DR
В этом руководстве мы пошагово настроим и оптимизируем сервер баз данных ClickHouse на виртуальном приватном сервере (VPS). Вы узнаете, как выбрать подходящий VPS-конфиг, подготовить операционную систему, установить ClickHouse актуальной версии (25.8), выполнить его базовую и продвинутую конфигурацию, обеспечить безопасность с помощью TLS и фаервола, а также настроить систему резервного копирования для ваших аналитических данных. В результате вы получите готовую к работе, высокопроизводительную аналитическую СУБД, способную обрабатывать петабайты данных.
- Настройка ClickHouse версии 25.8 на Ubuntu 24.04 LTS.
- Подробный выбор VPS-конфигурации с учетом требований ClickHouse.
- Пошаговая инструкция по установке, конфигурации и обеспечению безопасности.
- Рекомендации по резервному копированию и обслуживанию системы.
- Решение типичных проблем и ответы на частые вопросы.
Что мы настраиваем и зачем
Мы будем разворачивать ClickHouse — колоночную систему управления базами данных (СУБД), предназначенную для онлайн-аналитической обработки запросов (OLAP). ClickHouse разработан компанией Яндекс и известен своей невероятной скоростью обработки больших объемов данных, часто в десятки и сотни раз превосходящей традиционные реляционные базы данных для аналитических задач. Он идеально подходит для сценариев, где требуется агрегировать и анализировать огромные массивы информации в режиме реального времени, таких как логи, метрики, финансовые транзакции, данные IoT и пользовательские события.
В итоге читатель получит полностью функционирующий сервер ClickHouse, оптимизированный для высокой производительности и готовый к приему данных. Это позволит создавать мощные аналитические приложения, дашборды, системы мониторинга и отчетности, обрабатывающие запросы за миллисекунды даже на гигабайтах или терабайтах информации.
Существуют альтернативы ClickHouse, такие как PostgreSQL с расширениями (например, TimescaleDB), Apache Druid, Apache Doris или облачные управляемые решения вроде Amazon Redshift, Google BigQuery, Snowflake. Каждое из этих решений имеет свои преимущества и недостатки. Облачные сервисы предлагают простоту масштабирования и отсутствие необходимости управлять инфраструктурой, но часто сопряжены с высокими операционными расходами и вендор-локом. Self-hosted решения, такие как ClickHouse на VPS, предоставляют полный контроль над данными и инфраструктурой, что критично для проектов с чувствительными данными или строгими требованиями к безопасности и приватности. Выбор self-hosted на VPS позволяет значительно снизить затраты по сравнению с облачными аналогами, особенно при прогнозируемой нагрузке, и получить максимальную производительность, тонко настроив систему под свои нужды. Кроме того, это дает бесценный опыт в администрировании высоконагруженных систем.
Какой VPS-конфиг нужен под эту задачу
Для ClickHouse критически важны несколько параметров: объем оперативной памяти, скорость дисковой подсистемы и количество ядер процессора. Сеть также важна, если вы планируете активно загружать данные или использовать репликацию между серверами.
Минимальные требования для тестового или небольшого продакшн-сервера (до 100 ГБ данных):
- CPU: 2-4 ядра (желательно с высокой частотой, так как ClickHouse хорошо масштабируется по ядрам для параллельной обработки запросов).
- RAM: 8 ГБ. ClickHouse эффективно использует RAM для кэширования данных и выполнения запросов. Чем больше RAM, тем меньше обращений к диску.
- Диск: 200 ГБ NVMe SSD. Скорость диска — один из ключевых факторов производительности ClickHouse. NVMe SSD значительно превосходит SATA SSD и HDD.
- Сеть: 1 Гбит/с.
Рекомендуемый VPS-план для среднего продакшн-сервера (сотни ГБ - 1-2 ТБ данных):
Для более серьезных задач, где объем данных может достигать нескольких терабайт, или требуется высокая параллельная обработка запросов, рекомендуется следующий конфиг:
- CPU: 8 ядер (современные Intel Xeon или AMD EPYC).
- RAM: 32-64 ГБ.
- Диск: 1-2 ТБ NVMe SSD. Возможность расширения или использования нескольких дисков для RAID 0/1.
- Сеть: 10 Гбит/с.
Для такого уровня производительности и ресурсов можно рассмотреть VPS с указанными характеристиками, предлагающий гибкие планы с NVMe SSD и высокой пропускной способностью сети.
Когда нужен dedicated, а не VPS
Dedicated сервер становится необходим, когда:
- Объем данных превышает 2-3 ТБ на одном узле: Управление большими объемами данных на VPS может быть сложным из-за ограничений по дисковому пространству.
- Требуется максимальная производительность I/O: Dedicated серверы часто предлагают прямой доступ к дисковой подсистеме без виртуализации, что критично для ClickHouse.
- Необходима высокая и стабильная пропускная способность сети: Для кластеров ClickHouse или интенсивной загрузки данных.
- Требуется специфическое аппаратное обеспечение: Например, особые RAID-контроллеры, NVMe-диски с гарантированной производительностью или большее количество ядер/RAM, чем доступно на VPS.
- Регуляторные или безопасности требования: Некоторые стандарты требуют полного физического разделения аппаратных ресурсов.
Локация: на что влияет
Выбор локации VPS влияет на:
- Латентность (ping) до пользователей/источников данных: Размещайте сервер ближе к вашей основной аудитории или источникам данных для минимизации задержек.
- Законодательство: В разных странах действуют разные законы о хранении и обработке данных. Убедитесь, что выбранная локация соответствует вашим юридическим требованиям.
- Стоимость: Цены на VPS могут варьироваться в зависимости от региона.
- Доступность сети: Некоторые локации могут иметь лучшую связность с определенными регионами мира.
Подготовка сервера
Начнем с базовой настройки сервера. Мы будем использовать Ubuntu 24.04 LTS как наиболее стабильную и поддерживаемую операционную систему. Все команды выполняются от имени пользователя с правами sudo.
1. Подключение по SSH
После получения данных для доступа к VPS, подключитесь к нему по SSH:
ssh root@ВАШ_IP_АДРЕС
2. Создание нового пользователя и настройка sudo
Работа под root пользователем не рекомендуется. Создадим нового пользователя и добавим его в группу sudo.
# Замените 'ваш_пользователь' на желаемое имя пользователя
adduser ваш_пользователь
usermod -aG sudo ваш_пользователь
Установите надежный пароль для нового пользователя. Теперь выйдите из сессии root и войдите под новым пользователем:
exit
ssh ваш_пользователь@ВАШ_IP_АДРЕС
3. Настройка SSH-ключей (рекомендуется)
Для повышения безопасности рекомендуется использовать SSH-ключи вместо паролей. Если у вас еще нет SSH-ключа, сгенерируйте его на вашей локальной машине:
# На вашей локальной машине
ssh-keygen -t ed25519 -C "ваш[email protected]"
Затем скопируйте публичный ключ на сервер:
# На вашей локальной машине
ssh-copy-id ваш_пользователь@ВАШ_IP_АДРЕС
После проверки, отключите вход по паролю для SSH, отредактировав файл /etc/ssh/sshd_config:
sudo nano /etc/ssh/sshd_config
Найдите строки и установите значения:
PasswordAuthentication no
ChallengeResponseAuthentication no
UsePAM no
Перезапустите SSH-сервис:
sudo systemctl restart ssh
4. Обновление системы и установка базовых утилит
Убедитесь, что ваша система обновлена и установлены необходимые пакеты.
# Обновление списка пакетов
sudo apt update
# Обновление всех установленных пакетов до последних версий
sudo apt upgrade -y
# Установка полезных утилит, если их нет
sudo apt install -y curl wget git htop rsync unattended-upgrades
5. Настройка фаервола (UFW)
Настроим базовый фаервол UFW для разрешения SSH, HTTP/HTTPS и портов ClickHouse.
# Разрешить SSH (по умолчанию порт 22)
sudo ufw allow ssh
# Разрешить HTTP (порт 80)
sudo ufw allow http
# Разрешить HTTPS (порт 443)
sudo ufw allow https
# Разрешить нативный протокол ClickHouse (по умолчанию порт 9000)
sudo ufw allow 9000/tcp
# Разрешить HTTP-интерфейс ClickHouse (по умолчанию порт 8123)
sudo ufw allow 8123/tcp
# Включить фаервол
sudo ufw enable
# Проверить статус фаервола
sudo ufw status verbose
6. Установка Fail2Ban
Fail2Ban помогает защитить сервер от атак методом подбора пароля, блокируя IP-адреса, с которых происходят многочисленные неудачные попытки входа.
# Установка Fail2Ban
sudo apt install -y fail2ban
# Запуск и включение автозапуска
sudo systemctl enable fail2ban
sudo systemctl start fail2ban
# Проверка статуса
sudo systemctl status fail2ban
Fail2Ban по умолчанию защищает SSH. Для дополнительных сервисов можно настроить его в /etc/fail2ban/jail.local.
Установка ПО — пошагово
Теперь, когда сервер подготовлен, приступим к установке ClickHouse. Мы будем использовать официальный репозиторий ClickHouse для Ubuntu 24.04, чтобы получить актуальную версию (на 2026 год предположим, что это будет версия 25.8).
1. Добавление официального репозитория ClickHouse
Добавим GPG-ключ репозитория и сам репозиторий в список источников пакетов APT.
# Устанавливаем пакеты для работы с HTTPS-репозиториями
sudo apt install -y apt-transport-https ca-certificates dirmngr
# Добавляем GPG-ключ ClickHouse
sudo gpg --no-default-keyring --keyring /usr/share/keyrings/clickhouse.gpg --keyserver hkp://keyserver.ubuntu.com:80 --recv-keys 8F24D2886737F059
# Добавляем репозиторий ClickHouse для стабильной ветки
echo "deb [signed-by=/usr/share/keyrings/clickhouse.gpg] https://packages.clickhouse.com/deb stable main" | sudo tee /etc/apt/sources.list.d/clickhouse.list
# Обновляем список пакетов
sudo apt update
2. Установка ClickHouse Server и Client
Установим серверную часть ClickHouse и клиент для взаимодействия с ним.
# Устанавливаем ClickHouse Server и Client (версия 25.8 или новее будет выбрана автоматически из репозитория)
sudo apt install -y clickhouse-server clickhouse-client
3. Запуск и проверка статуса ClickHouse
После установки ClickHouse должен автоматически запуститься. Проверим его статус.
# Проверяем статус сервиса ClickHouse
sudo systemctl status clickhouse-server
Вы должны увидеть статус active (running). Если нет, запустите его вручную:
# Запускаем сервис ClickHouse
sudo systemctl start clickhouse-server
# Включаем автозапуск при загрузке системы
sudo systemctl enable clickhouse-server
4. Подключение к ClickHouse через клиент
Попробуем подключиться к серверу через CLI-клиент.
# Подключаемся к локальному серверу ClickHouse
clickhouse-client
Вы должны увидеть приглашение ClickHouse client version 25.8.x.x. Connected to ClickHouse server version 25.8.x.x.. Теперь можно выполнять запросы. Например:
# Создаем тестовую базу данных
CREATE DATABASE my_database;
# Создаем тестовую таблицу
CREATE TABLE my_database.test_table (id UInt64, name String) ENGINE = MergeTree() ORDER BY id;
# Вставляем данные
INSERT INTO my_database.test_table VALUES (1, 'Test User 1'), (2, 'Test User 2');
# Выбираем данные
SELECT FROM my_database.test_table;
# Выходим из клиента
exit;
5. Проверка доступности HTTP-интерфейса
ClickHouse также предоставляет HTTP-интерфейс, который по умолчанию доступен на порту 8123.
# Проверяем доступность HTTP-интерфейса
curl http://localhost:8123/
Вы должны получить ответ "Ok." или подобный, указывающий на работоспособность интерфейса.
Конфигурация
Базовая установка ClickHouse готова, но для продакшн-использования и обеспечения безопасности требуется дополнительная настройка. Основные файлы конфигурации ClickHouse находятся в /etc/clickhouse-server/.
config.xml: Основной конфигурационный файл сервера.users.xml: Конфигурация пользователей, ролей и прав доступа.conf.d/: Директория для дополнительных конфигурационных файлов, которые переопределяют или дополняютconfig.xml. Это позволяет легко управлять изменениями и обновлениями.
1. Основная конфигурация (config.xml и conf.d)
Рекомендуется не изменять напрямую config.xml, а создавать свои файлы в /etc/clickhouse-server/conf.d/. Например, создадим файл z-custom-config.xml для наших настроек. Файлы в conf.d загружаются в алфавитном порядке, поэтому префикс z- гарантирует, что наши настройки будут применены последними и переопределят стандартные.
sudo nano /etc/clickhouse-server/conf.d/z-custom-config.xml
Пример содержимого для z-custom-config.xml:
<yandex>
<logger>
<level>information</level>
<log>/var/log/clickhouse-server/clickhouse-server.log</log>
<errorlog>/var/log/clickhouse-server/clickhouse-server.err.log</errorlog>
<size_limit>100M</size_limit>
<count>10</count>
</logger>
<listen_host>0.0.0.0</listen_host> <!-- Слушать все интерфейсы, для продакшена лучше указать конкретный IP -->
<max_memory_usage>0</max_memory_usage> <!-- 0 означает без ограничений, или ёмкость RAM 0.8 -->
<max_memory_usage_for_all_queries>0</max_memory_usage_for_all_queries>
<query_log>
<database>system</database>
<table>query_log</table>
<flush_interval_milliseconds>7500</flush_interval_milliseconds>
</query_log>
<query_thread_log>
<database>system</database>
<table>query_thread_log</table>
<flush_interval_milliseconds>7500</flush_interval_milliseconds>
</query_thread_log>
<merge_tree>
<max_bytes_to_merge_at_once>16106127360</max_bytes_to_merge_at_once> <!-- 15GB -->
<max_rows_to_merge_at_once>10000000</max_rows_to_merge_at_once>
</merge_tree>
<tcp_port_secure>9440</tcp_port_secure> <!-- Порт для TLS-соединений (нативный протокол) -->
<http_port_secure>8443</http_port_secure> <!-- Порт для TLS-соединений (HTTP) -->
</yandex>
Примечание: Для listen_host в продакшене лучше указать конкретный IP-адрес сервера или внутренний IP, если ClickHouse находится за прокси/балансировщиком. max_memory_usage и max_memory_usage_for_all_queries лучше настраивать, исходя из реального объема RAM и нагрузки, чтобы предотвратить переполнение памяти.
2. Конфигурация пользователей и безопасности (users.xml)
Файл users.xml (или файлы в users.d/) определяет пользователей, их пароли, права и настройки. По умолчанию существует пользователь default без пароля, что крайне небезопасно.
sudo nano /etc/clickhouse-server/users.d/z-custom-users.xml
Пример содержимого z-custom-users.xml:
<yandex>
<users>
<default>
<!-- Отключаем пользователя 'default', если он не нужен, или устанавливаем ему пароль -->
<password>your_strong_default_password</password>
<networks>
<ip>::/0</ip>
</networks>
<profile>default</profile>
<quota>default</quota>
</default>
<admin>
<password>your_admin_password_here</password>
<networks>
<ip>127.0.0.1</ip>
<ip>::1</ip>
<ip>ВАШ_IP_С_КОТОРОГО_БУДЕТЕ_ПОДКЛЮЧАТЬСЯ/32</ip> <!-- или 0.0.0.0/0 для всех, но это небезопасно -->
</networks>
<profile>default</profile>
<quota>default</quota>
</admin>
<app_user>
<password>your_app_password_here</password>
<networks>
<ip>ВАШ_IP_ПРИЛОЖЕНИЯ/32</ip>
</networks>
<profile>default</profile>
<quota>default</quota>
<access_management>
<grant>SELECT ON my_database. TO app_user</grant>
<grant>INSERT ON my_database.some_table TO app_user</grant>
</access_management>
</app_user>
</users>
</yandex>
ВАЖНО: Никогда не используйте простые пароли. Используйте надежные, сгенерированные пароли. Ограничивайте доступ по IP-адресам, используя <networks><ip>...</ip></networks>.
3. TLS/HTTPS через Caddy (для HTTP-интерфейса)
Для защиты HTTP-интерфейса ClickHouse (порт 8123) рекомендуется использовать обратный прокси-сервер с TLS. Caddy — отличный выбор, так как он автоматически управляет сертификатами Let's Encrypt.
Установка Caddy:
# Установка Caddy
sudo apt install -y debian-keyring debian-archive-keyring apt-transport-https
curl -1sLf 'https://dl.cloudsmith.io/public/caddy/stable/gpg.key' | sudo gpg --dearmor -o /usr/share/keyrings/caddy-stable-archive-keyring.gpg
curl -1sLf 'https://dl.cloudsmith.io/public/caddy/stable/debian.deb.txt' | sudo tee /etc/apt/sources.list.d/caddy-stable.list
sudo apt update
sudo apt install -y caddy
Настройка Caddyfile:
Предположим, у вас есть доменное имя, например, clickhouse.yourdomain.com, которое указывает на IP вашего VPS.
sudo nano /etc/caddy/Caddyfile
Содержимое Caddyfile:
clickhouse.yourdomain.com {
reverse_proxy localhost:8123
tls {
protocols tls1.2 tls1.3
ciphers ECDHE-ECDSA-AES256-GCM-SHA384 ECDHE-RSA-AES256-GCM-SHA384
}
# Опционально: базовая аутентификация для доступа к HTTP-интерфейсу
# basicauth {
# admin Jaffe_1234
# }
}
Замените clickhouse.yourdomain.com на ваш реальный домен. Caddy автоматически получит и обновит SSL-сертификаты. Если вы хотите использовать базовую аутентификацию, замените Jaffe_1234 на хеш вашего пароля, сгенерированный с помощью caddy hash-password.
Перезапустите Caddy:
sudo systemctl reload caddy
Теперь HTTP-интерфейс ClickHouse будет доступен по HTTPS через https://clickhouse.yourdomain.com.
4. Настройка TLS для нативного протокола ClickHouse
ClickHouse поддерживает TLS для нативного протокола (порт 9000 по умолчанию, или 9440, если вы изменили его в z-custom-config.xml). Для этого потребуются собственные сертификаты. Вы можете использовать сертификаты, выданные Let's Encrypt (если Caddy уже их получил), или самоподписанные для внутренних нужд.
Скопируйте сертификаты Let's Encrypt (если используете Caddy) в директорию ClickHouse. Caddy хранит их в /var/lib/caddy/.local/share/caddy/certificates/acme-v02.api.letsencrypt.org-directory/. Вам понадобятся fullchain.pem и .key файл для вашего домена.
# Создаем директорию для сертификатов ClickHouse
sudo mkdir -p /etc/clickhouse-server/ssl
# Копируем сертификаты (замените на свои пути и домен)
# Пример для Caddy:
sudo cp /var/lib/caddy/.local/share/caddy/certificates/acme-v02.api.letsencrypt.org-directory/clickhouse.yourdomain.com/clickhouse.yourdomain.com.crt /etc/clickhouse-server/ssl/server.crt
sudo cp /var/lib/caddy/.local/share/caddy/certificates/acme-v02.api.letsencrypt.org-directory/clickhouse.yourdomain.com/clickhouse.yourdomain.com.key /etc/clickhouse-server/ssl/server.key
# Устанавливаем правильные права
sudo chown -R clickhouse:clickhouse /etc/clickhouse-server/ssl
sudo chmod -R 600 /etc/clickhouse-server/ssl/
Добавьте в /etc/clickhouse-server/conf.d/z-custom-config.xml (или создайте отдельный файл, например, ssl.xml):
<yandex>
<openSSL>
<server>
<certificate_file>/etc/clickhouse-server/ssl/server.crt</certificate_file>
<private_key_file>/etc/clickhouse-server/ssl/server.key</private_key_file>
<dh_params_file>/etc/clickhouse-server/ssl/dhparam.pem</dh_params_file> <!-- Опционально, но рекомендуется -->
<verification_mode>none</verification_mode> <!-- 'none' для самоподписанных, 'relaxed'/'strict' для CA -->
<load_common_names>true</load_common_names>
<cache_sessions>true</cache_sessions>
<disable_protocols>sslv2,sslv3,tlsv1,tlsv1_1</disable_protocols>
<prefer_server_ciphers>true</prefer_server_ciphers>
<ciphers>ECDHE-RSA-AES256-GCM-SHA384:ECDHE-RSA-AES128-GCM-SHA256:DHE-RSA-AES256-GCM-SHA384:DHE-RSA-AES128-GCM-SHA256</ciphers>
</server>
<client>
<verification_mode>none</verification_mode>
</client>
</openSSL>
</yandex>
Сгенерируйте dhparam.pem (это может занять некоторое время):
sudo openssl dhparam -out /etc/clickhouse-server/ssl/dhparam.pem 2048
sudo chown clickhouse:clickhouse /etc/clickhouse-server/ssl/dhparam.pem
sudo chmod 600 /etc/clickhouse-server/ssl/dhparam.pem
После всех изменений перезапустите ClickHouse:
sudo systemctl restart clickhouse-server
5. Проверка работоспособности
Проверка HTTP/HTTPS:
# Проверка HTTP-интерфейса через Caddy
curl -k https://clickhouse.yourdomain.com/
Вы должны получить "Ok.". Если вы настроили basicauth, нужно добавить -u admin:password.
Проверка нативного протокола с TLS:
clickhouse-client --host localhost --port 9440 --secure --user admin --password your_admin_password_here
Вы должны успешно подключиться. Если возникают проблемы с TLS, проверьте логи ClickHouse (/var/log/clickhouse-server/clickhouse-server.err.log).
Бэкапы и обслуживание
Надежное резервное копирование и регулярное обслуживание являются критически важными для любой продакшн-системы, включая ClickHouse.
Что бэкапить
- Данные ClickHouse: Основные данные таблиц, хранящиеся в
/var/lib/clickhouse/data/. - Метаданные ClickHouse: Структуры таблиц, базы данных, пользователи, расположенные в
/var/lib/clickhouse/metadata/. - Конфигурационные файлы:
/etc/clickhouse-server/(включаяconfig.xml,users.xmlи все файлы вconf.d/,users.d/). - Логи: Хотя логи не являются критичными для восстановления, они полезны для аудита и отладки.
Простой скрипт автобэкапа
Для ClickHouse рекомендуется использовать встроенные механизмы, такие как ALTER TABLE ... FREEZE PARTITION для создания "снимков" данных или специализированные инструменты типа clickhouse-backup. Мы рассмотрим простой подход с файловой системой и clickhouse-backup.
Вариант 1: Снимок файловой системы (для тестовых сред)
Это наименее рекомендуемый способ для продакшена, но самый простой для небольших объемов данных. Он требует остановки ClickHouse или использования LVM-снапшотов.
#!/bin/bash
BACKUP_DIR="/mnt/backups/clickhouse_$(date +%Y%m%d%H%M%S)"
CLICKHOUSE_DATA_DIR="/var/lib/clickhouse"
CONFIG_DIR="/etc/clickhouse-server"
echo "Stopping ClickHouse server..."
sudo systemctl stop clickhouse-server
echo "Creating backup directory: $BACKUP_DIR"
sudo mkdir -p "$BACKUP_DIR"
echo "Copying ClickHouse data..."
sudo rsync -ah --stats "$CLICKHOUSE_DATA_DIR" "$BACKUP_DIR/"
echo "Copying ClickHouse configuration..."
sudo rsync -ah --stats "$CONFIG_DIR" "$BACKUP_DIR/"
echo "Starting ClickHouse server..."
sudo systemctl start clickhouse-server
echo "Backup completed successfully to $BACKUP_DIR"
Вариант 2: Использование clickhouse-backup
clickhouse-backup — это специализированный инструмент для создания и восстановления резервных копий ClickHouse. Он поддерживает различные хранилища, включая S3.
Установка clickhouse-backup:
# Загрузка последней версии (проверьте актуальную на GitHub)
wget https://github.com/Altinity/clickhouse-backup/releases/download/v1.2.0/clickhouse-backup_1.2.0_amd64.deb
sudo dpkg -i clickhouse-backup_1.2.0_amd64.deb
rm clickhouse-backup_1.2.0_amd64.deb
Настройка clickhouse-backup (/etc/clickhouse-backup/config.yml):
Настройте параметры подключения к ClickHouse и удаленному хранилищу (например, S3).
# Пример /etc/clickhouse-backup/config.yml
clickhouse:
username: admin # Ваш пользователь ClickHouse
password: your_admin_password_here
host: 127.0.0.1
port: 9000 # Или 9440, если используете TLS
secure: false # true, если используете TLS
s3:
bucket: my-clickhouse-backups
region: us-east-1
access_key: ${S3_ACCESS_KEY} # Используйте переменные окружения для секретов
secret_key: ${S3_SECRET_KEY}
endpoint: s3.amazonaws.com # Или ваш S3-совместимый эндпоинт
force_path_style: false
acl: private
compression: "zstd"
compression_level: 1
disable_ssl: false
allow_multipart_download: true
max_part_size: 100M
Секреты (S3_ACCESS_KEY, S3_SECRET_KEY) лучше передавать через переменные окружения для скрипта cron.
Скрипт резервного копирования с clickhouse-backup:
#!/bin/bash
export S3_ACCESS_KEY="YOUR_ACTUAL_S3_ACCESS_KEY"
export S3_SECRET_KEY="YOUR_ACTUAL_S3_SECRET_KEY"
# Создать локальную резервную копию
clickhouse-backup create --schema --data
# Отправить резервную копию в S3
clickhouse-backup upload latest --remote-storage s3
# Очистить старые локальные резервные копии (например, оставить 7 последних)
clickhouse-backup delete local --keep-days 7
# Очистить старые удаленные резервные копии (например, оставить 30 последних)
clickhouse-backup delete remote --keep-days 30 --remote-storage s3
echo "ClickHouse backup completed."
Сохраните этот скрипт как /usr/local/bin/clickhouse_backup.sh и сделайте его исполняемым:
sudo chmod +x /usr/local/bin/clickhouse_backup.sh
Настройка Cron для автоматического запуска:
Добавьте задачу в cron для ежедневного запуска скрипта.
sudo crontab -e
Добавьте строку для запуска скрипта, например, в 2 часа ночи:
0 2 * /usr/local/bin/clickhouse_backup.sh >> /var/log/clickhouse_backup.log 2>&1
Куда складывать бэкапы
- Внешнее S3-совместимое хранилище: Рекомендуемый вариант. Облачные хранилища (AWS S3, MinIO, Wasabi, Backblaze B2) предлагают высокую надежность и доступность.
- Отдельный VPS: Можно настроить rsync или SFTP на отдельный, менее мощный VPS, специально выделенный для хранения бэкапов.
- Сетевое хранилище (NAS/SAN): Для корпоративных сред.
ВАЖНО: Никогда не храните бэкапы на том же сервере, что и оригинальные данные.
Обновления: rolling vs maintenance window
Обновление ClickHouse требует осторожности. Всегда тестируйте обновления на стейджинг-среде перед применением в продакшене.
- Maintenance Window (Окно обслуживания): Самый простой подход. Остановите ClickHouse, обновите пакеты, запустите. Это вызывает простой сервиса. Для большинства VPS-инсталляций это приемлемо, если простой в несколько минут допустим.
sudo systemctl stop clickhouse-server sudo apt update sudo apt upgrade -y clickhouse-server clickhouse-client sudo systemctl start clickhouse-server - Rolling Updates (Постепенное обновление): Для кластеров ClickHouse с репликацией. Позволяет обновлять узлы по очереди, минимизируя простой. Это выходит за рамки данного руководства, но важно знать о такой возможности для масштабирования.
После каждого обновления рекомендуется проверять логи ClickHouse на предмет ошибок и убеждаться в корректной работе всех сервисов.
Troubleshooting + FAQ
Что делать, если ClickHouse не запускается?
Первым делом проверьте логи ClickHouse: /var/log/clickhouse-server/clickhouse-server.log и /var/log/clickhouse-server/clickhouse-server.err.log. Частые причины: ошибки в конфигурационных файлах (XML-синтаксис), нехватка памяти, занятый порт, проблемы с правами доступа к файлам данных или логов. Используйте команду sudo systemctl status clickhouse-server для быстрого обзора состояния и последних ошибок.
Как проверить, какие порты использует ClickHouse?
По умолчанию ClickHouse использует порт 9000 для нативного протокола и 8123 для HTTP-интерфейса. Если вы настроили TLS, то это могут быть 9440 и 8443 соответственно. Проверить используемые порты можно командой sudo netstat -tulnp | grep clickhouse или sudo lsof -i -P -n | grep LISTEN | grep clickhouse. Убедитесь, что эти порты открыты в вашем фаерволе (UFW).
Как сбросить пароль для пользователя ClickHouse?
Пароли пользователей хранятся в /etc/clickhouse-server/users.xml или в файлах в /etc/clickhouse-server/users.d/. Чтобы сбросить пароль, отредактируйте соответствующий файл, измените значение тега <password> для нужного пользователя и перезапустите ClickHouse: sudo systemctl restart clickhouse-server. Убедитесь, что новый пароль надежен.
Какой VPS-конфиг минимально подойдёт для небольшого проекта?
Для небольшого проекта, например, с данными до 100 ГБ и невысокой нагрузкой, достаточно VPS с 2-4 ядрами CPU, 8 ГБ RAM и 200 ГБ NVMe SSD. Однако, если ожидается активный рост данных или сложные запросы, рекомендуется увеличить RAM до 16-32 ГБ и использовать более быстрые NVMe-диски большего объема.
Что выбрать — VPS или dedicated для этой задачи?
Для начального развёртывания, небольших и средних проектов, а также для изучения ClickHouse, VPS является отличным экономичным выбором. Он предоставляет достаточные ресурсы и гибкость. Dedicated сервер становится предпочтительным, если вы работаете с терабайтами данных, требуете максимальной производительности дисковой подсистемы, имеете высокие требования к безопасности и изоляции, или вам нужна полная свобода в выборе аппаратного обеспечения. Это также актуально для высоконагруженных продакшн-кластеров.
Как оптимизировать производительность ClickHouse?
Оптимизация ClickHouse включает несколько аспектов: правильный выбор движка таблиц (MergeTree и его варианты), оптимизация схем данных (колоночное хранение, правильные типы данных), индексация (ORDER BY, PRIMARY KEY), настройка параметров сервера (например, max_memory_usage, max_threads), использование материализованных представлений и кэширования, а также регулярная очистка и слияние партиций.
Выводы и следующие шаги
Вы успешно развернули и настроили ClickHouse на вашем VPS, обеспечив его базовую безопасность и механизм резервного копирования. Теперь у вас есть мощный инструмент для высокопроизводительной аналитики, способный обрабатывать большие объемы данных с невероятной скоростью. Этот сервер готов к приему данных и выполнению сложных аналитических запросов.
Следующие шаги для дальнейшего развития вашего ClickHouse-сервера могут включать:
- Интеграция с источниками данных: Настройте потоковую загрузку данных из Kafka, RabbitMQ, PostgreSQL, MySQL или других систем с помощью специализированных движков таблиц (например, Kafka Engine) или ETL-инструментов.
- Мониторинг: Внедрите систему мониторинга (например, Prometheus + Grafana) для отслеживания метрик ClickHouse (нагрузка на CPU, использование памяти, I/O диска, количество запросов, задержки) и здоровья сервера в целом.
- Масштабирование и высокая доступность: Для продакшн-систем рассмотрите создание кластера ClickHouse с репликацией данных (с использованием ZooKeeper или ClickHouse Keeper) и шардингом для горизонтального масштабирования и обеспечения отказоустойчивости.