<div><img src="https://top-fwz1.mail.ru/counter?id=3548135;js=na" style="position:absolute;left:-9999px;" alt="Top.Mail.Ru" /></div>
Бесплатный перенос IT-инфраструктуры в облако
На главную
25eb9e0a-a5a8-472a-ace7-940b8bd2adf0
Облачные сервисы

Создание кластера баз данных

Вы можете создавать кластеры баз данных, состоящие из одной или нескольких баз выбранного типа СУБД.

Панель управления

Создать кластер баз данных можно в панели timeweb.cloud/my в разделе «Базы данных». 

7d9e117e 9245 4da7 B57d E4b02afaf3ce

Нажмите «Добавить» и укажите параметры создаваемой базы:

  1. Тип базы данных и ее версия
    Доступны следующие базы:
    • MySQL 5.7, 8
    • PostgreSQL 13, 14, 15, 16, 17
    • MongoDB 6, 7
    • Redis 6, 7
    • Opensearch 2.9
    • ClickHouse 23.10.1
    • Kafka 3.5.1
    • RabbitMQ 3.12

Изменить выбранную БД или ее версию будет невозможно.

Image3

  1. Регион размещения и зона доступности.

    Выберите регион размещения кластера. Обратите внимание, что создание кластера с репликацией возможно только в BGP-сети и в следующих локациях: Санкт-Петербург, Москва и Нидерланды.

Image2

  1. Конфигурация

    Конфигурацию можно будет изменить в любой момент. Уменьшить конфигурацию невозможно. 

    Для баз данных MySQL и PostgreSQL доступно создание кластера с репликацией. Вы можете указать количество реплик при настройке конфигурации: 3 или 5. Изменить количество реплик после создания кластера будет невозможно. 

    Цена за кластер с репликацией рассчитывается как количество реплик * стоимость одной ноды.

    Для MySQL используется кластерное решение на базе Percona XtraDB Cluster. Репликация в кластере осуществляется по принципу «multi-master» — это значит, что все узлы в кластере равнозначны и могут одновременно принимать записи и запросы. Обновления данных выполняются в синхронном режиме, что гарантирует консистентность данных на всех узлах. В случае недоступности одного из узлов, другие продолжают обслуживание запросов, обеспечивая высокую отказоустойчивость системы.

    Для PostgreSQL используется кластер на основе Patroni и Etcd. Репликация работает по принципу «leader-replica», что означает, что в кластере есть один главный сервер (leader), на который направляются все записи. Реплики получают изменения в асинхронном режиме. В случае отказа лидера, Patroni с помощью Etcd автоматически переключает роль лидера на одну из реплик, обеспечивая высокую доступность базы данных.

Image5

  1. Сеть
    В сетевых настройках можно выбрать:
    • нужен ли базе публичный IP-адрес. Например, если планируется, что база будет работать только в приватной сети, выпускать для нее публичный IP не требуется. Стоимость публичного IP — 150 рублей в месяц; все публичные IPv4 «плавающие», их можно переносить между разными сервисами на вашем аккаунте;
    • приватную сеть — можно выбрать одну из существующих сетей или создать новую.

A33618fe 9c5e 48a7 9eb7 Fef93cb61413

  1. Дополнительные услуги
    В этом пункте вы можете включить бесплатное создание автоматических бэкапов. По умолчанию бэкапы создаются ежедневно с сохранением одной последней копии. Изменить настройки создания бэкапов можно в настройках кластера, во вкладке «Бэкапы».

Image4

  1. Информация о базе данных
    Здесь вы задаете пароль дефолтного пользователя (в дальнейшем вы сможете добавлять других пользователей БД). Пароль можно сгенерировать в панели или указать свой. Для MySQL доступен выбор типа хэша пароля. Вы всегда сможете изменить пароль, как и название базы. Также выберите, в какой проект добавить базу данных.

Image6

Нажмите «Заказать», и вы сможете начать работу с базой через пару минут.

CLI

Для работы у вас должен быть установлен интерфейс командной строки Timeweb Cloud.

    1. Ознакомьтесь со справкой по команде создания баз данных:
twc db create --help
    1. Посмотрите список доступных пресетов:
twc db list-presets

Можно отфильтровать пресеты по типу БД с помощью type. Например, чтобы получить только пресеты MySQL:

