S3DistCp. Копируем данные.

Все началось с миграции. Задача была очень простая. Нужно мигрировать данные, лежащие в S3 из одного региона в другой. Попросту говоря скопировать содержимое одной корзины в другую. И сложностей никаких – данные незашифрованные, почти не меняются, все права чтения-запись есть. Бери и копируй. Один нюанс – размер несколько терабайт. И скопировать нужно быстро.

И так имеем — корзина «source» в регионе eu-central-1(Франкфурт) и корзина «target» в регионе eu-west-1(Ирландия). Цель – содержимое «source» скопировать в «target».

Первое, что пришло в голову — Cross-Region Replication. Однако уже созданные файлы не будут реплицироваться. Тогда нужно создать корзину «source2», включить версионность, настроить ее репликацию в «target» и синхронизировать «source» и «source2». Вполне рабочая модель, но непонятно насколько быстро произойдет полная миграция данных. Да и не хотелось терять время на копирование внутри одного региона.

Второе мысль – «зачем городить огород, давайте просто скопируем». Действительно, AWS CLI команды верхнего уровня(aws s3 cp, aws s3 mv, and aws s3 sync) поддерживают Multipart Upload автоматически для больших файлов(как раз наш случай). Значит все должно скопироваться «многопоточно» и быстро. К сожалению, результат не оправдал ожиданий.
Скорость копирования была катастрофически мала. Была в два раза меньше, чем загрузка с EBS на S3 и в 10-15 раз меньше, чем копирование внутри одного региона:

$ aws s3 cp big.file s3://source-eu-central-1 
Completed 364.8 MiB/1.1 GiB (11.2 MiB/s) with 1 file(s) remaining
.......
$ aws s3 sync s3://source-eu-central-1 s3://target-eu-west-1 
Completed 345.8 MiB/1.1 GiB (5.1 MiB/s) with 1 file(s) remaining
.......
$ aws s3 sync s3://source-eu-central-1 s3://source2-eu-central-1
Completed 392.0 MiB/1.1 GiB (157.4 MiB/s) with 1 file(s) remaining

Игры с S3 параметрами (multipart_chunksize, max_concurrent_requests и т.д.) не привнесли желаемых  результатов.

Это было довольно удивительно, потому что заявлялось, что между регионами достаточно широкий канал, который обеспечивает очень хорошую пропускную способность. После общения со службой поддержки оказалось, что да, канал широкий, но пропускная способность для копирования между регионами – фиксированная. Так как sync использует COPY, то скорости больше определенного (и довольно маленького) значения получить невозможно.

В документации по миграции данных между регионами упоминалась утилита S3DistCp – расширение утилиты DistCp, оптимизированная для работы с AWS. S3DistCp использует Amazon EMR кластер для копирования данных.
Скорость копирования напрямую зависит от мощности кластера. Кластер, состоящий только из одной мастер-ноды (m5.2xlarge (8 vCore, 32 GiB) ) на вышеуказанном примере продемонстрировал скорость копирования в 25.2 MiB/s. Чем больше мощность каждой ноды, чем больше количество нод в кластере, тем больше скорость.
Также нужно отметить, что кластер стоит денег и рекомендуется использовать Spot инстанции для экономии.

Работа с S3DistCp достаточно простая и хорошо документирована. Несколько примеров:

Простое копирование
$ s3-dist-cp --src s3://source --dest s3://target

Фильтрация. Копируем только логи.
$ s3-dist-cp --src s3://source --dest s3://target --srcPattern .*\.log

Перемещение вместо копирования
$ s3-dist-cp --src s3://source --dest s3://target --srcPattern .*\.log –deleteOnSuccess

Архивируем «на лету»
$ s3-dist-cp --src s3://source --dest s3://target --srcPattern .*\.log --outputCodec=gz

Также стоит изучить «Семь советов по использованию S3DistCp«.

Добавить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *