ZFS Snapshot он же бэкап

Сегодня у нас модно использовать zfs, который дает довольно полезные штуки такие как сжатие и снимки. Первая фича позволяет вполне так экономить место но об этом позже, сейчас о бэкапе. Снимки позволяют довольно гибко управлять бэкапами, в моей схеме есть то что надо бекапить и собственно куда, железка с пулом в ~170TB. На хостах которые нужно бэкапить лежит скрипт zfs-auto-snapshot, существующий в нескольких вариантах от zfsonlinux и mk01 первый вариант мне не зашел, а вот второй оказался как надо, без необходимости обрабатывать напильником. Скрипт делает снапшоты только тех ФС у которых установлен флаг com.sun:auto-snapshot, устанавливается так:
zfs set com.sun:auto-snapshot=true tank/test01-lxc
Где:
tank - пул
test01-lxc - фс контейнера
В самом скрипте пишем - куда мы отправляем, путь к ключу т.к. авторизация по ключам и сжатие
opt_sendtocmd='ssh -2 [email protected] -c aes256-ctr -i /root/.ssh/id_rsa'
opt_buffer='pigz -dc |'
opt_pipe='| pigz -1c |'
Сжатие подбирал опытным путем след образом:
zfs send -v tank/test01-lxc@zfs-auto-snap_hourly-2018-01-25-1548 | pigz -1c | ssh -2 [email protected] -c aes256-ctr -i /root/.ssh/id_rsa "pigz -dc | zfs recv tank/test/test01-lxc"
send from @ to tank/test01-lxc@zfs-auto-snap_hourly-2018-01-25-1548 estimated size is 3.74G
total estimated size is 3.74G
TIME        SENT   SNAPSHOT
12:13:37   44.3M   tank/test01-lxc@zfs-auto-snap_hourly-2018-01-25-1548
12:13:38    121M   tank/test01-lxc@zfs-auto-snap_hourly-2018-01-25-1548
12:13:39    219M   tank/test01-lxc@zfs-auto-snap_hourly-2018-01-25-1548
12:13:40    298M   tank/test01-lxc@zfs-auto-snap_hourly-2018-01-25-1548
12:13:41    368M   tank/test01-lxc@zfs-auto-snap_hourly-2018-01-25-1548
12:13:42    448M   tank/test01-lxc@zfs-auto-snap_hourly-2018-01-25-1548
12:13:43    533M   tank/test01-lxc@zfs-auto-snap_hourly-2018-01-25-1548
12:13:44    618M   tank/test01-lxc@zfs-auto-snap_hourly-2018-01-25-1548
12:13:45    680M   tank/test01-lxc@zfs-auto-snap_hourly-2018-01-25-1548
12:13:46    793M   tank/test01-lxc@zfs-auto-snap_hourly-2018-01-25-1548
12:13:47    885M   tank/test01-lxc@zfs-auto-snap_hourly-2018-01-25-1548
12:13:48    972M   tank/test01-lxc@zfs-auto-snap_hourly-2018-01-25-1548
12:13:49   1.09G   tank/test01-lxc@zfs-auto-snap_hourly-2018-01-25-1548
12:13:50   1.31G   tank/test01-lxc@zfs-auto-snap_hourly-2018-01-25-1548
12:13:51   1.46G   tank/test01-lxc@zfs-auto-snap_hourly-2018-01-25-1548
12:13:52   1.68G   tank/test01-lxc@zfs-auto-snap_hourly-2018-01-25-1548
12:13:53   1.87G   tank/test01-lxc@zfs-auto-snap_hourly-2018-01-25-1548
12:13:54   2.09G   tank/test01-lxc@zfs-auto-snap_hourly-2018-01-25-1548
12:13:55   2.30G   tank/test01-lxc@zfs-auto-snap_hourly-2018-01-25-1548
12:13:56   2.51G   tank/test01-lxc@zfs-auto-snap_hourly-2018-01-25-1548
12:13:57   2.65G   tank/test01-lxc@zfs-auto-snap_hourly-2018-01-25-1548
12:13:58   2.85G   tank/test01-lxc@zfs-auto-snap_hourly-2018-01-25-1548
12:13:59   3.04G   tank/test01-lxc@zfs-auto-snap_hourly-2018-01-25-1548
12:14:00   3.26G   tank/test01-lxc@zfs-auto-snap_hourly-2018-01-25-1548
12:14:01   3.43G   tank/test01-lxc@zfs-auto-snap_hourly-2018-01-25-1548
12:14:02   3.54G   tank/test01-lxc@zfs-auto-snap_hourly-2018-01-25-1548
12:14:03   3.69G   tank/test01-lxc@zfs-auto-snap_hourly-2018-01-25-1548
TOTAL: 0.98GB
Total - определял через iftop, зафильтровал отправителя/получателя для исключения лишнего трафика. Игрался с цифрами и архиваторами в итоге остановился на pigz -1 который ужал в 3.5 раза и увеличил время отправки всего на 10-15%.
При 6 степени сжатия у pigz, получил +10 сек и -100Мб, содержимое контейнера mysql/apache/nginx.
Запускается у меня zfs-auto-snapshot через Jenkins по расписанию, часовые каждые 2 часа следующей командой:
sudo /usr/sbin/zfs-auto-snapshot --label=hourly --keep=12 --send-incr=tank/test/hourly -d -F -i -X //
Где:
label - метка, все снимки будут с префиксом hourly
keep - хранить 12 снимков
d - подробный вывод, debug
F - если невозможно отправить инкрементальный то сделать полный
i - отправлять несколько снимков как один
X - удалять на принимающей стороне, если невозможно принять из-за расхождений
Коротко и на русском об отправке можно почитать тут