ZFS Snapshot он же бэкап
Сегодня у нас модно использовать zfs, который дает довольно полезные штуки такие как сжатие и снимки. Первая фича позволяет вполне так экономить место но об этом позже, сейчас о бэкапе.
Снимки позволяют довольно гибко управлять бэкапами, в моей схеме есть то что надо бекапить и собственно куда, железка с пулом в ~170TB.
На хостах которые нужно бэкапить лежит скрипт zfs-auto-snapshot, существующий в нескольких вариантах от zfsonlinux и
mk01 первый вариант мне не зашел, а вот второй оказался как надо, без необходимости обрабатывать напильником.
Скрипт делает снапшоты только тех ФС у которых установлен флаг
tank - пул
test01-lxc - фс контейнера
В самом скрипте пишем - куда мы отправляем, путь к ключу т.к. авторизация по ключам и сжатие
При 6 степени сжатия у pigz, получил +10 сек и -100Мб, содержимое контейнера mysql/apache/nginx.
Запускается у меня zfs-auto-snapshot через Jenkins по расписанию, часовые каждые 2 часа следующей командой:
label - метка, все снимки будут с префиксом hourly
keep - хранить 12 снимков
d - подробный вывод, debug
F - если невозможно отправить инкрементальный то сделать полный
i - отправлять несколько снимков как один
X - удалять на принимающей стороне, если невозможно принять из-за расхождений
Коротко и на русском об отправке можно почитать тут
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.98GBTotal - определял через 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 - удалять на принимающей стороне, если невозможно принять из-за расхождений
Коротко и на русском об отправке можно почитать тут