Миграция базы данных в Managed Service for Redis
Для миграции данных в Redis используется логический дамп — файл с набором команд, последовательное выполнение которых восстанавливает состояние баз данных в кластере. Его можно создать разными способами, далее для примера используется redis-dump-go.
Примечание
Для миграции нельзя использовать бинарный дамп в формате RDB, т. к. Managed Service for Redis не предоставляет доступ к файловой системе на хостах кластера.
Чтобы мигрировать базы данных Redis из кластера-источника в кластер-приемник:
- Подключитесь к кластеру-источнику и создайте логический дамп.
- Создайте и настройте промежуточную виртуальную машину.
- Восстановите дамп в кластере-приемнике.
- Убедитесь, что дамп полностью восстановлен.
Перед началом работы
-
Создайте кластер Managed Service for Redis любой подходящей конфигурации.
-
Настройте группы безопасности кластера и промежуточной виртуальной машины.
-
(Опционально) Установите на локальный компьютер утилиты для скачивания и загрузки файлов по протоколу 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
-
Если для подключения к кластеру Redis нужен пароль, укажите его в значении переменной окружения
REDISDUMPGO_AUTH
:export REDISDUMPGO_AUTH="<пароль Redis>"
-
Запустите интерактивную сессию
screen
:screen
-
Запустите процесс создания логического дампа:
./redis-dump-go \ -host <IP-адрес или FQDN хоста-мастера в кластере Redis> \ -port <порт Redis> > <файл дампа>
Совет
В процессе создания дампа на экран будет выводиться количество обработанных ключей. Запомните или запишите последнее выведенное значение, оно понадобится при проверке полноты восстановления дампа в кластере-приемнике.
-
Когда дамп будет создан, скачайте его на свой компьютер.
-
Завершите интерактивную сессию
screen
:exit
Создайте и настройте промежуточную виртуальную машину
-
Создайте виртуальную машину с Linux со следующими параметрами:
- В блоке Выбор образа/загрузочного диска выберите Операционные системы →
Ubuntu 20.04
. - В блоке Сетевые настройки:
- Подсеть — выберите ту, в которой находится хотя бы один из хостов-мастеров кластера Managed Service for Redis.
- Публичный адрес —
Автоматически
. - Внутренний адрес —
Автоматически
. - Группы безопасности — выберите настроенные ранее группы безопасности.
- В блоке Выбор образа/загрузочного диска выберите Операционные системы →
-
Если ваш кластер Managed Service for Redis развернут с включенной поддержкой TLS:
-
Добавьте в список репозиториев официальный репозиторий Redis:
sudo apt-add-repository ppa:redislabs/redis
Примечание
Пакеты в этом репозитории собраны с флагом
BUILD_TLS=yes
, поэтому пересобирать их из исходного кода вручную не нужно.
-
Обновите список доступных пакетов и установите необходимые утилиты:
sudo apt update && sudo apt install redis-tools screen --yes
Восстановите дамп в кластере-приемнике
-
Загрузите дамп со своего компьютера на промежуточную виртуальную машину любым удобным способом.
-
Запустите интерактивную сессию
screen
:screen
-
Запустите процесс восстановления дампа:
Подключение без TLSПодключение с TLSПодключение с помощью Sentinel
host=$(redis-cli \ -h <FQDN любого хоста Redis> \ -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.sh
shards=('<FQDN хоста-мастера в шарде 1>' \ ... '<FQDN хоста-мастера в шарде N>') for shard in "${shards[@]}" ; do redis-cli -h "${shard}" \ -p 6379 \ -a "<пароль кластера-приемника>" \ --pipe < <файл дампа> done
-
Запустите скрипт:
bash ./load-dump.sh
Во время работы скрипта будут выводиться сообщения об ошибках вставки данных. Это нормальное поведение команды
redis-cli
, связанное с тем, что в шардированном кластере каждый шард хранит только часть данных. Подробнее см. в разделе Шардирование в Managed Service for Redis.
Подключение с помощью Sentinel
host=$(redis-cli \ -h <FQDN любого хоста Redis> \ -p 26379 \ sentinel \ get-master-addr-by-name \ no-shards-tls | head -n 1) redis-cli \ -h ${host} \ -p 6380 \ -a <пароль кластера-приемника> \ --tls \ --cacert ~/.redis/YandexCA.crt \ --pipe < <файл дампа>
Подключение напрямую к мастеру
redis-cli \ -h c-<идентификатор кластера>.rw.mdb.yandexcloud.net \ -p 6380 \ -a <пароль кластера-приемника> \ --tls \ --cacert ~/.redis/YandexCA.crt \ --pipe < <файл дампа>
При подключении к нешардированному кластеру вместо FQDN хоста-мастера можно использовать особые FQDN.
Подключение к шардированному кластеру
-
Создайте скрипт с командами загрузки дампа:
load-dump.sh
shards=('<FQDN хоста-мастера в шарде 1>' \ ... '<FQDN хоста-мастера в шарде N>') for shard in "${shards[@]}" ; do redis-cli -h "${shard}" \ -p 6380 \ -a "<пароль кластера-приемника>" \ --tls \ --cacert ~/.redis/YandexCA.crt \ --pipe < <файл дампа> done
-
Запустите скрипт:
bash ./load-dump.sh
Во время работы скрипта будут выводиться сообщения об ошибках вставки данных. Это нормальное поведение команды
redis-cli
, связанное с тем, что в шардированном кластере каждый шард хранит только часть данных. Подробнее см. в разделе Шардирование в Managed Service for Redis.
-
-
Завершите интерактивную сессию
screen
:exit
Убедитесь, что дамп полностью восстановлен
- В консоли управления перейдите в каталог, где нужно восстановить кластер.
- В списке сервисов выберите Managed Service for Redis.
- Нажмите на имя нужного кластера и выберите вкладку Мониторинг.
Обратите внимание на график DB Keys, отображающий количество ключей, хранящихся в кластере. Если кластер шардированный, на графике будет выводиться количество ключей в каждом шарде. В этом случае количество ключей в кластере равно суммарному количеству ключей в шардах.
Общее количество ключей в кластере должно совпадать с числом ключей, обработанных утилитой redis-dump-go
при создании дампа.