Вы можете создавать кластеры баз данных, состоящие из одной или нескольких баз выбранного типа СУБД.
Панель управления
Создать кластер баз данных можно в панели timeweb.cloud/my в разделе «Базы данных».
Нажмите «Добавить» и укажите параметры создаваемой базы:
Изменить выбранную БД или ее версию будет невозможно.
Выберите регион размещения кластера. Обратите внимание, что создание кластера с репликацией возможно только в BGP-сети и в следующих локациях: Санкт-Петербург, Москва и Нидерланды.
Конфигурацию можно будет изменить в любой момент. Уменьшить конфигурацию невозможно.
Для баз данных MySQL и PostgreSQL доступно создание кластера с репликацией. Вы можете указать количество реплик при настройке конфигурации: 3 или 5. Изменить количество реплик после создания кластера будет невозможно.
Цена за кластер с репликацией рассчитывается как количество реплик * стоимость одной ноды.Для MySQL используется кластерное решение на базе Percona XtraDB Cluster. Репликация в кластере осуществляется по принципу «multi-master» — это значит, что все узлы в кластере равнозначны и могут одновременно принимать записи и запросы. Обновления данных выполняются в синхронном режиме, что гарантирует консистентность данных на всех узлах. В случае недоступности одного из узлов, другие продолжают обслуживание запросов, обеспечивая высокую отказоустойчивость системы.
Для PostgreSQL используется кластер на основе Patroni и Etcd. Репликация работает по принципу «leader-replica», что означает, что в кластере есть один главный сервер (leader), на который направляются все записи. Реплики получают изменения в асинхронном режиме. В случае отказа лидера, Patroni с помощью Etcd автоматически переключает роль лидера на одну из реплик, обеспечивая высокую доступность базы данных.
Нажмите «Заказать», и вы сможете начать работу с базой через пару минут.
CLI
Для работы у вас должен быть установлен интерфейс командной строки Timeweb Cloud.
twc db create --help
twc db list-presets
Можно отфильтровать пресеты по типу БД с помощью type
. Например, чтобы получить только пресеты MySQL:
twc db list-presets -f type:mysql
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 этой инструкции).
Тарифы баз данных можно получить через API: https://api.timeweb.cloud/api/v1/presets/dbs
Например, с помощью параметров ниже мы создадим следующие сущности:
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"]
}
}
terraform validate
Если в конфигурационном файле есть ошибки, Terraform сообщит о них.
terraform plan
Terraform выведет информацию о создаваемых ресурсах.
terraform apply
Добрый день как с помощью 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 что я делаю неправильно?
Добрый день!
Для создания базы данных PostgreSQL с публичным доступом через Terraform можно воспользоваться следующим примером конфигурации:
Обратите внимание, что параметр
id
в ресурсеtwc_floating_ip
должен ссылаться на идентификатор кластера.Если ошибка сохраняется и исправить конфигурацию не удается, создайте, пожалуйста, тикет в поддержку и прикрепите файл конфигурации, с которым возникает проблема. Коллеги помогут разобраться в ситуации.
Пожалуйста, подскажите, есть ли возможность использовать TLS для соединения с managed mongodb?
Добрый день!
Такой возможности пока нет. Поддержка TLS для DBaaS запланирована на январь 2025 года. Вы можете увидеть это в нашем роадмапе.
Подскажите надёжный способ переноса базы данных postgres из одного кластера в другой (схема и данные) с учётом того, что нет прав владельца. Как сделать dump/restore для такого сценария?
Спасибо.
Приведите пожалуйста пример как создать redis через teraform. Подход кластер + инстанс + пользователь как для postgres, как я вижу не подходит. Инстанс как я понимаю создаётся сразу вместе с кластером.
Добрый день!
Да, создание инстанса для Redis не подразумевается.
Создать кластер Redis через Terraform действительно не удается 🤔 Мы передали информацию коллегам, чтобы это исправить, но по срокам решения пока сориентировать не сможем. Спасибо, что обратили внимание!
Как получить хост базы данных после создания через twc_database_instance для использования в k8s кластере?
Добрый день!
Для получения IP-адреса хоста базы данных, который можно использовать для подключения к базе данных в k8s, вы можете воспользоваться выходными переменными (output) в Terraform.
Добавьте следующий блок в ваш .tf-файл:
Где
my-cluster
— это имя вашего кластера.Затем выполните команду
terraform apply
. После успешного выполнения вы сможете получить IP-адрес базы данных командой:или с использованием опции для вывода чистого значения:
Этот IP-адрес вы можете передать в переменные окружения или конфигурационные файлы в Kubernetes для настройки подключения к базе данных.