Регулирование команд S3 с помощью aws cli
Я запускаю сценарий резервного копирования с помощью AWS CLI для выполнения команды синхронизации S3 каждую ночь на моем сервере MediaTemple. Это работает без сбоев в течение нескольких месяцев, но я обновил свою установку Plesk, и теперь каждую ночь, когда запускается сценарий резервного копирования, MediaTemple отключает мой сервер из-за чрезмерного использования. Границы, которые я, кажется, пересекаю, следующие:
RESOURCE INFO:
Packets per second limit: 35000
Packets per second detected: 42229.11667000000306870788
Bytes per second limit: 50000000
Bytes per second detected: 61801446.10000000149011611938
они также включают снимок сети в то время, когда они принимают сервер в автономном режиме, который включает в себя много открытых соединений с IP-адреса Amazon (9 на момент создания снимка).
есть ли что-нибудь, что я могу сделать, чтобы дросселировать соединения с AWS? Желательно, чтобы я искал вариант в API AWS (хотя я не видел ничего полезного в документации), но за исключением этого, есть ли что-то, что я могу сделать с моей стороны, чтобы управлять подключениями на сетевом уровне?
4 ответов
команды AWS CLI S3 transfer (которые включают синхронизацию) имеют следующие релевантные параметры конфигурации:
- max_concurrent_requests -
- по умолчанию: 10
- максимальное количество одновременных запросов.
- multipart_threshold -
- по умолчанию: 8 МБ
- порог размера, который CLI использует для multipart передача отдельных файлов.
- multipart_chunksize -
- по умолчанию: 8 МБ
- при использовании составные передачи, это размер куска, который CLI использует для многоступенчатая передача отдельных файлов.
Это не так гранулировано, как дросселирование пакетов в секунду, но кажется, что установка более низкого значения параллельного запроса и снижение многопартийного порога и chunksize помогут. Если значения, которые вы вставили близко к среднему, я бы начал с этих значений и настройки, пока вы надежно не превысите пределы:
$ aws configure set default.s3.max_concurrent_requests 8
$ aws configure set default.s3.multipart_threshold 6MB
$ aws configure set default.s3.multipart_chunksize 6MB
а также изменение максимальных соединений по умолчанию и размер куска уже упоминает, что вы также можете установить max_bandwidth. Это очень эффективно при загрузке больших одиночных файлов.
aws configure set default.s3.max_bandwidth 50MB/s
Я закончил с помощью ручеек и покрывая скорость загрузки & загрузки на 20 000 кб/ с. Это позволило мне использовать мой существующий скрипт без особых изменений (все, что мне нужно было сделать, это добавить вызов trickle в начало команды).
кроме того, похоже, что регулирование пропускной способности было добавлено в качестве проблемы в AWS CLI, поэтому, надеюсь, все это не будет проблемой для людей, если это будет реализовано.
Если вы не можете заставить trickle работать с командой aws s3, как я, вы можете использовать:
sudo apt-get install pv (or yum install pv)
pv -L 1M local_filename 2>/dev/null | aws s3 cp - s3://bucket_name/remote_filename
где-L 1M ограничивает ширину полосы частот до 1M/s
и бросок за cp
укажите stdin
Примечание: awscli от apt-get слишком стар для поддержки ввода stdin, вам нужно обновить его через pip