Бекап NAS - zfs send/receive по сети

Mar 02, 2014 17:37

Итак мы собрали второй NAS на nas4free для бекапа и настроили доступ к нему по ключу, без вопросов про пароль. Сегодня сделаем пересылку файловой системы по сети, аналогично тому как ранее мы пересылали её локально


Сначала делаем снимок, который будем пресылать
zfs snapshot Pool/Test@today

Классический подход предусматривает пересылку по ssh
nas4free: ~ # zfs send Pool/Test@today | ssh 192.168.1.33 zfs receive -v Pool/Test
к сожалению, скорость оставляет желать, ср
receiving full stream of Pool/Test@today into Pool/Test@today
received 1.66GB stream in 111 seconds (15.3MB/sec)

Для решения проблемы советуют mbuffer. Утилиты нет в nas4free из коробки, но она компактная и легко ставится. К сожалению, на скорость влияния не вижу
nas4free: ~ # zfs send Pool/Test@today | mbuffer -q -v 0 -s 128k -m 1G | ssh 192.168.1.33 "mbuffer -q -v 0 -s 128k -m 1G | zfs receive -v Pool/Test"
даёт те же 15.3MB/sec (как и варианты с mbuffer только на отсылке и только на приёме)

Описанный по ссылке выше вариант с mbuffer без ssh я запустить не смог
mbuffer: warning: error connecting to 192.168.1.33:9090: Connection refused
mbuffer: error: unable to connect to 192.168.1.33:9090

Зато помог ценный совет камрада bormental - использовать netcat. Тем более что nc доступен из коробки.
В тех же условиях скорость утраивается и, думаю, ограничивается слабеньким атомом на бекап NAS
backupnas: ~ # nc -l 9090 | zfs receive -v Pool/Test
Затем
nas4free: ~ # zfs send Pool/Test@today | nc 192.168.1.33 9090
receiving full stream of Pool/Test@today into Pool/Test@today
received 1.66GB stream in 39 seconds (43.6MB/sec)

Или то же самое с одной машины
nas4free: ~ # ssh 192.168.1.33 "nc -l 9090 | zfs receive -v Pool/Test" &
nas4free: ~ # zfs send Pool/Test@today | nc 192.168.1.33 9090
Жаль, что при этом сообщений о скорости передачи не видно. Но я с секундомером проверил - совпадает.
PS Здесь 192.168.1.33 - IP бекап NAS
9090 - порт, по которому происходит связь (выбран произвольно)
Pool/Test@today - имя пересылаемого снимка

UPD от 5 марта 2014
Бьюсь над тем, чтобы загнать сабж в универсальный скрипт.

Плохая новость в том, что код типа
nas4free: ~ # ssh 192.168.1.33 "nc -l 9090 | zfs receive -v Pool/Test" &
прекрасно работает из командной строки, но наотрез отказывается правильно исполняться из скрипта

Хорошая новость в том, что скорость передачи через ssh удалось удвоить за счет выбора шифрования. Вот хорошая статья на тему.
Ср
nas4free: Flash # zfs send Pool/Test@today | ssh 192.168.1.33 zfs receive -v Pool/Test
receiving full stream of Pool/Test@today into Pool/Test@today
received 813MB stream in 53 seconds (15.3MB/sec)
nas4free: Flash # zfs send Pool/Test@today | ssh -c arcfour128 192.168.1.33 zfs receive -v Pool/Test
receiving full stream of Pool/Test@today into Pool/Test@today
received 813MB stream in 27 seconds (30.1MB/sec)
nas4free: Flash # zfs send Pool/Test@today | ssh -c arcfour256 192.168.1.33 zfs receive -v Pool/Test
receiving full stream of Pool/Test@today into Pool/Test@today
received 813MB stream in 27 seconds (30.1MB/sec)

Но nc, напомню, ещё в полтора раза быстрее, так что не теряю надежды.

backup, nas, nas4free, zfs

Previous post Next post
Up