Как начать работать с Managed Service for Sharded PostgreSQL
Примечание
Сервис находится на стадии Preview.
Сервис Managed Service for Sharded PostgreSQL позволяет создавать и поддерживать кластеры шардированного PostgreSQL (SPQRpsql. Настройка правил шардирования выполняется через консоль администратора (SPQR router admin console). При подключении к консоли администратора укажите имя пользователя spqr-console и имя базы данных spqr-console.
Чтобы начать работу с сервисом:
- Создайте кластер Sharded PostgreSQL.
- Создайте шарды в кластере Sharded PostgreSQL.
- Настройте окружение.
- Настройте правила шардирования.
- Отправьте запросы к БД.
Перед началом работы
-
Перейдите в консоль управления
, затем войдите в Yandex Cloud или зарегистрируйтесь, если вы еще не зарегистрированы. -
Если у вас еще нет каталога, создайте его:
-
В консоли управления
на панели сверху нажмите и выберите нужное облако. -
Справа от названия облака нажмите
. -
Выберите
Создать каталог.
-
Введите имя каталога. Требования к имени:
- длина — от 2 до 63 символов;
- может содержать строчные буквы латинского алфавита, цифры и дефисы;
- первый символ — буква, последний — не дефис.
-
(Опционально) Введите описание каталога.
-
Выберите опцию Создать сеть по умолчанию. Будет создана сеть с подсетями в каждой зоне доступности. Также в этой сети будет создана группа безопасности по умолчанию, внутри которой весь сетевой трафик разрешен.
-
Нажмите кнопку Создать.

-
-
Назначьте вашему аккаунту в Yandex Cloud роли vpc.user и
managed-spqr.editorна каталог. Эти роли позволяют создать кластер.Примечание
Если вы не можете управлять ролями, обратитесь к администратору вашего облака или организации.
-
Подключаться к кластерам БД можно как изнутри, так и извне Yandex Cloud:
-
Чтобы подключиться изнутри Yandex Cloud, создайте виртуальную машину на основе Linux в той же облачной сети, что и кластер БД.
-
Чтобы подключиться к кластеру из интернета, включите публичный доступ к хостам при создании кластера.
Примечание
Следующий шаг предполагает, что подключение к кластеру производится с ВМ. Если вы собираетесь подключаться к кластеру из интернета, переходите к созданию кластера.
-
-
Подключитесь к ВМ по SSH.
Создайте кластер
-
В консоли управления
выберите каталог, в котором нужно создать кластер Sharded PostgreSQL. -
Выберите сервис Yandex Managed Service for Sharded PostgreSQL.
-
Нажмите кнопку Создать кластер.
-
В поле Имя кластера введите имя кластера.
-
Выберите окружение
PRODUCTION. -
Выберите тип шардирования:
- Стандартное — кластер будет состоять только из инфраструктурных хостов.
- Расширенное — кластер будет состоять только из хостов-роутеров и (опционально) хостов-координаторов.
-
В блоке Сетевые настройки:
- Выберите созданную перед началом работы облачную сеть.
- Выберите группу безопасности по умолчанию или создайте новую.
-
Задайте конфигурацию вычислительных ресурсов:
- Для стандартного шардирования задайте в блоке Инфраструктура конфигурацию инфраструктурных хостов.
- Для расширенного шардирования задайте в блоке Роутер конфигурацию хостов-роутеров.
Чтобы задать конфигурацию вычислительных ресурсов:
-
Выберите класс хостов. Он определяет технические характеристики виртуальных машин, на которых будут развернуты хосты кластера.
-
В блоке Хранилище:
-
В блоке Хосты укажите зоны доступности и подсети для хостов, которые будут созданы вместе с кластером.
Если вы собираетесь подключаться к кластеру из интернета, включите для хостов опцию Публичный доступ.
-
(Опционально) В блоке Координатор включите опцию Координатор и задайте конфигурацию хостов-координаторов.
-
В блоке База данных укажите:
- Имя БД. Оно должно быть уникальным в рамках каталога.
- Имя пользователя — владельца БД.
- Пароль.
-
В блоке Дополнительные настройки укажите пароль для консоли Sharded PostgreSQL.
-
Нажмите кнопку Создать кластер.
-
Дождитесь, когда кластер будет готов к работе: его статус сменится на Running, а состояние — на Alive. Чтобы проверить состояние, наведите курсор на статус кластера в столбце Доступность.
Создайте шарды в кластере
Создайте два шарда в кластере Managed Service for Sharded PostgreSQL. Чтобы создать шард:
-
В консоли управления
выберите каталог, в котором создан кластер Sharded PostgreSQL. -
Cоздайте кластер Managed Service for PostgreSQL в той же облачной сети, что и кластер Sharded PostgreSQL.
-
Откройте ваш кластер Sharded PostgreSQL и перейдите на вкладку
Шарды. -
В правом верхнем углу страницы нажмите кнопку Создать шард.
-
В открывшемся окне:
-
Задайте Имя шарда.
-
В поле Кластер Managed Service for PostgreSQL выберите созданный ранее кластер PostgreSQL.
Кластер Managed Service for PostgreSQL должен находиться в том же каталоге и в той же облачной сети, что и кластер Managed Service for Sharded PostgreSQL.
-
Важно
Убедитесь, что роутер может подключаться к хостам шарда. Для этого шарды и кластер Managed Service for Sharded PostgreSQL должны находиться в одной группе безопасности, разрешающей входящие и исходящие TCP-подключения на порт 6432.
Настройте окружение
-
Получите SSL-сертификат:
mkdir -p ~/.postgresql && \ wget "https://storage.yandexcloud.net/cloud-certs/CA.pem" \ --output-document ~/.postgresql/root.crt && \ chmod 0655 ~/.postgresql/root.crtСертификат будет сохранен в файле
~/.postgresql/root.crt. -
Установите необходимые зависимости и клиент PostgreSQL:
sudo apt update && sudo apt install -y postgresql-client
-
Установите PostgreSQL для Windows
последней версии. Выберите только установку Command Line Tools. -
Получите SSL-сертификат:
mkdir $HOME\.postgresql; curl.exe -o $HOME\.postgresql\root.crt https://storage.yandexcloud.net/cloud-certs/CA.pemСертификат будет сохранен в файле
$HOME\.postgresql\root.crt.
Настройте правила шардирования
Важно
Если вы используете группы безопасности для облачной сети, настройте их так, чтобы был разрешен весь необходимый трафик между кластером и хостом, с которого выполняется подключение.
-
Подключитесь к консоли администратора:
Linux (Bash)/macOS (Zsh)Windows (PowerShell)psql "host=<FQDN_хоста> \ port=6432 \ sslmode=verify-full \ sslrootcert=~/.postgresql/root.crt \ dbname=spqr-console \ user=spqr-console"Подробнее о подключении к кластеру Managed Service for Sharded PostgreSQL.
& "C:\Program Files\PostgreSQL\<мажорная_версия_PostgreSQL>\bin\psql.exe" ` --host=<FQDN_хоста> ` --port=6432 ` --username=spqr-console ` --dbname=spqr-console ` --set=sslmode=verify-full ` --set=sslrootcert=$HOME\.postgresql\root.crtПодробнее о подключении к кластеру Managed Service for Sharded PostgreSQL.
-
Создайте правило шардирования:
CREATE DISTRIBUTION ds1 COLUMN TYPES int;Будет создано правило шардирования с именем
ds1для столбцов типаint. -
Привяжите таблицу к правилу и укажите ключ шардирования:
ALTER DISTRIBUTION ds1 ATTACH RELATION customers DISTRIBUTION KEY id;Таблица
customersбудет привязана к правилуds1. Ключ шардирования для таблицыcustomers— столбецid. -
Создайте диапазоны значений ключа для распределения данных по шардам:
CREATE KEY RANGE krid2 FROM 1000 ROUTE TO <имя_шарда_2> FOR DISTRIBUTION ds1; CREATE KEY RANGE krid1 FROM 1 ROUTE TO <имя_шарда_1> FOR DISTRIBUTION ds1;Важно
Создавайте диапазоны значений ключа, начиная с наибольшего значения. Нарушение этого порядка приведет к ошибке
key range krid2 intersects with key range krid1 in QDB. Для диапазона с наибольшим значением ключа правая граница будет равна бесконечности. -
Чтобы выйти из консоли администратора, выполните команду
\q.
Отправьте запросы к БД
-
Подключитесь к БД:
Linux (Bash)/macOS (Zsh)Windows (PowerShell)psql "host=<FQDN_хоста> \ port=6432 \ sslmode=verify-full \ sslrootcert=~/.postgresql/root.crt \ dbname=<имя_БД> \ user=<имя_пользователя> \ target_session_attrs=read-write"Подробнее о подключении к кластеру Managed Service for Sharded PostgreSQL.
& "C:\Program Files\PostgreSQL\<мажорная_версия_PostgreSQL>\bin\psql.exe" ` --host=<FQDN_хоста> ` --port=6432 ` --username=<имя_пользователя> ` --dbname=<имя_БД> ` --set=target_session_attrs=read-write ` --set=sslmode=verify-full ` --set=sslrootcert=$HOME\.postgresql\root.crtПодробнее о подключении к кластеру Managed Service for Sharded PostgreSQL.
-
Создайте таблицу
customers:CREATE TABLE customers ( id INT, name VARCHAR, phone VARCHAR, acctbal NUMERIC ); -
Начните транзакцию:
BEGIN; -
Добавьте строки:
-
Добавьте строку в шард с диапазоном значений
krid1:INSERT INTO customers (id, name, phone, acctbal) VALUES (28, 'Иван Иванов', '123-45-67', 1500.50); -
Добавьте строку в шард с диапазоном значений
krid2:INSERT INTO customers (id, name, phone, acctbal) VALUES (3200, 'Дмитрий Кузнецов', '555-66-77', -50.75);
-
-
Завершите транзакцию:
COMMIT; -
Посмотрите строки, указав значение ключа в запросе, например:
SELECT * FROM customers WHERE id = 28;Запрос
SELECT * FROM customers;приведет к ошибке, так как строки распределены по разным шардам. Одновременно можно получить строки только с одного шарда. Чтобы проверить распределение строк по шардам, подключитесь к каждому шарду и посмотрите добавленные записи. -
Чтобы выйти из базы данных, выполните команду
\q.
Что дальше
- Изучите концепции сервиса.
- Узнайте подробнее о создании кластера и подключении к БД.