twc db list-presets -f type:mysql
    1. Создайте базу данных:
twc db create --name db-dev --type mysql8 --login app --preset-id 327

Далее twc предложит ввести пароль для базы данных. Вместо интерактивного ввода вы можете использовать опцию --password и ввести пароль прямо в командной строке (может быть небезопасно).

Команда выше создаст инстанс СУБД MySQL 8 db-dev с пользователем app. Имя базы данных для подключения будет default_db.

Получить все параметры подключения можно с помощью команды ниже, заменив 123456 на ваш ID инстанса СУБД:

twc db get -o yaml 123456

Параметры базы данных можно будет изменить в дальнейшем или сразу указать их при создании базы, например:

twc db create --name db-dev --type mysql8 --login app --preset-id 327 --param max_connections=200 --param max_allowed_packet=64M

Базе будет выдан публичный IP-адрес, который будет доступен в панели управления. Отключить доступ по публичному IP, если это потребуется, вы сможете в настройках базы после ее создания.

API

Для создания кластера базы данных воспользуйтесь методом createDatabaseCluster. Отправьте POST-запрос на /api/v1/databases и передайте в нем параметры создаваемого кластера.

Terraform

Дальнейшее описание предполагает, что у вас уже установлен Terraform, настроен провайдер Timeweb Cloud и инициализирован проект (шаги 1–4 этой инструкции).

    1. Ознакомьтесь с документацией:

Тарифы баз данных можно получить через API: https://api.timeweb.cloud/api/v1/presets/dbs

    1. В конфигурационном файле опишите параметры кластера БД, который нужно создать. Terraform выберет первый пресет, подходящий под заданные параметры.

Например, с помощью параметров ниже мы создадим следующие сущности:

    • Кластер MySQL 5.7
    • Локация — Санкт-Петербург
    • 2 ГБ ОЗУ и 20 ГБ диска 
    • Приватная сеть (локальный IP будет выдан автоматически; на текущий момент назначить его через Terraform невозможно)
    • Публичный IP
    • Две базы данных
    • Два пользователя базы данных
data "twc_database_preset" "preset" {
    location = "ru-1"
    type = "mysql"
    disk = 20 * 1024
    ram = 2 * 1024
}

#Создаем приватную сеть
resource "twc_vpc" "example-vpc" {
  name = "Example VPC"
  description = "Some example VPC"
  subnet_v4 = "192.168.0.0/24"
  location = "ru-1"
} #Создаем кластер resource "twc_database_cluster" "my-cluster" {   name = "My Cluster"   type = "mysql5"     preset_id = data.twc_database_preset.preset.id
    network {
      id = twc_vpc.example-vpc.id
  }
  is_external_ip = true } #Создаем базу данных resource "twc_database_instance" "db-instance" { cluster_id = twc_database_cluster.my-cluster.id name = "database1" } #Создаем еще одну базу данных resource "twc_database_instance" "second-db-instance" { cluster_id = twc_database_cluster.my-cluster.id name = "database2" } #Создаем пользователя с доступом ко всем БД resource "twc_database_user" "test-user-2" { cluster_id = twc_database_cluster.my-cluster.id login = "admin" password = "strongpassword1" privileges = ["SELECT", "INSERT", "UPDATE", "DELETE"] } #Создаем пользователя с доступом к конкретной базе resource "twc_database_user" "test-user" { cluster_id = twc_database_cluster.my-cluster.id login = "newuser" password = "userpassword1" instance { instance_id = twc_database_instance.second-db-instance.id privileges = ["SELECT", "INSERT", "UPDATE", "DELETE"] } }
    1. Проверьте конфигурацию:
terraform validate

Если в конфигурационном файле есть ошибки, Terraform сообщит о них.

    1. Проверьте запланированные изменения:
terraform plan

Terraform выведет информацию о создаваемых ресурсах.

    1. Если все корректно — примените конфигурацию:
terraform apply

 

Была ли статья полезна?
Ваша оценка очень важна
Комментарии 9
Alexandr
15.12.2024, 15:00

