Миграция базы данных из стороннего кластера Valkey™
Для миграции данных в Valkey™ используется логический дамп — файл с набором команд, последовательное выполнение которых восстанавливает состояние баз данных в кластере. Его можно создать разными способами, далее для примера используется redis-dump-go
Примечание
Для миграции нельзя использовать бинарный дамп в формате RDB, т. к. Yandex Managed Service for Valkey™ не предоставляет доступ к файловой системе на хостах кластера.
Чтобы мигрировать базы данных Valkey™ из кластера-источника в кластер-приемник:
- 
Подключитесь к кластеру-источнику и создайте логический дамп.
 - 
(Опционально) Загрузите дамп на промежуточную виртуальную машину.
Переносить данные с помощью виртуальной машины в Yandex Compute Cloud нужно, если:
- К вашему кластеру Yandex Managed Service for Valkey™ нет доступа из интернета.
 - Ваше оборудование или соединение с кластером в Yandex Cloud недостаточно надежны.
 
 
Если созданные ресурсы вам больше не нужны, удалите их.
Необходимые платные ресурсы
В стоимость поддержки описываемого решения входят:
- Плата за кластер-приемник Yandex Managed Service for Valkey™: использование вычислительных ресурсов, выделенных хостам, и дискового пространства (см. тарифы Valkey™).
 - Плата за использование публичных IP-адресов, если для хостов кластера включен публичный доступ (см. тарифы Virtual Private Cloud).
 - При создании виртуальной машины для загрузки дампа — плата за использование вычислительных ресурсов, хранилища, операционной системы (для отдельных ОС) и публичного IP-адреса (опционально) (см. тарифы Compute Cloud).
 
Перед началом работы
Подготовьте инфраструктуру
- 
Создайте кластер Yandex Managed Service for Valkey™ любой подходящей конфигурации. Для подключения к кластеру с локальной машины пользователя, а не из облачной сети Yandex Cloud, включите поддержку TLS и публичный доступ для хостов при создании кластера.
 - 
(Опционально) Создайте промежуточную виртуальную машину Linux в Yandex Compute Cloud в той же сети, что и кластер Yandex Managed Service for Valkey™ в следующей конфигурации:
- 
В блоке Образ загрузочного диска выберите образ Ubuntu 20.04.
 - 
В блоке Сетевые настройки:
- Публичный IP-адрес — 
Автоматически. - Внутренний IPv4-адрес — 
Автоматически. - Группы безопасности — выберите ту же группу безопасности, что и для кластера Yandex Managed Service for Valkey™.
 
 - Публичный IP-адрес — 
 
 - 
 - 
Если вы используете группы безопасности Virtual Private Cloud, настройте их.
 
- 
Если у вас еще нет Terraform, установите его.
 - 
Получите данные для аутентификации. Вы можете добавить их в переменные окружения или указать далее в файле с настройками провайдера.
 - 
Настройте и инициализируйте провайдер. Чтобы не создавать конфигурационный файл с настройками провайдера вручную, скачайте его
 . - 
Поместите конфигурационный файл в отдельную рабочую директорию и укажите значения параметров. Если данные для аутентификации не были добавлены в переменные окружения, укажите их в конфигурационном файле.
 - 
Скачайте в ту же рабочую директорию файл конфигурации для подходящего типа кластера:
- redis-cluster-non-sharded.tf
 — для нешардированного кластера. - redis-cluster-sharded.tf
 — для шардированного кластера. 
В каждом файле описаны:
- сеть;
 - подсеть;
 - группа безопасности по умолчанию и правила, необходимые для подключения к кластеру и виртуальной машине;
 - кластер Yandex Managed Service for Valkey™ с публичным доступом из интернета;
 - (опционально) виртуальная машина с публичным доступом из интернета.
 
 - redis-cluster-non-sharded.tf
 - 
Укажите в файле конфигурации:
- 
Пароль для доступа к кластеру Yandex Managed Service for Valkey™.
 - 
(Опционально) Параметры виртуальной машины:
- Идентификатор публичного образа виртуальной машины. Например, для Ubuntu 20.04 LTS.
 - Логин и абсолютный путь к публичной части SSH-ключа, которые будут использоваться для доступа к виртуальной машине. По умолчанию в образе Ubuntu 20.04 LTS указанный логин игнорируется, вместо него создается пользователь с логином 
ubuntu. Используйте его для подключения к виртуальной машине. 
 
 - 
 - 
