Сейчас мы, в Postgres Professional, разрабатываем новый интересный продукт — DataBase as a Service, и в этой статье хочется немного рассказать о наших успехах, узнать ваше мнение и послушать возможные пожелания.
![](https://habrastorage.org/getpro/habr/upload_files/c98/db8/a18/c98db8a1871d794d2504519efb851213.png)
Но перед тем как говорить про возможности, нужно договориться что вообще такое DBaaS и что мы тут делаем. Больших новостей не будет: DBaaS — это подвид as a service услуг, который сосредоточен на избавлении администратора от болей, связанных с администрированием баз данных. В нашем случае речь пойдёт о PostgreSQL.
Если попытаться формализовать, то в классическом «я сам всё умею и могу» подходе, чтобы обзавестись работающей БД, надо пройти примерно такой путь: настроить железный сервер, накатить и настроить ОС, установить СУБД со вспомогательными пакетами, затем всё это дело сконфигурировать и наконец-то начать работать. Спустя некоторое время, а лучше сразу, придёт осознание необходимости выстроить политику резервного копирования, гибкую систему доступов и поддержания версий софта в актуальном состоянии. И где-то совсем нескоро надо задуматься ещё и о масштабировании всей этой конструкции, ибо тема эта для баз данных не самая лёгкая, и многие её старательно откладывают до последнего.
Естественно, всего этого хочется по максимуму избежать. Поэтому, абсолютно ожидаемо, инженеры придумали простую идею: дадим пользователю ту самую большую красную кнопку «Сделать хорошо», а все операции, связанные с развёртыванием и обслуживанием баз данных, мы от него скроем и автоматизируем.
Поэтому свой DBaaS мы решили делать с расчётом на то, что он будет запускаться в публичных и приватных облаках. Но, как мы все понимаем, с уходом всем известных вендоров список сильно подсократился. А из приватных, по факту, остались только облака на OpenStack. Так что упор в разработке мы делаем именно на него.
Немного терминологии
Чтобы говорить о DBaaS, надо договориться что и как называется. Чтобы не было историй, когда у одних нода – это физический сервер, а у других — логическая сущность.
Устроен DBaaS достаточно просто. Это некая машина, где работает сам DBaaS-сервис, к которому подключаются клиенты по API или через веб-интерфейс. Далее DBaaS создаёт виртуальные машины, устанавливает на них своего управляющего агента и разворачивает базу данных согласно запросу клиента.
![Бесхитростная принципиальная схема DBaaS от Postgres Professional Бесхитростная принципиальная схема DBaaS от Postgres Professional](https://habrastorage.org/getpro/habr/upload_files/d5b/f7f/54b/d5bf7f54bdc7bd03604d12bb66b46b99.jpg)
И теперь те самые термины, которые наиболее часто вызывают путаницу:
База данных — мы поддерживаем и разрабатываем решение для PostgreSQL. Так уж получилось, что занимаемся мы именно постгресом и работаем только с ним.
Инстанс — виртуальная машина, на которой запущена одна или несколько баз данных. То есть в рамках инстанса СУБД запущена одна, но внутри данного одного приложения постгреса может быть запущено несколько баз данных.
Кластер — отказоустойчивая группа инстансов. Тут всё достаточно прозрачно, но надо оговориться, что у кластера может быть вырожденный случай, когда он состоит из одного инстанса. Этакий псевдокластер.
Проект — логическая единица нашего DBaaS для управления группами кластеров. У проекта есть владелец, который создаёт внутренних пользователей и наделяет их правами доступа.
Итого, в рамках одного проекта может быть несколько кластеров. В каждом кластере может существовать один или несколько, инстансов. И в каждом инстансе работают базы данных.
![](https://habrastorage.org/getpro/habr/upload_files/d8e/202/85e/d8e20285eb4e302179a157a433cf726c.jpg)
Про имеющийся функционал
![Общий вид главной страницы управления кластерами. Для каждого кластера показываются все его основные параметры и статус Общий вид главной страницы управления кластерами. Для каждого кластера показываются все его основные параметры и статус](https://habrastorage.org/getpro/habr/upload_files/86e/867/36f/86e86736f0e76305ff0fd40775626555.png)
Работа с DBaaS начинается с создания проекта, внутри которого уже будут разворачиваться необходимые кластера и пользователи. Кластер можно сделать как с одним инстансом, так и отказоустойчивый. То есть будет создана нода с мастером и слейвы (один синхронный, другие асинхронные). За автоматическое переключение, в случае отказа мастера, отвечает Patroni, но функционал ручного переключения также имеется.
![Общий вид контрольной панели кластера. Видно использование выделенных квот, роль каждой ноды и тип репликации Общий вид контрольной панели кластера. Видно использование выделенных квот, роль каждой ноды и тип репликации](https://habrastorage.org/getpro/habr/upload_files/6b4/02f/400/6b402f4008178ce3c767f60d08223037.png)
По возможностям конфигурации все самые ожидаемые вещи имеются. Можно динамически менять выделенные инстансам мощности, включая размер дисков. Теоретически можно даже на ходу изменить количество процессоров, но это приведёт к перезагрузке ноды. Это особенность OpenStack. И, что удобно, конфигурировать можно как всех участников кластера разом, так и отдельные инстансы.
![В меню редактирования инстанса, помимо основных настроек, можно установить параметры непосредственно постгреса В меню редактирования инстанса, помимо основных настроек, можно установить параметры непосредственно постгреса](https://habrastorage.org/getpro/habr/upload_files/ce0/b69/57d/ce0b6957dd9efee6d11915c72f29751e.png)
Расскажу про управление расширениями. Конечному пользователю не отдаются права владельца баз данных, поэтому если расширение требует их для установки, то сделать это можно только через DBaaS.
![Добавление adminpack через DBaaS Добавление adminpack через DBaaS](https://habrastorage.org/getpro/habr/upload_files/4f6/4e8/82c/4f64e882cc72b60fef77f3797f84d457.png)
Если такие права не нужны, пользователь может установить расширение самостоятельно. Создание пользователей и назначение им прав также производится через DBaaS.
![Тут же в консоли можно проверить результат Тут же в консоли можно проверить результат](https://habrastorage.org/getpro/habr/upload_files/af5/731/d46/af5731d460818fda5820f3310be8a965.png)
И раз мы затронули тему учётных записей, то сейчас будет немного про их создание, авторизацию и аутентификацию. Поскольку мы изначально целились в частные облака, основным провайдером авторизации стал LDAP. С точки зрения реализации альтернатив, сложностей не наблюдается, просто он стал первым.
![В окне управления пользователями можно открыть консоль постгреса. Останется только ввести пароль В окне управления пользователями можно открыть консоль постгреса. Останется только ввести пароль](https://habrastorage.org/getpro/habr/upload_files/af4/089/bfa/af4089bfa55feff24134b01205d10e57.png)
Пользовательская ролевая модель иерархическая. Есть всемогущий Администратор DBaaS, который управляет всем, в том числе и квотами ресурсов на проекты. Квотируются CPU, RAM и размер выделенного диска. При превышении квоты блокируется создание новых кластеров и добавления инстансов.
Ниже по иерархии идёт группа Владельцев проекта, которые управляют на уровне отдельных проектов и назначают Пользователей проекта. Последним можно нарезать права в рамках управления конкретных кластеров.
![На экране управления базами данных, выводятся готовые строчки подключений На экране управления базами данных, выводятся готовые строчки подключений](https://habrastorage.org/getpro/habr/upload_files/d36/d65/cb1/d36d65cb1a5f19e37204fa49eb05d4fa.png)
Касательно резервирования, DBaaS умеет создавать дампы (логические копии) и классические бекапы (физические копии). Их отличие в совместимости: сделав логическую копию на 14-й версии постгреса, её можно восстановить на 15-й. С физической так не получится, но у неё есть своё важное преимущество — восстановление на определённый момент времени, вплоть для конкретной транзакции.
![Дампы создаются и восстанавливаются на экране управления базами данных Дампы создаются и восстанавливаются на экране управления базами данных](https://habrastorage.org/getpro/habr/upload_files/6e4/51e/062/6e451e062da2b8a38476b25c53cf8500.png)
Оба вида резервных копий хранятся внутри S3, которое уже есть в облаке. Это позволяет нам очень быстро сохранять их и так же быстро восстанавливать. Причём из дампа можно восстановить всё сразу или выбрать между восстановлением только данных или схемы.
![Восстановить дамп можно прямо в свежесозданную базу данных Восстановить дамп можно прямо в свежесозданную базу данных](https://habrastorage.org/getpro/habr/upload_files/ed2/c8a/c99/ed2c8ac992da4d18d6812b2d0dca635c.png)
А что касается бекапов, то для них доступны гибкая настройка расписания и политики хранения. Также есть возможность делать непрерывный бекап с архивированием журнала предзаписи, более известные как WAL-логи.
![При создании нового кластера, можно сразу восстановить его из бекапа При создании нового кластера, можно сразу восстановить его из бекапа](https://habrastorage.org/getpro/habr/upload_files/562/1f7/0c1/5621f70c101774e95307eb2fe3e448b4.png)
А на сладкое пусть будет вкладка Events, где в удобном виде и с массой фильтров хранятся все значимые события в рамках проекта. Детализация ведётся вплоть до инстанса, а события ранжируются по важности. Соответственно, теперь в одном месте можно узнать когда, почему и какая нода поменяла свой статус репликации, кто стал лидером, откуда появилась новая база и так далее. Событий логируется много и полный список будет в документации.
![](https://habrastorage.org/getpro/habr/upload_files/003/a63/08c/003a6308cf7d7af58c835aa971a5fe1e.png)
И самое интересное — как этим роскошеством можно управлять. Изначально мы подошли к этому вопросу как истинные разработчики и реализовали свой API, через который доступна любая возможная операция в DBaaS. Чуть позже был сделан web-интерфейс, стремительно развивающийся в своих возможностях. А из интересного мы реализовали terraform провайдера, позволяя создавать проекты в классическом infrastructure as a code подходе декларативного описания.
И небольшое видео с демонстрацией DBaaS вживую. Записано оно было полгода назад и какие-то моменты изменились (например, появилась возможность управлять табличными пространствами), но все основные функции там показаны.