Найти в Дзене

Как сисадмин автоматические бекапы KVM писал

Рад вас приветствовать на канале! Казалось бы, ничего сложного не предполагается, пишешь скрипт .sh и радуешься жизни в кроне. Но как и любая задача, данная обросла "хотелось бы вот так...". И тут понеслась. Было принято решение, что писаться данный проект будет на CPython3.12. Локально было развёрнуто несколько виртуалок для тестов. Первая генерация программы делала всё синхронно используя только библиотеки CPython, но мне, как дотошному душниле, показалось это слишком медленным. Также диски .qcow2 просто копировались на Synology по SCP(SSH) и это в моменте убивало локальную сеть. И планировалось, что бекапов будет по 7 штук, а дампов (.xml) в 3 раза больше. И вот первая генерация программы была переведена в питонячью асинхронность. И начались полномасштабные тесты уже на проде, где всё, работало как часы. Спустя неделю, скорость создания бекапов и место на Synology сказали своё ФИ. Вторая генерация (ныне актуальная) была переписана с другой логикой, а именно: _______________________
Оглавление

Рад вас приветствовать на канале!

Поступила, значит, мне задача следующего содержания: "Надо сделать автоматические бекапы виртуалок KVM на Synology".

Казалось бы, ничего сложного не предполагается, пишешь скрипт .sh и радуешься жизни в кроне.

Но как и любая задача, данная обросла "хотелось бы вот так...". И тут понеслась.

Было принято решение, что писаться данный проект будет на CPython3.12. Локально было развёрнуто несколько виртуалок для тестов. Первая генерация программы делала всё синхронно используя только библиотеки CPython, но мне, как дотошному душниле, показалось это слишком медленным. Также диски .qcow2 просто копировались на Synology по SCP(SSH) и это в моменте убивало локальную сеть. И планировалось, что бекапов будет по 7 штук, а дампов (.xml) в 3 раза больше.

И вот первая генерация программы была переведена в питонячью асинхронность. И начались полномасштабные тесты уже на проде, где всё, работало как часы.

Спустя неделю, скорость создания бекапов и место на Synology сказали своё ФИ.

Вторая генерация (ныне актуальная) была переписана с другой логикой, а именно:

  1. Добавлена многопоточность (не многопроцессорность из-за проблем с сериализатором).
  2. Реализовано архивирование дисков в многопоточном режиме силами TAR+PIGZ.
  3. Реализовано вычисление хешсуммы дисков.
  4. Synology была подключена по NFS

Таким образом вторая генерация начала занимать меньше места, но работать чуть дольше, несмотря на многопоточность. И тут понеслось веселье.

___________________________________________________________________________________

Оказывается, что многопоточность в версиях 3.10 (на проде) и 3.12 (на тестах) работает по разному и даже не вызывает никаких ошибок.

Пришлось усложнять проект дополнительной прослойкой в виде PYENV. Чтобы проект работал как задумывалось автором. И проект начал работать как нужно.

Показатели:

1Тб/3ч - с учётом вычисления хешсуммы, сжатия в архив и передачи на другое устройство по сети.

Не более 1Гб оперативной памяти.

Максимальный прирост по нагрузке на процессоры +10%.

___________________________________________________________________________________

Проект доступен для использования каждым человеком и лежит в открытом доступе: https://gitflic.ru/project/queenoforgasm/kvmbackups/