Руководство по блочным файловым системам с поддержкой дедупликации и aligned-томов (Bacula 9.0.8 и выше)

Предварительные ремарки:

  • Эта функция доступна как для 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 для отображения размера бэкапов, который они в теории должны занимать.