Yandex Cloud
  • Сервисы
  • Решения
  • Почему Yandex Cloud
  • Сообщество
  • Тарифы
  • Документация
  • Связаться с нами
Подключиться
Language / Region
© 2022 ООО «Яндекс.Облако»
Yandex Managed Service for Redis
  • Начало работы
  • Пошаговые инструкции
    • Все инструкции
    • Информация об имеющихся кластерах
    • Создание кластера
    • Изменение настроек кластера и базы данных
    • Подключение к базе данных
      • Подготовка к подключению
      • Подключение к нешардированному кластеру
      • Подключение к шардированному кластеру
    • Остановка и запуск кластера
    • Обновление версии Redis
    • Управление хостами кластера
    • Управление шардами
    • Управление резервными копиями
    • Переключение мастера
    • Мониторинг состояния кластера и хостов
    • Просмотр логов кластера
    • Удаление кластера
  • Практические руководства
    • Хранение сессий PHP в Managed Service for Redis
    • Миграция базы данных в Managed Service for Redis
  • Концепции
    • Взаимосвязь ресурсов сервиса
    • Классы хостов
    • Сеть в Managed Service for Redis
    • Шардирование
    • Резервные копии
    • Репликация и отказоустойчивость
    • Поддерживаемые клиенты
    • Управление памятью в Managed Service for Redis
    • Доступные команды Managed Service for Redis
    • Квоты и лимиты
    • Типы хранилища
    • Техническое обслуживание
    • Настройки Redis
  • Управление доступом
  • Правила тарификации
    • Действующие правила
    • Архив
      • До 1 февраля 2020 года
  • Справочник API
    • Аутентификация в API
    • gRPC (англ.)
      • Overview
      • BackupService
      • ClusterService
      • ResourcePresetService
      • OperationService
    • REST (англ.)
      • Overview
      • Backup
        • Overview
        • get
        • list
      • Cluster
        • Overview
        • addHosts
        • addShard
        • backup
        • create
        • delete
        • deleteHosts
        • deleteShard
        • get
        • getShard
        • list
        • listBackups
        • listHosts
        • listLogs
        • listOperations
        • listShards
        • move
        • rebalance
        • rescheduleMaintenance
        • restore
        • start
        • startFailover
        • stop
        • streamLogs
        • update
        • updateHosts
      • ResourcePreset
        • Overview
        • get
        • list
      • Operation
        • Overview
        • get
  • История изменений
  • Вопросы и ответы
    • Общие вопросы
  1. Практические руководства
  2. Миграция базы данных в Managed Service for Redis

Миграция базы данных в Managed Service for Redis

Статья создана
Yandex Cloud
  • Перед началом работы
  • Подключитесь к кластеру-источнику и создайте логический дамп
  • Создайте и настройте промежуточную виртуальную машину
  • Восстановите дамп в кластере-приемнике
  • Убедитесь, что дамп полностью восстановлен

Для миграции данных в Redis используется логический дамп — файл с набором команд, последовательное выполнение которых восстанавливает состояние баз данных в кластере. Его можно создать разными способами, далее для примера используется redis-dump-go.

Примечание

Для миграции нельзя использовать бинарный дамп в формате RDB, т. к. Managed Service for Redis не предоставляет доступ к файловой системе на хостах кластера.

Чтобы мигрировать базы данных Redis из кластера-источника в кластер-приемник:

  1. Подключитесь к кластеру-источнику и создайте логический дамп.
  2. Создайте и настройте промежуточную виртуальную машину.
  3. Восстановите дамп в кластере-приемнике.
  4. Убедитесь, что дамп полностью восстановлен.

Перед началом работы

  1. Создайте кластер Managed Service for Redis любой подходящей конфигурации.

  2. Настройте группы безопасности кластера и промежуточной виртуальной машины.

  3. (Опционально) Установите на локальный компьютер утилиты для скачивания и загрузки файлов по протоколу SSH, например:

    • WinSCP
    • Putty SCP
  4. Убедитесь, что на кластере-источнике установлена утилита GNU Screen.

    Создание и восстановление дампа могут занять длительное время. Чтобы эти процессы не прерывались при закрытии SSH-сессии по таймауту, запускайте их с помощью этой утилиты. Если при создании или восстановлении дампа SSH-соединение будет прервано, подключитесь повторно и восстановите состояние сессии с помощью команды:

    screen -R
    