Добрый день как с помощью TF создать postgreSQL БД с публичным доступом? при передаче is_external_ip = true соответствующий признак "Разрешить доступ по публичному IP-адресу" не выставляется при попытке создать ресурс resource "twc_server_ip" с указанием source_server_id с идентификатором кластера или инстанса TF пишет ошибку can't receive server: received api error; status_code: 404, message: Server with id: 198725 is not found, error_code: server_not_found что я делаю неправильно?

Timeweb Cloud
Timeweb Cloud
17.12.2024, 10:58

Добрый день!

Для создания базы данных PostgreSQL с публичным доступом через Terraform можно воспользоваться следующим примером конфигурации:

terraform {
  required_providers {
    twc = {
      source = "tf.timeweb.cloud/timeweb-cloud/timeweb-cloud"
    }
  }
  required_version = ">= 1.5.3"
}

provider "twc" {
  token = "токен"
}

# Выбор пресета для PostgreSQL
data "twc_database_preset" "example-db-preset" {
  location = "ru-1"
  type     = "postgres"
  disk     = 8 * 1024

  price_filter {
    from = 100
    to   = 500
  }
}

# Создание кластера PostgreSQL
resource "twc_database_cluster" "example-postgresql" {
  name      = "example_postgresql"
  type      = "postgres"
  preset_id = data.twc_database_preset.example-db-preset.id
}

# Создание экземпляра в кластере PostgreSQL
resource "twc_database_instance" "example-postgresql-instance" {
  cluster_id = twc_database_cluster.example-postgresql.id
  name = "example"
}

# Создание Floating IP
resource "twc_floating_ip" "example-floating-ip" {
  availability_zone = "spb-3"
  comment = "Floating IP for PostgreSQL"

  resource {
    type = "dbaas"
    id   = twc_database_cluster.example-postgresql.id
  }
}

Обратите внимание, что параметр id в ресурсе twc_floating_ip должен ссылаться на идентификатор кластера.

Если ошибка сохраняется и исправить конфигурацию не удается, создайте, пожалуйста, тикет в поддержку и прикрепите файл конфигурации, с которым возникает проблема. Коллеги помогут разобраться в ситуации.

Кирилл
05.12.2024, 20:42

Пожалуйста, подскажите, есть ли возможность использовать TLS для соединения с managed mongodb?

Timeweb Cloud
Timeweb Cloud
06.12.2024, 13:39

Добрый день!

Такой возможности пока нет. Поддержка TLS для DBaaS запланирована на январь 2025 года. Вы можете увидеть это в нашем роадмапе.

Дмитрий
Дмитрий
11.11.2024, 23:24

Подскажите надёжный способ переноса базы данных postgres из одного кластера в другой (схема и данные) с учётом того, что нет прав владельца. Как сделать dump/restore для такого сценария?

Спасибо.

Дмитрий
Дмитрий
19.09.2024, 22:29

Приведите пожалуйста пример как создать redis через teraform. Подход кластер + инстанс + пользователь как для postgres, как я вижу не подходит. Инстанс как я понимаю создаётся сразу вместе с кластером.

Timeweb Cloud
Timeweb Cloud
20.09.2024, 14:38

Добрый день!

Да, создание инстанса для Redis не подразумевается.

Создать кластер Redis через Terraform действительно не удается 🤔 Мы передали информацию коллегам, чтобы это исправить, но по срокам решения пока сориентировать не сможем. Спасибо, что обратили внимание!

Дмитрий
Дмитрий
16.09.2024, 22:54

Как получить хост базы данных после создания через twc_database_instance для использования в k8s кластере?

Timeweb Cloud
Timeweb Cloud
18.09.2024, 13:25

Добрый день!

Для получения IP-адреса хоста базы данных, который можно использовать для подключения к базе данных в k8s, вы можете воспользоваться выходными переменными (output) в Terraform.

Добавьте следующий блок в ваш .tf-файл:

output "db_ip" {
  value = twc_database_cluster.my-cluster.networks[0].ips[0].ip
}

Где my-cluster — это имя вашего кластера.

Затем выполните команду terraform apply. После успешного выполнения вы сможете получить IP-адрес базы данных командой:

terraform output db_ip

или с использованием опции для вывода чистого значения:

terraform output -raw db_ip

Этот IP-адрес вы можете передать в переменные окружения или конфигурационные файлы в Kubernetes для настройки подключения к базе данных.