Создание MySQL-кластера
MySQL-кластер — это один или несколько хостов базы данных. В кластерах из более чем одного хоста автоматически настраивается полусинхронная репликация.
Подробнее об устройстве кластера Managed Service for MySQL см. в разделе Взаимосвязь ресурсов в Managed Service for MySQL.
Примечание
- Количество хостов, которые можно создать вместе с MySQL-кластером, зависит от выбранного типа хранилища и класса хостов.
- Доступные типы хранилища зависят от выбранного класса хостов.
Как создать кластер MySQL
-
В консоли управления выберите каталог, в котором нужно создать кластер БД.
-
Выберите сервис Managed Service for MySQL.
-
Нажмите кнопку Создать кластер.
-
Введите имя кластера в поле Имя кластера. Имя кластера должно быть уникальным в рамках каталога.
-
Выберите окружение, в котором нужно создать кластер (после создания кластера окружение изменить невозможно):
PRODUCTION
— для стабильных версий ваших приложений.PRESTABLE
— для тестирования, в том числе самого сервиса Managed Service for MySQL. В Prestable-окружении раньше появляются новая функциональность, улучшения и исправления ошибок. При этом не все обновления обеспечивают обратную совместимость.
-
Выберите версию СУБД.
-
Выберите класс хостов — он определяет технические характеристики виртуальных машин, на которых будут развернуты хосты БД. Все доступные варианты перечислены в разделе Классы хостов. При изменении класса хостов для кластера меняются характеристики всех уже созданных хостов.
-
В блоке Размер хранилища:
-
Выберите тип хранилища.
От выбранного типа зависит, с каким шагом можно будет изменить размер хранилища:
- хранилище на локальных SSD-дисках для платформ Intel Broadwell и Intel Cascade Lake — с шагом 100 ГБ;
- хранилище на локальных SSD-дисках для платформы Intel Ice Lake — с шагом 368 ГБ;
- хранилище на нереплицируемых SSD-дисках — с шагом 93 ГБ.
-
Выберите объем, который будет использоваться для данных и резервных копий. Подробнее о том, как занимают пространство резервные копии, см. раздел Резервные копии.
Примечание
Если хранилище баз данных заполнится на 95%, кластер перейдет в режим
только чтение
. Увеличивайте размер хранилища заранее.
-
-
В блоке База данных укажите атрибуты БД:
- Имя базы данных. Имя БД должно быть уникальным в рамках каталога и содержать только латинские буквы, цифры и подчеркивания.
- Имя пользователя — владельца БД. Имя пользователя должно содержать только латинские буквы, цифры и подчеркивания.
- Пароль пользователя, от 8 до 128 символов.
-
В блоке Сетевые настройки выберите облачную сеть для размещения кластера и группы безопасности для сетевого трафика кластера. Может потребоваться дополнительная настройка групп безопасности для того, чтобы можно было подключаться к кластеру.
-
В блоке Хосты выберите параметры хостов БД, создаваемых вместе с кластером. Открыв блок Расширенные настройки, вы можете выбрать конкретные подсети для каждого хоста — по умолчанию каждый хост создается в отдельной подсети.
Если в блоке Размер хранилища выбран
local-ssd
илиnetwork-ssd-nonreplicated
, то необходимо добавить не менее трех хостов в кластер. После создания кластера в него можно добавить дополнительные хосты, если для этого достаточно ресурсов каталога. -
При необходимости задайте дополнительные настройки кластера:
-
Начало резервного копирования (UTC)
Время по UTC (в 24-часовом формате), когда начинается резервное копирование кластера. Если время не задано, резервное копирование начинается в 22:00 UTC.
-
Окно обслуживания — настройки времени технического обслуживания:
- Чтобы разрешить проведение технического обслуживания в любое время, выберите пункт произвольное (по умолчанию).
- Чтобы указать предпочтительное время начала обслуживания, выберите пункт по расписанию и укажите нужные день недели и час дня по UTC. Например, можно выбрать время, когда кластер наименее загружен.
Операции по техническому обслуживанию проводятся для включенных и выключенных кластеров. Они могут включать в себя: обновление версии СУБД, применение патчей и так далее.
-
Доступ из DataLens
Разрешает анализировать данные из кластера в сервисе Yandex DataLens.
Подробнее о настройке подключения см. в разделе Подключение к DataLens.
-
Доступ из консоли управления
Разрешает выполнять SQL-запросы к базам кластера из консоли управления Yandex Cloud.
-
Доступ из Data Transfer — включите эту опцию, чтобы разрешить доступ к кластеру из сервиса Yandex Data Transfer в Serverless-режиме.
Это позволит через специальную сеть подключаться к Yandex Data Transfer, запущенному в Kubernetes. В результате будут быстрее выполняться, например, запуск и деактивация трансфера.
-
Сбор статистики — включите эту опцию, чтобы воспользоваться инструментом Диагностика производительности в кластере.
-
Защита от удаления — управляет защитой кластера от непреднамеренного удаления пользователем.
Включенная защита от удаления кластера не помешает подключиться вручную и удалить содержимое базы данных.
-
-
При необходимости задайте настройки СУБД уровня кластера.
Примечание
Некоторые настройки MySQL зависят от выбранного класса хостов.
-
Нажмите кнопку Создать кластер.
Если у вас еще нет интерфейса командной строки Yandex Cloud, установите и инициализируйте его.
По умолчанию используется каталог, указанный в профиле CLI. Вы можете указать другой каталог с помощью параметра --folder-name
или --folder-id
.
Чтобы создать кластер:
-
Проверьте, есть ли в каталоге подсети для хостов кластера:
$ yc vpc subnet list
Если ни одной подсети в каталоге нет, создайте нужные подсети в сервисе VPC.
-
Посмотрите описание команды CLI для создания кластера:
$ yc managed-mysql cluster create --help
-
Укажите параметры кластера в команде создания:
yc managed-mysql cluster create \ --name=<имя кластера> \ --environment <окружение, prestable или production> \ --network-name <имя сети> \ --host zone-id=<зона доступности>,subnet-id=<идентификатор подсети> \ --mysql-version <версия MySQL: 5.7 или 8.0> \ --resource-preset <класс хоста> \ --user name=<имя пользователя>,password=<пароль пользователя> \ --database name=<имя базы данных> \ --disk-size <размер хранилища в гигабайтах> \ --disk-type <network-hdd | network-ssd | local-ssd | network-ssd-nonreplicated> \ --security-group-ids <список идентификаторов групп безопасности> \ --deletion-protection=<защита от удаления кластера: true или fasle>
Идентификатор подсети
subnet-id
необходимо указывать, если в выбранной зоне доступности создано 2 и больше подсетей.Включенная защита от удаления кластера не помешает подключиться вручную и удалить содержимое базы данных.
При необходимости задайте настройки СУБД.
Terraform позволяет быстро создать облачную инфраструктуру в Yandex Cloud и управлять ею с помощью файлов конфигураций. В файлах конфигураций хранится описание инфраструктуры на языке HCL (HashiCorp Configuration Language). Terraform и его провайдеры распространяются под лицензией Mozilla Public License.
Подробную информацию о ресурсах провайдера смотрите в документации на сайте Terraform или в зеркале.
При изменении файлов конфигураций Terraform автоматически определяет, какая часть вашей конфигурации уже развернута, что следует добавить или удалить.
Если у вас еще нет Terraform, установите его и настройте провайдер.
Чтобы создать кластер:
-
Опишите в конфигурационном файле параметры ресурсов, которые необходимо создать:
-
Кластер базы данных — описание кластера и его хостов.
-
Сеть — описание облачной сети, в которой будет расположен кластер. Если подходящая сеть у вас уже есть, описывать ее повторно не нужно.
-
Подсети — описание подсетей, к которым будут подключены хосты кластера. Если подходящие подсети у вас уже есть, описывать их повторно не нужно.
Пример структуры конфигурационного файла:
terraform { required_providers { yandex = { source = "yandex-cloud/yandex" } } } provider "yandex" { token = "<OAuth или статический ключ сервисного аккаунта>" cloud_id = "<идентификатор облака>" folder_id = "<идентификатор каталога>" zone = "<зона доступности>" } resource "yandex_mdb_mysql_cluster" "<имя кластера>" { name = "<имя кластера>" environment = "<окружение, PRESTABLE или PRODUCTION>" network_id = "<идентификатор сети>" version = "<версия MySQL: 5.7 или 8.0>" security_group_ids = [ "<список групп безопасности>" ] deletion_protection = <защита от удаления кластера: true или false> resources { resource_preset_id = "<класс хоста>" disk_type_id = "<тип хранилища>" disk_size = "<размер хранилища в гигабайтах>" } database { name = "<имя базы данных>" } user { name = "<имя пользователя>" password = "<пароль пользователя>" permission { database_name = "<имя базы данных>" roles = ["ALL"] } } host { zone = "<зона доступности>" subnet_id = "<идентификатор подсети>" } } resource "yandex_vpc_network" "<имя сети>" { name = "<имя сети>" } resource "yandex_vpc_subnet" "<имя подсети>" { name = "<имя подсети>" zone = "<зона доступности>" network_id = "<идентификатор сети>" v4_cidr_blocks = ["<диапазон>"] }
Включенная защита от удаления кластера не помешает подключиться вручную и удалить содержимое базы данных.
-
Чтобы настроить время технического обслуживания (в т. ч. для выключенных кластеров), добавьте к описанию кластера блок
maintenance_window
:resource "yandex_mdb_mysql_cluster" "<имя кластера>" { ... maintenance_window { type = <тип технического обслуживания: ANYTIME или WEEKLY> day = <день недели для типа WEEKLY> hour = <час дня для типа WEEKLY> } ... }
Где:
type
— тип технического обслуживания:ANYTIME
— в любое время.WEEKLY
— по расписанию.
day
— день недели для типаWEEKLY
в форматеDDD
. Например,MON
.hour
— час дня по UTC для типаWEEKLY
в форматеHH
. Например,21
.
Более подробную информацию о ресурсах, которые вы можете создать с помощью Terraform, см. в документации провайдера.
-
-
Проверьте корректность конфигурационных файлов.
-
В командной строке перейдите в каталог, в котором создан конфигурационный файл.
-
Выполните проверку с помощью команды:
terraform plan
Если конфигурация описана верно, в терминале отобразится список создаваемых ресурсов и их параметров. Если в конфигурации есть ошибки, Terraform на них укажет. Это проверочный этап: ресурсы не будут созданы.
-
-
Создайте кластер.
-
Если в конфигурации нет ошибок, выполните команду:
terraform apply
-
Подтвердите создание ресурсов.
После этого в указанном каталоге будут созданы все требуемые ресурсы, а в терминале отобразятся IP-адреса виртуальных машин. Проверить появление ресурсов и их настройки можно в консоли управления.
Ограничения по времени
Провайдер Terraform ограничивает время на выполнение операций с кластером Managed Service for MySQL:
- создание кластера, в том числе путем восстановления из резервной копии, — 15 минут;
- изменение кластера — 60 минут;
- удаление кластера — 15 минут.
Операции, длящиеся дольше указанного времени, прерываются.
Как изменить эти ограничения?Добавьте к описанию кластера блок
timeouts
, например:resource "yandex_mdb_mysql_cluster" "<имя кластера>" { ... timeouts { create = "1h30m" # Полтора часа update = "2h" # 2 часа delete = "30m" # 30 минут } }
-
Воспользуйтесь методом API create и передайте в запросе:
- Идентификатор каталога, в котором должен быть размещен кластер, в параметре
folderId
. - Имя кластера в параметре
name
. Имя кластера должно быть уникальным в рамках каталога. - Окружение кластера в параметре
environment
. - Конфигурацию кластера в параметре
configSpec
. - Конфигурацию баз данных в одном или нескольких параметрах
databaseSpecs
. - Настройки пользователей в одном или нескольких параметрах
userSpecs
. - Конфигурацию хостов кластера в одном или нескольких параметрах
hostSpecs
. - Идентификатор сети в параметре
networkId
. - Идентификаторы групп безопасности в параметре
securityGroupIds
.
Чтобы разрешить доступ к кластеру из сервиса Yandex Data Transfer в Serverless-режиме, передайте значение true
для параметра configSpec.access.dataTransfer
.
Это позволит через специальную сеть подключаться к Yandex Data Transfer, запущенному в Kubernetes. В результате будут быстрее выполняться, например, запуск и деактивация трансфера.
Важно
Если вы указали идентификаторы групп безопасности при создании кластера, то для подключения к нему может потребоваться дополнительная настройка групп безопасности.
Примеры
Создание кластера с одним хостом
Чтобы создать кластер с одним хостом, передайте один параметр --host
.
Допустим, нужно создать MySQL-кластер со следующими характеристиками:
- С именем
my-mysql
. - Версии
8.0
. - В окружении
production
. - В сети
default
. - В группе безопасности с идентификатором
enp6saqnq4ie244g67sb
. - С одним хостом класса
s2.micro
в подсетиb0rcctk2rvtr8efcch64
, в зоне доступностиru-central1-a
. - С хранилищем на сетевых SSD-дисках (
network-ssd
) объемом 20 Гб. - С одним пользователем (
user1
), с паролемuser1user1
. - С одной базой данных
db1
, в которой пользовательuser1
имеет полные права (эквивалентGRANT ALL PRIVILEGES on db1.*
). - С защитой от случайного удаления кластера.
-
Запустите команду создания кластера:
yc managed-mysql cluster create \ --name="my-mysql" \ --mysql-version 8.0 \ --environment=production \ --network-name=default \ --security-group-ids enp6saqnq4ie244g67sb \ --host zone-id=ru-central1-a,subnet-id=b0rcctk2rvtr8efcch64 \ --resource-preset s2.micro \ --disk-type network-ssd \ --disk-size 20 \ --user name=user1,password="user1user1" \ --database name=db1 \ --deletion-protection=true
-
Запустите команду изменения привилегий пользователя
user1
.yc managed-mysql user grant-permission user1 \ --cluster-name="my-mysql" \ --database=db1 \ --permissions ALL
Допустим, нужно создать MySQL-кластер и сеть для него со следующими характеристиками:
- С именем
my-mysql
. - Версии
8.0
. - В окружении
PRESTABLE
. - В облаке с идентификатором
b1gq90dgh25bebiu75o
. - В каталоге с идентификатором
b1gia87mbaomkfvsleds
. - В новой сети
mynet
. - С одним хостом класса
s2.micro
в новой подсетиmysubnet
, в зоне доступностиru-central1-a
. Подсетьmysubnet
будет иметь диапазон10.5.0.0/24
. - В новой группе безопасности
mysql-sg
, разрешающей подключение к кластеру из интернета через порт3306
. - С хранилищем на сетевых SSD-дисках (
network-ssd
) объемом 20 ГБ. - С одним пользователем (
user1
), с паролемuser1user1
. - С одной базой данных
db1
, в которой пользовательuser1
имеет полные права (эквивалентGRANT ALL PRIVILEGES on db1.*
). - С защитой от случайного удаления кластера.
Конфигурационный файл для такого кластера выглядит так:
terraform {
required_providers {
yandex = {
source = "yandex-cloud/yandex"
}
}
}
provider "yandex" {
token = "<OAuth или статический ключ сервисного аккаунта>"
cloud_id = "b1gq90dgh25bebiu75o"
folder_id = "b1gia87mbaomkfvsleds"
zone = "ru-central1-a"
}
resource "yandex_mdb_mysql_cluster" "my-mysql" {
name = "my-mysql"
environment = "PRESTABLE"
network_id = yandex_vpc_network.mynet.id
version = "8.0"
security_group_ids = [ yandex_vpc_security_group.mysql-sg.id ]
deletion_protection = true
resources {
resource_preset_id = "s2.micro"
disk_type_id = "network-ssd"
disk_size = 20
}
database {
name = "db1"
}
user {
name = "user1"
password = "user1user1"
permission {
database_name = "db1"
roles = ["ALL"]
}
}
host {
zone = "ru-central1-a"
subnet_id = yandex_vpc_subnet.mysubnet.id
}
}
resource "yandex_vpc_network" "mynet" {
name = "mynet"
}
resource "yandex_vpc_security_group" "mysql-sg" {
name = "mysql-sg"
network_id = yandex_vpc_network.mynet.id
ingress {
description = "MySQL"
port = 3306
protocol = "TCP"
v4_cidr_blocks = [ "0.0.0.0/0" ]
}
}
resource "yandex_vpc_subnet" "mysubnet" {
name = "mysubnet"
zone = "ru-central1-a"
network_id = yandex_vpc_network.mynet.id
v4_cidr_blocks = ["10.5.0.0/24"]
}