Недавно мы рассказали об архитектуре Яндекс.Облака. Теперь давайте перейдем от теории к практике. В Облаке есть несколько сервисов для автоматизированного контроля за СУБД: Managed Service for ClickHouse, Managed Service for PostgreSQL и Managed Service for MongoDB. Все они являются платформенными и позволяют сосредоточиться на задаче хранения данных, а не на администрировании инфраструктуры. Но иногда бывает важно контролировать ещё и виртуальные машины кластера. Например, может возникнуть задача масштабирования в ответ на увеличение или снижение нагрузки. Обычно этот сценарий — один из самых трудоёмких с практической точки зрения. Сегодня мы расскажем, как Яндекс.Облако позволяет автоматизировать сложные задачи масштабирования, и убедимся, что база остаётся доступной в процессе изменения размера кластера.  Для подготовки нам понадобятся: Сценарий тестирования будет простым: открываем три сессии подключения бастионного хоста к каждому хосту кластера БД, запускаем в цикле SQL-запрос с периодом, скажем, в 1 секунду, после чего отправляем команду на масштабирование кластера и смотрим на поведение системы. Выберем СУБД для демонстрации масштабирования. В PostgreSQL хостам присваиваются роли, но в сервисе пока нет их прозрачного переключения при масштабировании — эта функциональность у нас в планах. Поскольку в остальном механика увеличения и уменьшения кластера примерно одинаковая в случае во всеми тремя СУБД, для примера возьмем ClickHouse. Создадим объект эксперимента — кластер, состоящий из трех хостов, размещенных в разных виртуальных подсетях. Для этого введем команду
yc managed-clickhouse cluster create с необходимыми аргументами. Порядок аргументов соответствует их перечислению в выводе “yc --help”. Суть команды проста: создаем кластер ch-to-resize в production-окружении с размещением в виртуальной сети testvpc, задаем имя и пароль, объем дискового пространства 10 гигабайт и минимальный класс s1.nano. Этому классу соответствуют следующие характеристики: 1 CPU, 4 ГБ RAM. В дальнейшем для масштабирования мы перейдём к классу s1.micro, чтобы количество CPU и оперативной памяти выросло вдвое. Чтобы узнать, какие ещё классы хостов можно назначить, достаточно ввести команду
yc managed-clickhouse resource-preset list. Таким образом, команда на создание кластера должна быть следующей: В ответ получим ID кластера и список hostnames его хостов: Откроем подключение к каждому хосту и запустим запрос к БД: Наконец, отправим запрос на увеличение кластера: Если мы хотим уменьшить, а не увеличить объем ресурсов, то нужно указать меньший класс, сверившись с выводом
yc managed-clickhouse resource-preset list — например, s1.nano. При этом структура самой команды остается такой же. Вывод запросов я перенаправил в файл. Вот сокращенный листинг: В листинге видны моменты выключения каждого хоста кластера (когда начинаются connect time out), моменты включения хоста и начала загрузки ClickHouse (когда начинаются connection refused), а также моменты, когда хост возвращается в строй. Самое главное — разнесение временных периодов, когда хосты были недоступны. Всё то время, пока шло масштабирование, как минимум два хоста были доступны для выполнения запросов. Это видно на графике:  На первый взгляд, развитие проектов с базами данных включает в себя большое количество рутинной работы. Базу необходимо поддерживать, то есть создавать резервные копии, наладить процесс регулярного обновления СУБД и т. д. Облачные сервисы управления появились в первую очередь для того, чтобы снять с вас эти трудоёмкие функции. Однако в реальной production-среде полезно, чтобы системы были не только управляемыми с точки зрения обслуживания, но и эластичными — реагирующими на рост и спад нагрузки. Мы рассказали, как увеличить производительность базы в Яндекс.Облаке, сохранив работоспособность проекта для пользователей. Если база настроена правильно, то при росте трафика происходит увеличение объема доступных ресурсов, а при спаде — кратное уменьшение, которое в том числе снижает ваши расходы. О каких подходах, инструментах или технологиях в облачной тематике вам бы хотелось узнать? Предлагайте в комментариях темы для следующих постов Яндекс.Облака. Интернет щей