Chproxy
Chproxy — это HTTP-прокси и балансировщик нагрузки с открытым исходным кодом, специально разработанный для базы данных ClickHouse. Это проект сообщества с открытым исходным кодом, который предоставляет мощные возможности для управления трафиком и обеспечения безопасности при работе с кластерами ClickHouse.
Chproxy представляет собой надежное и функциональное решение для организации безопасного и эффективного доступа к кластерам ClickHouse в производственных средах.
Основные возможности и особенности Chproxy:
Маршрутизация и балансировка нагрузки:
- Проксирование запросов к различным кластерам ClickHouse в зависимости от входящего пользователя
- Равномерное распределение запросов между репликами и узлами с использованием техники least loaded + round robin
- Мониторинг состояния узлов и предотвращение отправки запросов на неисправные узлы
Управление пользователями и безопасность:
- Сопоставление входящих пользователей с пользователями кластеров, что предотвращает раскрытие реальных имен пользователей и паролей
- Возможность сопоставления нескольких различных входящих пользователей с одним пользователем ClickHouse
- Ограничение HTTP и HTTPS доступа по спискам IP/IP-масок
- Ограничение доступа для каждого пользователя по спискам IP/IP-масок
Контроль ресурсов и производительности:
- Ограничение продолжительности запросов для каждого пользователя с принудительной остановкой через KILL QUERY
- Ограничение частоты запросов для каждого пользователя
- Ограничение количества одновременных запросов для каждого пользователя
- Задержка выполнения запросов до соответствия пользовательским ограничениям
- Независимая настройка всех ограничений для каждого входящего пользователя и каждого пользователя кластера
Кэширование и оптимизация:
- Настраиваемое кэширование ответов для каждого пользователя
- Встроенная защита кэшей ответов от проблемы thundering herd (догпайл эффект)
Безопасность соединений:
- Поддержка входящих запросов через HTTP и HTTPS
- Автоматическое получение и обновление HTTPS-сертификатов через Let’s Encrypt
- Проксирование запросов к каждому настроенному кластеру через HTTP или HTTPS
Мониторинг и управление:
- Предоставление различных полезных метрик в формате Prometheus
- Добавление информации о пользователях и адресах в заголовок User-Agent для возможности запроса из system.query_log.http_user_agent
- Обновление конфигурации без перезапуска через сигнал SIGHUP
- Простое управление и запуск — достаточно передать путь к файлу конфигурации единственному бинарному файлу chproxy
Инструкция по развертыванию
В случае прод окружения не стоит использовать адрес 0.0.0.0, и hack_me_please
-
Создайте виртуальную машину с продуктом ch-proxy (ВМ-ПРОКСИ) из Yandex Cloud Marketplace по инструкции и с публичным адресом.
-
После запуска виртуальной машины выполните вход в консоль ВМ-ПРОКСИ по ssh (открыв доступ к ВМ по 22 порту, а также 8080 — для подключения позднее с ВМ-ТЕСТ и порт 8123 через группы безопасности).
-
Через
sudo nano /etc/chproxy/chproxy.ymlукажите на ВМ-ПРОКСИ
hack_me_please: true
server:
http:
listen_addr: ":8080"
users:
- name: "default"
to_cluster: "default"
to_user: "default"
# by default each cluster has `default` user which can be overridden by section `users`
clusters:
- name: "default"
nodes: ["ВМ-ТЕСТ_ip:8123"]
-
Перезапустите chproxy
sudo systemctl status chproxy,sudo systemctl restart chproxy -
Создайте еще одну виртуальную машину (ВМ-ТЕСТ) для тестирования работы clickhouse-keeper и подключитесь к ней также по SSH
-
Установите на ВМ-ТЕСТ clickhouse server и client + keeper (https://clickhouse.com/docs/install/debian_ubuntu) (предварительно открыв доступ этой ВМ к входящему траффику через порт 80 TCP и группы безопасности)
-
Выполните запрос с ВМ-ТЕСТ
curl "http://ВМ-ПРОКСИ_ip:8123/?query=SELECT%201"Если запрос выполнится без появления ошибок или зависаний — поздравляем, ClickHouse работает с ClickHouse-proxy
- Балансировка нагрузки между несколькими кластерами ClickHouse
- Ограничение доступа пользователей к определенным кластерам по IP-адресам
- Кэширование ответов для повышения производительности запросов
- Мониторинг состояния узлов ClickHouse и автоматическое переключение трафика
- Контроль частоты запросов и времени выполнения для каждого пользователя
- Автоматическое получение и обновление SSL-сертификатов через Let’s Encrypt
- Сокрытие реальных учетных данных ClickHouse от клиентских приложений
Служба технической поддержки Yandex Cloud отвечает на запросы 24 часа в сутки, 7 дней в неделю. Доступные виды запросов и срок их обработки зависят от тарифного плана. Подключить платную поддержку можно в консоли управления. Подробнее о порядке оказания технической поддержки.
Yandex Cloud не предоставляет техническую поддержку продукта. При возникновении проблем обращайтесь к информационным ресурсам разработчика.