Миграция данных в S3 из другого S3-совместимого хранилища

До миграции

  • Для организации целевого хранилища подключите услугу Объектное хранилище S3.

  • Для миграции также потребуется облачный сервер или персональный компьютер. На этот сервер устаналивается программа (например, Rclone) для управления миграцией данных.

    В качестве облачного сервера можно использовать услугу Виртуальный ЦОД на VMware с бесплатным тестовым периодом на 14 дней.

Важно

Процесс миграции данных может занимать значительное время. Длительность зависит от объема данных и пропускной способности каналов. Для минимизации простоя сервисов, использующих объектное хранилище, рекомендуем придерживаться следующего плана:

  1. Полное копирование объектов (без остановки сервисов).

  2. Синхронизация хранилищ — передаются только те объекты, которые изменились (без остановки сервисов). При необходимости этот этап повторяется несколько раз. Каждый следующий раз время, затраченное на синхронизацию, обычно уменьшается.

  3. Остановка сервисов, использующих хранилище. На этом этапе замораживаются любые изменения источника. Файлы доступны только для чтения.

  4. Финальная синхронизация хранилищ.

  5. Перенастройка сервисов на новое хранилище и запуск сервисов.

Шаг 1. Получите данные по подключению к текущему и целевому хранилищам

Получите следующие данные от исходного (текущего) и целевого (SberCloud) хранилищ:

  • Endpoint — адрес хранилища.

  • Region — регион хранилища (может быть пустым).

  • Accesses Key — идентификатор ключа (генерируется при создании корзины).

  • Secret Key — секретный ключ (генерируется при создании корзины).

  • Bucket Name — название корзины.

Если у вас нет реквизитов доступа к хранилищу SberCloud, обратитесь в техподдержку.

Шаг 2. Подготовьте инструменты для миграции

Вы можете использовать любую знакомую программу для миграции. Мы описали порядок действий на примере популярной утилиты командной строки Rclone.

Далее описан процесс установки и настройки Rclone для ОС Linux.

Установка Rclone

curl https://rclone.org/install.sh | sudo bash

Подключение к целевому хранилищу (SberCloud)

  1. Вызовите окно конфигурации:

    $ rclone config
    
  2. Появится диалог:

    No remotes found - make a new one
    n) New remote
    q) Quit config
    n/q>n
    

    Введите n и нажмите Enter.

  3. Укажите имя подключения к удаленному серверу. В нашем примере — sbercloud:

    name > sbercloud
    
  4. Выберите тип хранилища 4 / Amazon S3 Compliant Storage Provider и нажмите Enter:

    Type of storage to configure.
    Enter a string value. Press Enter for the default ("").
    Choose a number from below, or type in your own value
     1 / 1Fichier
       \ "fichier"
     2 / Alias for an existing remote
       \ "alias"
     3 / Amazon Drive
       \ "amazon cloud drive"
     4 / Amazon S3 Compliant Storage Provider (AWS, Alibaba, Ceph, Digital Ocean, Dreamhost, IBM COS, Minio, etc)
       \ "s3"
    
  5. Выберите тип провайдера 10 / Any other S3 compatible provider и нажмите Enter.

  6. Выберите способ получения учетных данных для подключения 1 / Enter AWS credentials in the next step и нажмите Enter:

    Get AWS credentials from runtime (environment variables or EC2/ECS meta data if no env vars).
    Only applies if access_key_id and secret_access_key is blank.
    Enter a boolean value (true or false). Press Enter for the default ("false").
    Choose a number from below, or type in your own value
     1 / Enter AWS credentials in the next step
       \ "false"
     2 / Get AWS credentials from the environment (env vars or IAM)
       \ "true"
    
  7. Введите пару ключей для доступа к хранилищу SberCloud (Access Key и Secret Key), которые вы получили на шаге 1.

    env_auth> 1
    AWS Access Key ID
    Leave blank for anonymous access or runtime credentials.
    Enter a string value. Press Enter for the default ("").
    access_key_id>xxxxxxxxxxxxxxxxxxxxxxxx
    
    AWS Secret Access Key (password)
    Leave blank for anonymous access or runtime credentials.
    Enter a string value. Press Enter for the default ("").
    secret_access_key>***************************
    
  8. Выберите регион 1 / Use this if unsure. Will use v4 signatures and an empty region.

  9. Укажите адрес подключения — Endpoint. В примере ниже Endpoint принимает значение https://b1.s3.sbercloud.ru.

    Endpoint for S3 API.
    Required when using an S3 clone.
    Enter a string value. Press Enter for the default ("").
    Choose a number from below, or type in your own value
    endpoint>https://b1.s3.sbercloud.ru
    
  10. Оставьте поле location_constraint> пустым и нажмите Enter:

    Location constraint - must be set to match the Region.
    Leave blank if not sure. Used when creating buckets only.
    Enter a string value. Press Enter for the default ("").
    location_constraint>
    
  11. Выберите правила ACL — 1 / Owner gets FULL_CONTROL. No one else has access rights (default).

    Canned ACL used when creating buckets and storing or copying objects.
    This ACL is used for creating objects and if bucket_acl isn't set, for creating buckets too.
    For more info visit https://docs.aws.amazon.com/AmazonS3/latest/dev/acl-overview.html#canned-acl
    Note that this ACL is applied when server side copying objects as S3 doesn't copy the ACL from the source but rather writes a fresh one.
    Enter a string value. Press Enter for the default ("").
    Choose a number from below, or type in your own value
     1 / Owner gets FULL_CONTROL. No one else has access rights (default).
       \ "private"
     2 / Owner gets FULL_CONTROL. The AllUsers group gets READ access.
       \ "public-read"
       / Owner gets FULL_CONTROL. The AllUsers group gets READ and WRITE access.
     3 / Granting this on a bucket is generally not recommended.
       \ "public-read-write"
     4 / Owner gets FULL_CONTROL. The AuthenticatedUsers group gets READ access.
       \ "authenticated-read"
       / Object owner gets FULL_CONTROL. Bucket owner gets READ access.
     5 / If you specify this canned ACL when creating a bucket, Amazon S3 ignores it.
       \ "bucket-owner-read"
       / Both the object owner and the bucket owner get FULL_CONTROL over the object.
     6 / If you specify this canned ACL when creating a bucket, Amazon S3 ignores it.
       \ "bucket-owner-full-control"
    
  12. На вопрос о необходимости расширенной конфигурации введите n и нажмите Enter:

    Edit advanced config? (y/n)
    y) Yes
    n) No
    
  13. На последнем шаге отобразится информация о конфигурации — проверьте настройки, введите y и нажмите Enter.

    Remote config
    --------------------
    [sbercloud]
    provider = Other
    env_auth = false
    access_key_id = xxxxxxxxx
    secret_access_key = ***********
    endpoint = https://b1.s3.sbercloud.ru
    acl = private
    --------------------
    y) Yes this is OK
    e) Edit this remote
    d) Delete this remote
    y/e/d>
    

