SensusInfra/README.md
Sergey Antropoff db957f9890 feat: Настройка ClickHouse кластера с репликацией и балансировщиком нагрузки
- Настроен ClickHouse кластер с 2 репликами и автоматической репликацией
- Добавлен Nginx Load Balancer для ClickHouse (HTTP и TCP)
- Исправлена конфигурация кластера для правильной работы репликации
- Созданы таблицы с репликацией: metrics_raw, metrics_processed, agents_info
- Убран healthcheck у nginx load balancer (не нужен)
- Обновлен Makefile: автоматическое создание .env из env.example
- Обновлена документация с информацией о ClickHouse кластере
- Все сервисы протестированы и работают корректно

Автор: Сергей Антропов, сайт: https://devops.org.ru
2025-09-10 19:50:20 +03:00

394 lines
17 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# SensusInfra — Инфраструктура для проекта Sensus
**Автор:** Сергей Антропов
**Сайт:** https://devops.org.ru
## Описание
SensusInfra — это полная инфраструктура для работы с системой мониторинга Sensus, включающая:
- **Kafka** — брокер сообщений для передачи метрик от агентов к воркерам
- **KafkaUI** — веб-интерфейс для мониторинга Kafka
- **PostgreSQL** — база данных для хранения метаданных агентов и конфигураций
- **ClickHouse** — аналитическая база данных для хранения и анализа метрик (кластер с 2 репликами)
- **Nginx Load Balancer** — балансировщик нагрузки для ClickHouse (HTTP и TCP)
- **ZooKeeper** — координатор для ClickHouse репликации
## Архитектура
```
┌─────────────────┐ ┌─────────────────┐ ┌─────────────────┐
│ SensusAgent │───▶│ Kafka │───▶│ SensusWorker │
│ (сбор метрик) │ │ (брокер) │ │ (обработка) │
└─────────────────┘ └─────────────────┘ └─────────────────┘
│ │
▼ ▼
┌─────────────────┐ ┌─────────────────┐
│ KafkaUI │ │ PostgreSQL │
│ (web ui) │ │ (метаданные) │
└─────────────────┘ └─────────────────┘
┌─────────────────┐
│ ClickHouse │
│ Load Balancer │
│ (Nginx) │
│ HTTP: 8125 │
│ TCP: 9002 │
└─────────────────┘
┌─────────────────┐
│ ClickHouse │
│ (аналитика) │
│ (2 реплики) │
│ Реплика 1: 8123│
│ Реплика 2: 8124│
└─────────────────┘
┌─────────────────┐
│ ZooKeeper │
│ (координатор) │
│ Port: 2181 │
└─────────────────┘
```
## Быстрый старт
### 1. Подготовка окружения
```bash
# Клонируйте репозиторий и перейдите в директорию
cd SensusInfra
# Файл .env будет создан автоматически при выполнении make setup
# Или создайте вручную:
cp env.example .env
# Отредактируйте .env с вашими значениями (опционально)
nano .env
```
### 2. Запуск инфраструктуры
```bash
# Первоначальная настройка (создание .env, генерация SSL, запуск сервисов)
make setup
# Или пошагово:
make ssl-generate # Генерация SSL сертификатов
make up # Запуск инфраструктуры
make health-check # Проверка здоровья сервисов
```
### 3. Управление инфраструктурой
```bash
make up # Запуск инфраструктуры
make down # Остановка инфраструктуры
make restart # Перезапуск инфраструктуры
make status # Статус сервисов
make logs # Логи всех сервисов
```
## Управление через Makefile
### Основные команды
| Команда | Описание |
|---------|----------|
| `make setup` | Первоначальная настройка инфраструктуры |
| `make up` | Запустить инфраструктуру |
| `make down` | Остановить инфраструктуру |
| `make restart` | Перезапустить инфраструктуру |
| `make status` | Показать статус всех сервисов |
| `make logs` | Показать логи всех сервисов |
| `make health-check` | Проверить здоровье сервисов |
### Работа с базами данных
| Команда | Описание |
|---------|----------|
| `make postgres-cli` | Подключиться к PostgreSQL |
| `make clickhouse-cli` | Подключиться к ClickHouse (реплика 1) |
| `make clickhouse-cli-2` | Подключиться к ClickHouse (реплика 2) |
| `make clickhouse-cli-lb` | Подключиться к ClickHouse через балансировщик |
| `make kafka-topics` | Показать список топиков Kafka |
| `make kafka-ui` | Открыть Kafka UI в браузере |
### SSL сертификаты
| Команда | Описание |
|---------|----------|
| `make ssl-generate` | Генерация SSL сертификатов для Kafka |
| `make ssl-clean` | Очистка SSL сертификатов |
| `make ssl-info` | Информация о SSL сертификатах |
### Обслуживание
| Команда | Описание |
|---------|----------|
| `make clean` | Очистить все контейнеры и volumes |
| `make clean-volumes` | Очистить только volumes (данные) |
| `make backup` | Создать резервную копию данных |
| `make restore BACKUP_FILE=имя_файла` | Восстановить данные из резервной копии |
## Конфигурация
### Переменные окружения
Все настройки хранятся в файле `.env`. Основные переменные:
#### Kafka
- `KAFKA_BROKER_ID` — ID брокера Kafka (по умолчанию 1)
- `KAFKA_EXTERNAL_PORT` — внешний порт Kafka (по умолчанию 9092)
- `KAFKA_SSL_PORT` — SSL порт Kafka (по умолчанию 9093)
- `KAFKA_TOPIC` — топик для метрик (по умолчанию sensus.metrics)
- `KAFKA_UI_PORT` — порт Kafka UI (по умолчанию 8080)
- `KAFKA_SSL_KEYSTORE_PASSWORD` — пароль keystore (по умолчанию kafka123)
- `KAFKA_SSL_KEY_PASSWORD` — пароль ключа (по умолчанию kafka123)
- `KAFKA_SSL_TRUSTSTORE_PASSWORD` — пароль truststore (по умолчанию kafka123)
#### Kafka UI авторизация
- `KAFKA_UI_AUTH_TYPE` — тип авторизации (по умолчанию LOGIN_FORM)
- `KAFKA_UI_USERNAME` — логин для входа (по умолчанию admin)
- `KAFKA_UI_PASSWORD` — пароль для входа (по умолчанию admin)
- `KAFKA_UI_USER_ROLES` — роли пользователя (по умолчанию ADMIN)
#### PostgreSQL
- `POSTGRES_DB` — имя базы данных (по умолчанию sensus)
- `POSTGRES_USER` — пользователь (по умолчанию sensus)
- `POSTGRES_PASSWORD` — пароль (обязательно изменить!)
- `POSTGRES_PORT` — порт (по умолчанию 5432)
- `POSTGRES_SSL_MODE` — режим SSL (по умолчанию require)
- `POSTGRES_SSL_CERT_FILE` — путь к сертификату сервера
- `POSTGRES_SSL_KEY_FILE` — путь к приватному ключу сервера
- `POSTGRES_SSL_CA_FILE` — путь к сертификату CA
#### ClickHouse
- `CLICKHOUSE_DB` — имя базы данных (по умолчанию sensus_metrics)
- `CLICKHOUSE_USER` — пользователь (по умолчанию sensus)
- `CLICKHOUSE_PASSWORD` — пароль (обязательно изменить!)
- `CLICKHOUSE_SECURE` — безопасный режим (по умолчанию true)
- `CLICKHOUSE_1_PORT` — порт первой реплики (по умолчанию 8123)
- `CLICKHOUSE_1_HTTP_PORT` — HTTP порт первой реплики (по умолчанию 9000)
- `CLICKHOUSE_2_PORT` — порт второй реплики (по умолчанию 8124)
- `CLICKHOUSE_2_HTTP_PORT` — HTTP порт второй реплики (по умолчанию 9001)
#### ClickHouse Load Balancer
- `CLICKHOUSE_LB_HTTP_PORT` — HTTP порт балансировщика (по умолчанию 8125)
- `CLICKHOUSE_LB_TCP_PORT` — TCP порт балансировщика (по умолчанию 9002)
### Структура базы данных
#### PostgreSQL
**Схема `agents`** — метаданные агентов:
- `agents` — зарегистрированные агенты
- `collectors` — коллекторы агентов
**Схема `configs`** — конфигурации:
- `agent_configs` — конфигурации агентов
- `config_history` — история изменений
**Схема `metrics`** — метрики:
- `raw_metrics` — сырые метрики
- `processed_metrics` — обработанные метрики
**Схема `system`** — системные таблицы:
- `system_state` — состояние системы
- `system_logs` — логи системы
#### ClickHouse
**База `sensus_metrics`** (реплицируется между узлами):
- `metrics_raw` — сырые метрики (ReplicatedMergeTree)
- `metrics_processed` — обработанные метрики (ReplicatedMergeTree)
- `agents_info` — информация об агентах (ReplicatedReplacingMergeTree)
**Кластер `sensus_cluster`**:
- **Шард 1** с двумя репликами:
- `clickhouse-1` (порт 8123/9000)
- `clickhouse-2` (порт 8124/9001)
- **ZooKeeper** для координации репликации
- **Автоматическая репликация** данных между узлами
- **Балансировщик нагрузки** для распределения запросов
**База `system`**:
- `system_logs` — логи системы
- `system_state` — состояние системы
## Мониторинг
### Kafka UI
- URL: http://localhost:8080
- **Логин:** admin
- **Пароль:** admin
- Мониторинг топиков, консьюмеров, партиций
- Просмотр сообщений в реальном времени
- Авторизация через форму входа
### ClickHouse Load Balancer
- **HTTP:** http://localhost:8125
- **TCP:** localhost:9002
- Балансировка нагрузки между репликами ClickHouse
- Health check endpoint: http://localhost:8125/health
- Статус endpoint: http://localhost:8125/status
### Health Check
```bash
make health-check
```
Проверяет доступность всех сервисов:
- ZooKeeper
- Kafka
- PostgreSQL
- ClickHouse (обе реплики)
- ClickHouse Load Balancer
### Логи
```bash
# Все сервисы
make logs
# Конкретный сервис
make infra-logs
make agent-logs
make worker-logs
```
## Резервное копирование
### Создание резервной копии
```bash
make backup
```
Создает резервные копии:
- PostgreSQL: `./backups/postgres_YYYYMMDD_HHMMSS.sql`
- ClickHouse: `backup_YYYYMMDD_HHMMSS`
### Восстановление
```bash
make restore BACKUP_FILE=postgres_20241201_120000.sql
```
## Безопасность
### SSL/TLS
Инфраструктура поддерживает SSL/TLS для Kafka и PostgreSQL:
#### Kafka SSL
- **Автоматическая генерация** SSL сертификатов при `make setup`
- **Поддержка SSL** на порту 9093
- **Клиентские сертификаты** для аутентификации
- **Truststore** для проверки сертификатов
#### PostgreSQL SSL
- **Автоматическая генерация** SSL сертификатов при `make setup`
- **Режим SSL** — require (обязательное шифрование)
- **Самоподписанные сертификаты** для разработки
- **Поддержка SSL** на стандартном порту 5432
### Рекомендации
1. **Обязательно измените пароли** в файле `.env`
2. **Не коммитьте файл `.env`** в git
3. **Используйте сильные пароли** для production
4. **Настройте firewall** для ограничения доступа к портам
5. **Регулярно обновляйте** образы Docker
6. **Используйте SSL** для production окружения
7. **Регулярно обновляйте** SSL сертификаты
8. **Измените пароль Kafka UI** для production (по умолчанию admin/admin)
### Порты
- **9092** — Kafka (внешний, PLAINTEXT)
- **9093** — Kafka (SSL)
- **8080** — Kafka UI
- **5432** — PostgreSQL
- **2181** — ZooKeeper
- **8123** — ClickHouse (реплика 1, HTTP)
- **9000** — ClickHouse (реплика 1, TCP)
- **8124** — ClickHouse (реплика 2, HTTP)
- **9001** — ClickHouse (реплика 2, TCP)
- **8125** — ClickHouse Load Balancer (HTTP)
- **9002** — ClickHouse Load Balancer (TCP)
## Устранение неполадок
### Проблемы с запуском
```bash
# Проверить статус сервисов
make status
# Проверить логи
make logs
# Проверить здоровье
make health-check
# Перезапустить инфраструктуру
make restart
```
### Проблемы с сетью
```bash
# Проверить Docker сеть
docker network ls
docker network inspect sensus-network
```
### Проблемы с данными
```bash
# Очистить volumes
make clean-volumes
# Пересоздать инфраструктуру
make clean
make setup
```
### Проблемы с производительностью
1. Увеличьте лимиты памяти в `.env`
2. Настройте партиционирование в ClickHouse
3. Оптимизируйте индексы в PostgreSQL
## Разработка
### Добавление новых сервисов
1. Добавьте сервис в `docker-compose.yml`
2. Добавьте переменные в `env.example`
3. Добавьте команды в `Makefile`
4. Обновите документацию
### Тестирование
```bash
# Запуск тестовой среды
make setup
# Проверка работы инфраструктуры
make status
make health-check
make logs
# Проверка SSL сертификатов
make ssl-info
# Проверка баз данных
make postgres-cli
make clickhouse-cli
```
## Лицензия
Код сопровождается подробными комментариями на русском языке. Автор — **Сергей Антропов** (сайт: https://devops.org.ru).
## Поддержка
При возникновении проблем:
1. Проверьте логи: `make logs`
2. Проверьте здоровье: `make health-check`
3. Обратитесь к документации проектов SensusAgent и SensusWorker
4. Создайте issue в репозитории