Назад | Перейти на главную страницу

Многопоточная передача Rsync

По какой-то причине при запуске одной команды rsync я получаю от 1 МБ / с до 2 МБ / с, даже когда я подключаю 2 сервера, оба подключены к портам 1 Гбит / с.

rsync -v --progress -e ssh /backup/mysqldata/mysql-bin.000199 root@XXX.XXX.XXX.XXX: /secondary/mysqldata/mysqldata/mysql-bin.000199

У меня есть более 800 ГБ данных для передачи, разделенных примерно на 500 файлов, начиная с:

mysql-bin.000 *

Я обнаружил, что одновременный запуск 25-30 rsync из отдельных окон SSH дает мне более 25 МБ / с, но мне потребуются часы, чтобы запустить все это вручную.

Есть ли способ получить 25 МБ / с с помощью одной команды rsync?

OpenSSH известен тем, что имеет ограничения на размер окна, которые не очень удобны для соединений с высокой задержкой. Чтобы определить минимальный размер окна для желаемой пропускной способности (пока игнорируем другие накладные расходы):

Window size = throughput * latency

Итак, если вы хотите 25 МБ / с (200000000 бит / с) с задержкой 25 мс (0,025 секунды):

Window size = 200,000,000 * 0.025 = 5000000.0 bits

Если разделить на 8, получается примерно 625 КБ окна. Давайте перевернем его и посмотрим на окно размером 64 КБ (внутреннее ограничение во многих версиях OpenSSH) на вашу задержку:

throughput = 512000 bits / 0.025s latency = 20480000.0 bits/sec = ~2.5MB/sec

Это довольно близко к тому, что вы видите (у вас могут быть и другие накладные расходы).

Итак, я бы проверил в следующем порядке:

Производительность SSH может сильно различаться в зависимости от того, включено ли сжатие.