Розгортання 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 "Зупинка сервера ClickHouse..."
sudo systemctl stop clickhouse-server
echo "Створення каталогу резервних копій: $BACKUP_DIR"
sudo mkdir -p "$BACKUP_DIR"
echo "Копіювання даних ClickHouse..."
sudo rsync -ah --stats "$CLICKHOUSE_DATA_DIR" "$BACKUP_DIR/"
echo "Копіювання конфігурації ClickHouse..."
sudo rsync -ah --stats "$CONFIG_DIR" "$BACKUP_DIR/"
echo "Запуск сервера ClickHouse..."
sudo systemctl start clickhouse-server
echo "Резервне копіювання успішно завершено до $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 завершено."
Збережіть цей скрипт як /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 на предмет помилок та переконуватися в коректній роботі всіх сервісів.
Вирішення проблем + 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) та шардингом для горизонтального масштабування та забезпечення відмовостійкості.