Предварительные ремарки:
- Эта функция доступна как для Bacula Community (9.0.8 и выше), так и для Enterprise.
- Функция софтовой компрессии от Bacula не должна быть включена совместно с форматом Aligned, так как из-за этого страдает производительность дедупликации в целом.
- Для хранения dedup index engine вам понадобится небольшой участок SSD памяти.
- Этот метод подразумевает создание Bacula различающихся томов с metadata файлов, скопированных с бэкапа, и отдельного тома с, собственно, самими данными.
Дедупликация данных — один из подходов уменьшению размера данных, он способен эффективно уменьшать объем памяти, необходимый для хранения бэкапа или архивов с датасетами, возможно уменьшение объема в 4-40 раз. Дедупликация приобретает всё большую и большую популярность как компонент системы бэкапа, так как она способна значительно уменьшить объемы хранилища данных, это также оказывает воздействие и на производительность, так как уменьшение общего объема — увеличение скорости работы с данными в целом.
Как можно видеть на графе ниже, новый формат Aligned зарекомендовал себя как хороший способ уменьшения затрат на хранение бэкапов в Bacula Community, он также куда более эффективен, чем ZBackup в плане скорости работы с данными (как бэкап, так и восстановление). Платой за это становится небольшое увеличение в длительности как бэкапа, так и восстановления, но это все еще допустимая утрата.
В таких условиях бэкапы на диски становятся как никогда выгодными по сравнению с хранением данных на магнитных лентах, так как дедупликация в настоящее время может быть применена только на дисковых носителях — нет достаточно эффективного способа применения той же технологии на магнитной ленте.
1. Файловая система ZFS
В настоящее время существует несколько файловых систем, нацеленных на дедупликацию, например lessfs, opendedup, ZFS и другие. В то же время Bacula поддерживает и использование хардварных способов дедупликации с новым форматом Aligned. Например, мы разместим ZFS, а затем Ddumbfs, как альтернативу.
Установка RedHat/CentOS (https://github.com/zfsonlinux/zfs/wiki/RHEL-and-CentOS):
yum install http://download.zfsonlinux.org/epel/zfs-release.el7_5.noarch.rpm echo " [zfs-kmod] name=ZFS on Linux for EL7 - kmod baseurl=http://download.zfsonlinux.org/epel/7.5/kmod/$basearch/ enabled=1 metadata_expire=7d gpgcheck=1 gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-zfsonlinux" > /etc/yum.repos.d/zfs.repo yum install zfs modprobe zfs
b) Установка на Debian / Ubuntu:
sudo -i apt-get -y install zfsutils-linux
Инициализация ZFS
Инициализация ZFS потребует один или более физических дисков. В примере ниже, под /zfs/mnt должен быть настроенный путь bacula-sd.conf в директиве ArchiveDevices. Также может быть включена компрессия.
sudo zpool create -f zfs /dev/sdb zfs create zfs/mnt zpool status zfs df -h zfs set dedup=on zfs/mnt zfs set compression=on zfs/mnt chown bacula /zfs/mnt
Референс:
- RedHat/CentOS: https://github.com/zfsonlinux/zfs/wiki/RHEL-%26-CentOS
- Debian/Ubuntu: https://wiki.ubuntu.com/Kernel/Reference/ZFS
2. Файловая система Dedup (альтернатива)
Для этого примера была выбрана файловая система ddumbfs за свой открытый код и фокус на скорости операций благодаря своему простому дизайну, что крайне важно для малых интервалов бэкапа.
2.1 Установка зависимостей ddumbfs
Для компиляции ddumbfs вам потребуется, как обычно: make и gcc, заголовки для fuse и mhash library и pkg-config.
Далее представлены соответствующие пакеты для дистрибутивов, основанных на RedHat и Debian (часть из них потребуют сборки из исходного кода):
- RedHat/CentOS: fuse fuse-libs mhash fuse-devel mhash-devel pkgconfig gcc make
- Debian/Ubuntu: libfuse2 libmhash2 libfuse-dev libmhash-dev pkg-config fuse-utils build-essential
а) RedHat / CentOS:
sudo -i yum -y install epel-release.noarch yum -y install fuse fuse-libs mhash fuse-devel mhash-devel pkgconfig gcc make automake
б) Debian / Ubuntu:
sudo -i apt-get -y install fuse libfuse2 libmhash2 libfuse-dev libmhash-dev pkg-config build-essential autotools-dev
2.2 Сборка Ddumbfs из исходника
wget -qO- http://www.magiksys.net/download/ddumbfs/ddumbfs-1.1.tar.gz | tar -xzvf - -C /usr/src cd /usr/src/ddumbfs-* ./configure make make install
2.3 Инициализация Ddumbfs
Создайте две директории. Первая должна ссылаться на смонтированный SSD для хостинга движка ddumbfs. Вторая — показывать, куда ваши Bacula Storage Volumes будут записываться, обычно — большая группа дисков.
mkdir /mnt/ddumbfs.data mkdir /mnt/ddumbfs.mnt
Инициализируйте дедупликационный процесс. В этом примере создан том 999G, измените его в своем случае в соответствии с вместимостью вашего диска:
mkddumbfs -B 128k -s 999G /mnt/ddumbfs.data ddumbfs $TARGET -o parent=/mnt/ddumbfs.mnt
Добавьте новую строку в /etc/fstab, как указано в примере ниже, чтобы процесс ddumbfs не пропадал после перезагрузки:
-oparent=/mnt/ddumbfs.data /mnt/ddumbfs.mnt fuse.ddumbfs defaults 0 0
Перезапустите машину и убедитесь что процесс ddumbfs остался на месте и смонтировался.
3. Настройка Aligned томов Bacula.
Вам потребуется установить пакет Aligned драйверов, он доступен на bacula.org в персональном репозитории пакетов (необходима регистрация).
yum install bacula-aligned.x86_64
Перезагрузите процесс хранения для применения изменений.
Далее представлен пример bacula-sd.conf в новом устройстве. Тип устройства должен быть aligned, число максимальных одновременных работ должно оставаться на 1, объем одного блока может изменяться в зависимости от выбранной файловой системы:
Device { Name = Aligned-Disk Device Type = Aligned # Must be aligned Media Type = File1 Archive Device = /zfs/mnt # Or /mnt/ddumbfs.mnt if ddumfs mounting point. LabelMedia = yes; Random Access = Yes; AutomaticMount = yes; RemovableMedia = no; AlwaysOpen = no; Maximum Concurrent Jobs = 1 # Always 1 for Aligned Minimum Block Size=0K Maximum Block Size=128K File Alignment=128K Padding Size=512 Minimum Aligned Size=4096 }
Детальная информация:
Для файловых систем ZFS, lessfs и ddumbfs, следующие значения гарантированно приносят хорошие результаты:
Block Size=128K
File Alignment=128K
Padding Size=512
Minimum Aligned Size=4096
Для файловых систем на базе NetApp предпочитаемы следующие значения:
Block Size=64K
File Alignment=4K
Padding Size=4K
Minimum Aligned Size=4K
Значения показаны справа после знака “равно”, а К означает увеличение числа на 1024 байта.
Block Size — размер блоков, которые будут записаны в том Aligned.
File Alignment — выравнивание первого блока каждого оригинального файла, хранимого в томе Aligned.
Padding Size — выравнивание, по которому последний блок оригинального файла наполняется нулями если он не полон.
Minimum Aligned Size — размер файла, не достигающие которого файлы должны быть помещены в том Metadata, а не в том Aligned.
[Референс: Sibbald, Kern – https://www.google.com/patents/US20160055169]
Как минимум, присоедините созданное bacula-sd устройство к вашему Директору. Отредактируйте ваш bacula-dir.conf:
Storage { Name = Disk-Backup Address = hfaria-desk-i5 SDPort = 9103 Password = "5PWzqJzEokv3z9U_NwBd6bJ30ib1x4TMW" Device = Aligned-Disk Media Type = File1 }
Проведите несколько полных бэкапов. После первого полного бэкапа все последующие должны практически не изменять объем дедуплицированного хранилища. Команда, показывающая занятые участки хранилища:
df -h
Также есть команда list jobs в bconsole для отображения размера бэкапов, который они в теории должны занимать.