Подключение к исходному хранилищу

Добавьте в Rclone конфигурацию исходного хранилища, используя описанные выше шаги. Используйте пару ключей, адрес подключения и имя хранилища вашего текущего провайдера (источника миграции).

Шаг 3. Запустите копирование объектов

Для копирования объектов используйте команду:

rclone copy -v -P --log-file=rclone.log --transfers=256 [other-provider]:[bucket-name] sbercloud:[bucket-name]

где:

copy — команда «Копирование» — выполняет полное копирование объектов из одного хранилища в другое, пропуская уже скопированные объекты.

-v — отображение информации о ходе копирования.

-P — отображение информации о копировании в реальном времени.

--log-file=rclone.log — файл журнала.

--transfers=256 — количество параллельных потоков копирования. При возникновении большого количества ошибок тайм-аута рекомендуется снизить это число.

[other-provider]:[bucket-name]:

  • other-provider — имя исходного хранилища в Rclone, из которого копируются объекты.

  • bucket-name — название корзины, из которой копируются объекты.

sbercloud:[bucket-name]:

  • sbercloud — имя целевого хранилища в Rclone, в который копируются объекты.

  • bucket-name — название корзины, в которую копируются объекты.

Шаг 4. Запустите синхронизацию исходного и целевого хранилищ

Дождитесь окончания процесса копирования и запустите синхронизацию, чтобы скопировать только измененные или новые объекты из исходного хранилища:

rclone sync -v -P --log-file=rclone.log --transfers=256 [other-provider]:[bucket-name] sbercloud:[bucket-name]

Команда sync (синхронизация) вносит изменения только на стороне целевого хранилища.

Шаг 5. Остановите работу сервисов и запустите финальную синхронизацию

Для обеспечения консистентности данных необходимо остановить работу сервисов, использующих исходное объектное хранилище (сайт, система СРК, пользователи и пр.). На время остановки сервисов запретите вносить изменения в файлы, оставив только возможность их чтения.

После остановки сервисов выполните финальную синхронизацию хранилищ:

rclone sync -v -P --log-file=rclone.log --transfers=256 [other-provider]:[bucket-name] sbercloud:[bucket-name]

Шаг 6. Настройте сервисы на работу с новым хранилищем

После финальной синхронизации хранилищ выполните подключение сервисов к новому хранилищу. Для этого обратитесь к документации, предоставленной вендором используемого ПО.

После успешного переключения сервисов на новое хранилище данные из старого хранилища можно удалить.