Подтвердить что ты не робот

Стратегии резервного копирования для ковша AWS S3

Я ищу советы или рекомендации для резервного копирования ведра S3.
Цель резервного копирования данных с S3 заключается в предотвращении потери данных из-за следующего:

  • Проблема S3
  • где я случайно удалю эти данные с S3

После некоторого исследования я вижу следующие варианты:

Какой вариант выбрать и насколько безопасно хранить данные только на S3? Хотите услышать ваше мнение.
Некоторые полезные ссылки:

4b9b3361

Ответ 1

Принимая во внимание связанную ссылку, в которой объясняется, что S3 имеет 99,999999999% долговечности, я бы отказался от вашего беспокойства №1. Серьезно.

Теперь, если # 2 - действительный прецедент и реальная забота о вас, я определенно буду придерживаться вариантов # 1 или # 3. Какой из них? Это действительно зависит от некоторых вопросов:

  • Вам нужны какие-либо другие функции управления версиями или это только для того, чтобы избежать случайной перезаписи/удаления?
  • Являются ли дополнительные затраты, связанные с версированием доступными?
  • Amazon Glacier is optimized for data that is infrequently accessed and for which retrieval times of several hours are suitable. Это нормально?

Если ваше использование в хранилище не будет действительно огромным, я буду придерживаться ведрого управления версиями. Таким образом, вам не понадобится дополнительный код/​​рабочий процесс для резервного копирования данных на Glacier, в другие ведра или даже на любой другой сервер (что действительно плохой выбор IMHO, пожалуйста, забудьте об этом).

Ответ 2

Первоначально опубликовано в моем блоге: http://eladnava.com/backing-up-your-amazon-s3-buckets-to-ec2/

Периодически синхронизируйте ведро S3 с сервером EC2

Это может быть легко достигнуто за счет использования нескольких утилит командной строки, которые позволяют синхронизировать удаленный ящик S3 с локальной файловой системой.

s3cmd
Сначала s3cmd выглядел чрезвычайно многообещающим. Однако, попробовав его на огромном ведро S3, он не смог масштабироваться, вызывая ошибку с помощью Segmentation fault. Тем не менее, он отлично работал на небольших ведрах. Поскольку он не работал для огромных ведер, я решил найти альтернативу.

s4cmd
Новая, многопоточная альтернатива s3cmd. Тем не менее, я смотрел еще более многообещающе, но я заметил, что он продолжал повторно загружать файлы, которые уже присутствовали в локальной файловой системе. Это не то поведение, которое я ожидал от команды sync. Он должен проверить, существует ли удаленный файл уже локально (проверка hash/filesize будет аккуратной) и пропустить его в следующем сеансе синхронизации в том же целевом каталоге. Я опубликовал проблему (bloomreach/s4cmd/# 46), чтобы сообщить об этом странном поведении. Тем временем я решил найти другую альтернативу.

awscli
И затем я нашел awscli. Это официальный интерфейс командной строки Amazon для взаимодействия с их различными облачными сервисами, включая S3.

AWSCLI

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

$ aws s3 sync s3://your-bucket-name /home/ubuntu/s3/your-bucket-name/

Преимущества:

  • Масштабируемость - поддерживает огромные ведра S3
  • Multi-threaded - быстрее синхронизирует файлы, используя несколько потоков.
  • Smart - только синхронизирует новые или обновленные файлы
  • Быстрый - благодаря многопоточному характеру и интеллектуальному алгоритму синхронизации

Случайное удаление

Удобно, команда sync не удалит файлы в целевой папке (локальной файловой системе), если они отсутствуют в источнике (ведро S3), и наоборот. Это идеально подходит для резервного копирования S3 - если файлы удаляются из ведра, повторная синхронизация не удаляет их локально. И если вы удалите локальный файл, он также не будет удален из исходного кода.

Настройка awscli на Ubuntu 14.04 LTS

Начнем с установки awscli. Есть несколько способов, однако мне было проще установить его через apt-get.

$ sudo apt-get install awscli

Конфигурация

Затем нам нужно настроить awscli на наш идентификатор ключа доступа и секретный ключ, который вы должны получить из IAM, по создавая пользователя и устанавливая политику AmazonS3ReadOnlyAccess. Это также помешает вам или любому, кто получает доступ к этим учетным данным, от удаления ваших S3 файлов. Убедитесь, что вы вошли в область S3, например us-east-1.

$ aws configure

aws configure

Подготовка

Подготовьте локальный каталог резервирования S3, желательно в /home/ubuntu/s3/{BUCKET_NAME}. Обязательно замените {BUCKET_NAME} на свое фактическое имя ковша.

$ mkdir -p /home/ubuntu/s3/{BUCKET_NAME}

Начальная синхронизация

Вперед и синхронизируем ведро в первый раз с помощью следующей команды:

$ aws s3 sync s3://{BUCKET_NAME} /home/ubuntu/s3/{BUCKET_NAME}/

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

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

Настройка задания Cron

Идем дальше и создаем файл sync.sh в /home/ubuntu/s3:

$ nano /home/ubuntu/s3/sync.sh

Скопируйте и вставьте следующий код в sync.sh:

#!/bin/sh

# Echo the current date and time

echo '-----------------------------'
date
echo '-----------------------------'
echo ''

# Echo script initialization
echo 'Syncing remote S3 bucket...'

# Actually run the sync command (replace {BUCKET_NAME} with your S3 bucket name)
/usr/bin/aws s3 sync s3://{BUCKET_NAME} /home/ubuntu/s3/{BUCKET_NAME}/

# Echo script completion
echo 'Sync complete'

Обязательно замените {BUCKET_NAME} на свое имя ведра S3, дважды на script.

Совет: Вы должны использовать /usr/bin/aws для ссылки на двоичный файл aws, так как crontab выполняет команды в ограниченной среде оболочки и не сможет найти исполняемый файл на свой.

Затем убедитесь, что chmod script, поэтому его можно выполнить с помощью crontab.

$ sudo chmod +x /home/ubuntu/s3/sync.sh

Попробуйте запустить script, чтобы убедиться, что он действительно работает:

$ /home/ubuntu/s3/sync.sh

Выход должен быть похож на этот:

sync.sh output

Затем, отредактируйте текущего пользователя crontab, выполнив следующую команду:

$ crontab -e

Если это ваш первый запуск crontab -e, вам нужно выбрать предпочтительный редактор. Я бы рекомендовал выбрать nano, поскольку он самый легкий для начинающих.

Частота синхронизации

Нам нужно сообщить crontab, как часто запускать наш script и где script находится в локальной файловой системе, написав команду. Формат этой команды выглядит следующим образом:

m h  dom mon dow   command

Следующая команда настраивает crontab для запуска sync.sh script каждый час (заданный через минуты: 0 и час: *) и чтобы он вывел вывод script в файл sync.log в нашем каталоге s3:

0 * * * * /home/ubuntu/s3/sync.sh > /home/ubuntu/s3/sync.log

Вы должны добавить эту строку в нижнюю часть файла crontab, который вы редактируете. Затем перейдите и сохраните файл на диск, нажав Ctrl + W, а затем Ввести. Затем вы можете выйти из nano, нажав Ctrl + X. crontab будет запускать задачу синхронизации каждый час.

Pro tip:. Вы можете проверить, выполняется ли часовое задание cron, проверяя /home/ubuntu/s3/sync.log, проверяя его содержимое для даты и времени выполнения и проверяя журналы, чтобы узнать, какие новые файлы синхронизированы.

Все настройки! Ваш ведро S3 теперь будет синхронизироваться с вашим сервером EC2 каждый час автоматически, и вам должно быть хорошо идти. Обратите внимание, что с течением времени, когда ваш ведро S3 становится больше, вам, возможно, придется увеличить объем EBS для сервера E2 для размещения новых файлов. Вы всегда можете увеличить размер своего EBS, следуя этому руководству.

Ответ 3

Вы можете сделать резервную копию данных S3, используя следующие методы.

  • Запланируйте процесс резервного копирования с использованием набора данных AWS, это можно сделать двумя способами, указанными ниже:

    а. Использование copyActivity datapipeline, с помощью которой вы можете скопировать из одного ведра s3 в другой ведро s3.

    б. Использование команд ShellActivity datapipeline и "S3distcp" для выполнения рекурсивной копии рекурсивных папок s3 из ведра в другую (параллельно).

  • Использовать управление версиями внутри ведра S3 для поддержки другой версии данных

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

Вариант 1 может дать вам дополнительную безопасность, если вы случайно удалите исходный ведро s3, и еще одно преимущество заключается в том, что вы можете сохранить свою резервную копию в папках с датой в другом ведро s3, таким образом вы знаете, какие данные у вас были на конкретном даты и может восстановить резервную копию определенной даты. Все зависит от используемого вами случая.

Ответ 4

Вы бы подумали, что теперь будет более простой способ просто удерживать какие-то инкрементные резервные копии в области diff.

Все приведенные выше предложения не являются простыми или элегантными решениями. Я действительно не рассматриваю ледник как вариант, поскольку я думаю, что это больше архивного решения, чем решение для резервного копирования. Когда я думаю, что резервное копирование, я думаю, что аварийное восстановление от младшего разработчика рекурсивно удаляет ведро или, возможно, эксплоит или ошибку в вашем приложении, которая удаляет материал из s3.

Для меня лучшим решением будет script, который просто поддерживает одно ведро в другой регион, один раз в неделю и один раз в неделю, чтобы, если что-то случилось, вы можете просто переключаться между регионами. У меня нет такой настройки, я смотрел, просто не добрался до этого, потому что для этого потребуется немного усилий, поэтому я хочу, чтобы было какое-то основное решение для использования.