Проверьте корректность файлов конфигурации Terraform с помощью команды:
terraform validateЕсли в файлах конфигурации есть ошибки, Terraform на них укажет.
 - 
Создайте необходимую инфраструктуру:
- 
Выполните команду для просмотра планируемых изменений:
terraform planЕсли конфигурации ресурсов описаны верно, в терминале отобразится список изменяемых ресурсов и их параметров. Это проверочный этап: ресурсы не будут изменены.
 - 
Если вас устраивают планируемые изменения, внесите их:
- 
Выполните команду:
terraform apply - 
Подтвердите изменение ресурсов.
 - 
Дождитесь завершения операции.
 
 - 
 
В указанном каталоге будут созданы все требуемые ресурсы. Проверить появление ресурсов и их настройки можно в консоли управления
 . - 
 
Установите дополнительное ПО
- 
(Опционально) Установите на локальный компьютер утилиты для скачивания и загрузки файлов по протоколу SSH, например:
 - 
Убедитесь, что на кластере-источнике установлена утилита GNU Screen
 .Создание и восстановление дампа могут занять длительное время. Чтобы эти процессы не прерывались при закрытии SSH-сессии по таймауту, запускайте их с помощью этой утилиты. Если при создании или восстановлении дампа SSH-соединение будет прервано, подключитесь повторно и восстановите состояние сессии с помощью команды:
screen -R 
Подключитесь к кластеру-источнику и создайте логический дамп
- 
Подключитесь к хосту-мастеру кластера-источника по SSH.
 - 
Загрузите архив с утилитой
redis-dump-goсо страницы проекта . Далее в примерах используется версия0.5.1.wget https://github.com/yannh/redis-dump-go/releases/download/v0.5.1/redis-dump-go_0.5.1_linux_amd64.tar.gz - 
Распакуйте архив в текущий каталог:
tar xf redis-dump-go_0.5.1_linux_amd64.tar.gz - 
Изучите параметры запуска утилиты:
./redis-dump-go -h - 
Если для подключения к кластеру Valkey™ нужен пароль, укажите его в значении переменной окружения
REDISDUMPGO_AUTH:export REDISDUMPGO_AUTH="<пароль_Valkey™>" - 
Запустите интерактивную сессию
screen:screen - 
Запустите процесс создания логического дампа:
./redis-dump-go \ -host <IP-адрес_или_FQDN_хоста-мастера_в_кластере_Valkey™> \ -port <порт_Valkey™> > <файл_дампа>Совет
В процессе создания дампа на экран будет выводиться количество обработанных ключей. Запомните или запишите последнее выведенное значение, оно понадобится при проверке полноты восстановления дампа в кластере-приемнике.
 - 
Когда дамп будет создан, скачайте его на свой компьютер.
 - 
Завершите интерактивную сессию
screen:exit 
(Опционально) Загрузите дамп на промежуточную виртуальную машину
- 
Загрузите дамп со своего компьютера на промежуточную виртуальную машину любым удобным способом.
 
Восстановите дамп в кластере-приемнике
- 
Подключитесь к кластеру и запустите интерактивную сессию
screen:screen - 
Запустите процесс восстановления дампа:
Подключение без TLSПодключение с TLSПеред подключением установите зависимости:
sudo apt update && sudo apt install -y redis-toolsПодключение с помощью Sentinel
host=$(redis-cli \ -h <FQDN_любого_хоста_Valkey™> \ -p 26379 \ sentinel \ get-master-addr-by-name \ no-shards-no-tls | head -n 1) redis-cli \ -h ${host} \ -p 6379 \ -a <пароль_кластера-приемника> \ --pipe < <файл_дампа>Подключение напрямую к мастеру
redis-cli \ -h <FQDN_хоста-мастера> \ -p 6379 \ -a <пароль_кластера-приемника> \ --pipe < <файл_дампа>При подключении к нешардированному кластеру вместо FQDN хоста-мастера можно использовать особые FQDN.
Подключение к шардированному кластеру
- 
Создайте скрипт с командами загрузки дампа:
load-dump.shshards=('<FQDN_хоста-мастера_в_шарде_1>' \ ... '<FQDN_хоста-мастера_в_шарде_N>') for shard in "${shards[@]}" ; do redis-cli -h "${shard}" \ -p 6379 \ -a "<пароль_кластера-приемника>" \ --pipe < <файл_дампа> done - 
Запустите скрипт:
bash ./load-dump.shВо время работы скрипта будут выводиться сообщения об ошибках вставки данных. Это нормальное поведение команды
redis-cli, связанное с тем, что в шардированном кластере каждый шард хранит только часть данных. Подробнее см. в разделе Шардирование в Yandex Managed Service for Valkey™. 
Перед подключением установите зависимости:
Соберите утилиту
redis-toolsс поддержкой TLS одним из двух способов::- 
Из репозитория
- 
Подключите репозиторий:
sudo apt-add-repository ppa:redislabs/redisПакеты в этом репозитории уже собраны с флагом
BUILD_TLS=yes. - 
Установите утилиту:
sudo apt update && sudo apt install -y redis-tools 
 - 
 - 
Вручную
Перейдите в директорию, куда хотите скачать дистрибутив. Скачайте стабильную версию утилиты и выполните сборку и установку:
wget https://download.redis.io/redis-stable.tar.gz && \ tar -xzvf redis-stable.tar.gz && \ cd redis-stable && \ make BUILD_TLS=yes && \ sudo make install && \ sudo cp ./src/redis-cli /usr/bin/ 
Подключение с помощью Sentinel
host=$(redis-cli \ -h <FQDN_любого_хоста_Valkey™> \ -p 26379 \ sentinel \ get-master-addr-by-name \ no-shards-tls | head -n 1) redis-cli \ -h ${host} \ -p 6380 \ -a <пароль_кластера-приемника> \ --tls \ --cacert ~/.redis/YandexInternalRootCA.crt \ --pipe < <файл_дампа>Подключение напрямую к мастеру
redis-cli \ -h c-<идентификатор_кластера>.rw.mdb.yandexcloud.net \ -p 6380 \ -a <пароль_кластера-приемника> \ --tls \ --cacert ~/.redis/YandexInternalRootCA.crt \ --pipe < <файл_дампа>При подключении к нешардированному кластеру вместо FQDN хоста-мастера можно использовать особые FQDN.
Подключение к шардированному кластеру
- 
Создайте скрипт с командами загрузки дампа:
load-dump.shshards=('<FQDN_хоста-мастера_в_шарде_1>' \ ... '<FQDN_хоста-мастера_в_шарде_N>') for shard in "${shards[@]}" ; do redis-cli -h "${shard}" \ -p 6380 \ -a "<пароль_кластера-приемника>" \ --tls \ --cacert ~/.redis/YandexInternalRootCA.crt \ --pipe < <файл_дампа> done - 
Запустите скрипт:
bash ./load-dump.shВо время работы скрипта будут выводиться сообщения об ошибках вставки данных. Это нормальное поведение команды
redis-cli, связанное с тем, что в шардированном кластере каждый шард хранит только часть данных. Подробнее см. в разделе Шардирование в Yandex Managed Service for Valkey™. 
 - 
 - 
Завершите интерактивную сессию
screen:exit 
Убедитесь, что дамп полностью восстановлен
- В консоли управления
 перейдите в каталог, где нужно восстановить кластер. - В списке сервисов выберите Yandex Managed Service for Valkey™.
 - Нажмите на имя нужного кластера и выберите вкладку Мониторинг.
 
Обратите внимание на график DB Keys, отображающий количество ключей, хранящихся в кластере. Если кластер шардированный, на графике будет выводиться количество ключей в каждом шарде. В этом случае количество ключей в кластере равно суммарному количеству ключей в шардах.
Общее количество ключей в кластере должно совпадать с числом ключей, обработанных утилитой redis-dump-go при создании дампа.
Удалите созданные ресурсы
Удалите ресурсы, которые вы больше не будете использовать, чтобы за них не списывалась плата:
- Удалите кластер Yandex Managed Service for Valkey™.
 - Если вы создавали промежуточную виртуальную машину, удалите ее.
 - Если вы зарезервировали публичные статические IP-адреса, освободите и удалите их.
 
- 
В терминале перейдите в директорию с планом инфраструктуры.
Важно
Убедитесь, что в директории нет Terraform-манифестов с ресурсами, которые вы хотите сохранить. Terraform удаляет все ресурсы, которые были созданы с помощью манифестов в текущей директории.
 - 
Удалите ресурсы:
- 
Выполните команду:
terraform destroy - 
Подтвердите удаление ресурсов и дождитесь завершения операции.
 
Все ресурсы, которые были описаны в Terraform-манифестах, будут удалены.
 -