В одной из первых статей в нашем блоге мы рассказывали, что деплоим не просто ванильные базы данных, а подготовленные для работы внутри Kubernetes на платформе dBrain.cloud. В dBrain возможно внедрить любую базу данных. Сегодня хотим рассказать об этом процессе на примере одного кейса - о внедрении NoSQL базы данных Clickhouse.
Мы внимательно отслеживаем тенденции в сфере разработки и архитектуры микросервисных приложений, а также ориентируемся на запросы пользователей, поэтому Clickhouse стала частью платформы dBrain.
Clickhouse - высокопроизводительная база данных для выполнения сложных аналитических запросов. На одном из наших проектов с высоконагруженным реалтайм-сервисом в сфере онлайн-лотерей появился запрос на анализ статистических данных, собираемых с клиентских приложений. Раньше большая часть этой информации была доступна из реляционной базы данных PostgreSQL (объемом более чем 25 ТБ). Аналитическая нагрузка негативно сказывалась на общей производительности этой базы, так как нужно было выполнять и другие запросы от конечных пользователей всей системы.
Поэтому рассмотрели несколько вариантов выноса нагрузки по аналитическим запросам в другие системы. Клиент выбирал между Timescaledb, Greenplum, Elasticsearch, Cassandra и Clickhouse. По быстродействию и эффективности сжатия данных выигрышнее других оказалась база Clickhouse. После чего нам поступил запрос о внедрении в платформу dBrain новой базы данных.
Мы рассмотрели возможные варианты реализации этой базы внутри Kubernetes. Поставка оператором от Altinity довольно популярна, там большая часть кода доступна в open source, что нас и заинтересовало. Рассмотрели также другие варианты сборок под Kubernetes, и Altinity по ряду показателей оказался предпочтительнее: широкое комьюнити и его быстрая реакция по большей части issues, инструмент по бэкапированию базы, своя API у оператора.
Реализация API
На frontend мы отправляем настройки на backend с помощью нашего сервиса, который переводит данные в Clickhouse-operator. Мы строим описание кластера, отправляем его в Kubernetes - оператор разворачивает Clickhouse. Изначально мы сами составляли описание базы и управляли ей, сейчас делаем все через оператора. В нем уже учтены многие ошибки, и нам не надо проходить повторный путь развертывания. В реализации Altinity полный набор служб: ClickHouse-operator, Clickhouse-backup, ClickHouse Keeper.
Для управления кластерами ClickHouse в dBrain на бэкенде мы используем ClickHouse-operator (версия 0.23.3). Сначала мы внедрили Clickhouse на Zookeeper, потому что у нас на этой базе данных уже была реализована Kafka, затем добавили возможность деплоя с ClickHouse Keeper на базе STS, а в этом году перешли на CRD Clickhouse Keeper Installations из новой версии оператора. Он менее ресурсоемкий по сравнению с Zookeeper, быстрее запускается, а конфигурировать его через CRD удобнее.
Сейчас dBrain поддерживает несколько версий Clickhouse. Мы предоставили пользователям варианты деплоя Clickhouse как в минимальной, так и в высокодоступной конфигурации с сохранением состояния кластера как в Zookeeper, так и в ClickHouse Keeper на выбор.
В dBrain есть возможность деплоить разные конфигурации Clickhouse, в зависимости от требуемого количества реплик. При создании кластера Clickhouse можно выбрать количество реплик и шард. В зависимости от этого кластер будет в отказоустойчивом режиме или нет. В режиме HA (высокой доступности) мы следим за тем, чтобы поды базы данных разъезжались по разным нодам, а при отключении одного из серверов оставался доступ к кластеру.
Также мы полностью прорабатываем все этапы жизненного цикла базы данных: не только развертывание самого кластера, но в том числе бэкапирование в S3 и восстановление бэкапов из хранилища. Эти функции мы добавили в платформу, проработав все сценарии по запросу заказчика: появилась возможность выбирать, какие таблицы нужно восстановить, с каким ретеншном хранить бэкапы, сколько копий оставлять локально и оставлять ли.
Какие функции доступны в консоли dBrain
Через консоль dBrain можно также управлять пользователями и ограничениями Databases, Profile, Quota, бэкапами, просматривать информацию по базам данных и нодам.
Для бэкапов в dBrain используем Clickhouse-backup (версия 2.4.33). При восстановлении и частично при бэкапе можно задать следующие опции: ограничить базы/таблицы, восстановить только схему, на каких шардах выполнять операцию.
Мониторинг и логирование
Логи всех контейнеров централизованно собираются в единой системе логирования платформы (можно почитать тут). Что касается уровня логирования, то в нашем случае из-за небольшого количества логов это info.
В мониторинге (статья про нашу систему) мы проработали отдельный подход, добавили новые дашборды: как от самого Altinity, которые позволяют мониторить Clickhouse, Zookeeper или ClickHouse Keeper, в зависимости от инсталляции. В том числе тестировали плагин Altinity для Grafana и дашборд, который отображает статистику запросов, используя в качестве источника данных это расширение.
Деплой
Деплой Clickhouse, как и любой другой базы данных, происходит централизованно из консоли. Чтобы развернуть новый кластер, достаточно просто нажать несколько кнопок на консоли и указать обязательные параметры.
Привязанный к консоли dBrain кластер разворачивается очень легко. Несколько кликов - и все необходимое уже есть: залитые в репозитории образы, CRD, конфигмапы, сервисы, сикреты для подключения к базе данных, набор необходимых StatefulSet, job, PVC и PV на выбранном StorageClass и т.д.
Как говорится, аппетит приходит во время еды, поэтому сейчас мы работаем над реализацией внутрикластерной версии Airflow для того же заказчика, прорабатывая максимально удобный инструмент для миграции данных из PG в CH. В Clickhouse оптимально вставлять не по одному ключ-значению, частый сценарий - перелив данных пачками из оперативных таблиц PG с последующим чтением и сверкой контрольных сумм как способа проверки целостности данных.
Будем рады, если статья окажется полезной. Делитесь материалом с коллегами, а мы остаемся на связи с вами в комментариях.
NoGotnu
Какой ещё NoSQL? Вы бы хоть почитали сначала что это за СУБД, прежде чем писать статьи.