Вы можете создавать кластеры баз данных, состоящие из одной или нескольких баз выбранного типа СУБД.
Панель управления
Создать кластер баз данных можно в панели timeweb.cloud/my в разделе «Базы данных».
Нажмите «Добавить» и укажите параметры создаваемой базы:
- Тип базы данных и ее версия
Доступны следующие базы:- MySQL 8.0, 8.4
- PostgreSQL 14, 15, 16, 17
- MongoDB 7.0, 8.0
- Redis 7, 8.1
- Opensearch 2.19.1
- ClickHouse 23.10.1, 24.8.14, 25.1.6
- Kafka 3.5.1
- RabbitMQ 4.0
Изменить выбранную БД или ее версию будет невозможно.
- Регион размещения и зона доступности.
Выберите регион размещения кластера. Обратите внимание, что создание кластера с репликацией возможно только в BGP-сети и в следующих локациях: Санкт-Петербург, Москва, Нидерланды и Германия.
- Конфигурация
Конфигурацию можно будет изменить в любой момент. Уменьшить конфигурацию невозможно.
Для баз данных MySQL и PostgreSQL доступно создание кластера с репликацией. Вы можете указать количество реплик при настройке конфигурации: 3 или 5. Изменить количество реплик после создания кластера будет невозможно.
Цена за кластер с репликацией рассчитывается как количество реплик * стоимость одной ноды.Для MySQL используется кластерное решение на базе Percona XtraDB Cluster. Репликация в кластере осуществляется по принципу «multi-master» — это значит, что все узлы в кластере равнозначны и могут одновременно принимать записи и запросы. Обновления данных выполняются в синхронном режиме, что гарантирует консистентность данных на всех узлах. В случае недоступности одного из узлов, другие продолжают обслуживание запросов, обеспечивая высокую отказоустойчивость системы.
Для PostgreSQL используется кластер на основе Patroni и Etcd. Репликация работает по принципу «leader-replica», что означает, что в кластере есть один главный сервер (leader), на который направляются все записи. Реплики получают изменения в асинхронном режиме. В случае отказа лидера, Patroni с помощью Etcd автоматически переключает роль лидера на одну из реплик, обеспечивая высокую доступность базы данных.
- Сеть
В сетевых настройках можно выбрать:- нужен ли базе публичный IP-адрес. Например, если планируется, что база будет работать только в приватной сети, выпускать для нее публичный IP не требуется. Стоимость публичного IP — 150 рублей в месяц; все публичные IPv4 «плавающие», их можно переносить между разными сервисами на вашем аккаунте;
- приватную сеть — можно выбрать одну из существующих сетей или создать новую. При необходимости укажите приватный IP вручную.
- Дополнительные услуги
В этом пункте вы можете включить бесплатное создание автоматических бэкапов. По умолчанию бэкапы создаются ежедневно с сохранением одной последней копии. Изменить настройки создания бэкапов можно в настройках кластера, во вкладке «Бэкапы».
- Информация о базе данных
Здесь вы задаете пароль дефолтного пользователя (в дальнейшем вы сможете добавлять других пользователей БД). Пароль можно сгенерировать в панели или указать свой. Для MySQL доступен выбор типа хэша пароля. Вы всегда сможете изменить пароль, как и название базы. Также выберите, в какой проект добавить базу данных.
Нажмите «Заказать», и вы сможете начать работу с базой через пару минут.
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 mysql --login app --preset-id 327
Далее twc
предложит ввести пароль для базы данных. Вместо интерактивного ввода вы можете использовать опцию --password
и ввести пароль прямо в командной строке (может быть небезопасно).
Команда выше создаст инстанс СУБД MySQL 8 db-dev
с пользователем app
. Имя базы данных для подключения будет default_db
.
Также вы можете выбрать необходимые параметры для создания базы в панели управления в разделе «Базы данных», после чего нажмите на кнопку генерации команды для создания базы данных:
Перейдите во вкладку «Timeweb Cloud CLI» и скопируйте команду для создания базы данных.
Получить все параметры подключения можно с помощью команды ниже, заменив 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
и передайте в нем параметры создаваемого кластера.
Также вы можете выбрать необходимые параметры для создания базы в панели управления в разделе «Базы данных», после чего нажмите на кнопку генерации команды для создания базы данных:
Перейдите во вкладку «cURL», скопируйте команду и выполните её в терминале.
Обратите внимание, что для выполнения команды необходимо выпустить токен и установить переменную окружения:
export TIMEWEB_CLOUD_TOKEN=ваш_токен
Также в некоторых случаях может потребоваться установка утилиты jq
. Установить ее можно так:
Ubuntu/Debian
sudo apt install jq
Centos
sudo yum install epel-release -y
sudo yum install jq -y
MacOS
brew install jq
Terraform
Дальнейшее описание предполагает, что у вас уже установлен Terraform, настроен провайдер Timeweb Cloud и инициализирован проект (шаги 1–4 этой инструкции).
- Ознакомьтесь с документацией:
-
- источник данных twc_database_preset;
- ресурс twc_database_cluster;
- ресурс twc_database_instance;
- ресурс twc_database_user;
- ресурс twc_vpc.
Тарифы баз данных можно получить через API: https://api.timeweb.cloud/api/v1/presets/dbs
- В конфигурационном файле опишите параметры кластера БД, который нужно создать. 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"]
}
}
Также вы можете выбрать необходимые параметры для создания базы в панели управления в разделе «Базы данных», после чего нажмите на кнопку генерации команды для создания базы данных:
Перейдите во вкладку «Terraform» и скопируйте манифест в файл с расширением .tf
.
Обратите внимание, что в этом же манифесте подразумевается указание токена. Если токен указан в другом файле, вы можете просто удалить его из текущего манифеста. В противном случае укажите токен прямо в этом файле.
- Проверьте конфигурацию:
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 для настройки подключения к базе данных.