Я ищу советы или рекомендации для резервного копирования ведра S3.
Цель резервного копирования данных с S3 заключается в предотвращении потери данных из-за следующего:
Какой вариант выбрать и насколько безопасно хранить данные только на S3? Хотите услышать ваше мнение.
Некоторые полезные ссылки:
Ответ 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, следуя этому руководству.
Ответ 4
Вы бы подумали, что теперь будет более простой способ просто удерживать какие-то инкрементные резервные копии в области diff.
Все приведенные выше предложения не являются простыми или элегантными решениями. Я действительно не рассматриваю ледник как вариант, поскольку я думаю, что это больше архивного решения, чем решение для резервного копирования. Когда я думаю, что резервное копирование, я думаю, что аварийное восстановление от младшего разработчика рекурсивно удаляет ведро или, возможно, эксплоит или ошибку в вашем приложении, которая удаляет материал из s3.
Для меня лучшим решением будет script, который просто поддерживает одно ведро в другой регион, один раз в неделю и один раз в неделю, чтобы, если что-то случилось, вы можете просто переключаться между регионами. У меня нет такой настройки, я смотрел, просто не добрался до этого, потому что для этого потребуется немного усилий, поэтому я хочу, чтобы было какое-то основное решение для использования.