Подключитесь к кластеру-источнику и создайте логический дамп

  1. Подключитесь к хосту-мастеру кластера-источника по SSH.

  2. Загрузите архив с утилитой 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
    
  3. Распакуйте архив в текущий каталог:

    tar xf redis-dump-go_0.5.1_linux_amd64.tar.gz
    
  4. Изучите параметры запуска утилиты:

    ./redis-dump-go -h
    
  5. Если для подключения к кластеру Redis нужен пароль, укажите его в значении переменной окружения REDISDUMPGO_AUTH:

    export REDISDUMPGO_AUTH="<пароль Redis>"
    
  6. Запустите интерактивную сессию screen:

    screen
    
  7. Запустите процесс создания логического дампа:

    ./redis-dump-go \
        -host <IP-адрес или FQDN хоста-мастера в кластере Redis> \
        -port <порт Redis> > <файл дампа>
    

    Совет

    В процессе создания дампа на экран будет выводиться количество обработанных ключей. Запомните или запишите последнее выведенное значение, оно понадобится при проверке полноты восстановления дампа в кластере-приемнике.

  8. Когда дамп будет создан, скачайте его на свой компьютер.

  9. Завершите интерактивную сессию screen:

    exit
    

Создайте и настройте промежуточную виртуальную машину

  1. Создайте виртуальную машину с Linux со следующими параметрами:

    • В блоке Выбор образа/загрузочного диска выберите Операционные системы → Ubuntu 20.04.
    • В блоке Сетевые настройки:
      • Подсеть — выберите ту, в которой находится хотя бы один из хостов-мастеров кластера Managed Service for Redis.
      • Публичный адрес — Автоматически.
      • Внутренний адрес — Автоматически.
      • Группы безопасности — выберите настроенные ранее группы безопасности.
  2. Подключитесь к промежуточной виртуальной машине по SSH.

  3. Если ваш кластер Managed Service for Redis развернут с включенной поддержкой TLS:

    1. Получите SSL сертификат.

    2. Добавьте в список репозиториев официальный репозиторий Redis:

      sudo apt-add-repository ppa:redislabs/redis
      

      Примечание

      Пакеты в этом репозитории собраны с флагом BUILD_TLS=yes, поэтому пересобирать их из исходного кода вручную не нужно.

  4. Обновите список доступных пакетов и установите необходимые утилиты:

    sudo apt update && sudo apt install redis-tools screen --yes
    

Восстановите дамп в кластере-приемнике

  1. Загрузите дамп со своего компьютера на промежуточную виртуальную машину любым удобным способом.

  2. Запустите интерактивную сессию screen:

    screen
    
  3. Запустите процесс восстановления дампа:

    Подключение без 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.

    Подключение к шардированному кластеру

    1. Создайте скрипт с командами загрузки дампа:

      load-dump.sh

      shards=('<FQDN хоста-мастера в шарде 1>' \
              ...
              '<FQDN хоста-мастера в шарде N>')
      
      for shard in "${shards[@]}" ; do
        redis-cli -h "${shard}" \
                  -p 6379 \
                  -a "<пароль кластера-приемника>" \
                  --pipe < <файл дампа>
      done
      
    2. Запустите скрипт:

      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.

    Подключение к шардированному кластеру

    1. Создайте скрипт с командами загрузки дампа:

      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
      
    2. Запустите скрипт:

      bash ./load-dump.sh
      

      Во время работы скрипта будут выводиться сообщения об ошибках вставки данных. Это нормальное поведение команды redis-cli, связанное с тем, что в шардированном кластере каждый шард хранит только часть данных. Подробнее см. в разделе Шардирование в Managed Service for Redis.

  4. Завершите интерактивную сессию screen:

    exit
    

Убедитесь, что дамп полностью восстановлен

  1. В консоли управления перейдите в каталог, где нужно восстановить кластер.
  2. В списке сервисов выберите Managed Service for Redis.
  3. Нажмите на имя нужного кластера и выберите вкладку Мониторинг.

Обратите внимание на график DB Keys, отображающий количество ключей, хранящихся в кластере. Если кластер шардированный, на графике будет выводиться количество ключей в каждом шарде. В этом случае количество ключей в кластере равно суммарному количеству ключей в шардах.

Общее количество ключей в кластере должно совпадать с числом ключей, обработанных утилитой redis-dump-go при создании дампа.

Была ли статья полезна?

Language / Region
© 2022 ООО «Яндекс.Облако»
В этой статье:
  • Перед началом работы
  • Подключитесь к кластеру-источнику и создайте логический дамп
  • Создайте и настройте промежуточную виртуальную машину
  • Восстановите дамп в кластере-приемнике
  • Убедитесь, что дамп полностью восстановлен