Репликация средствами ZFS

В последнее время все чаще и чаще возникает необходимость в создании и поддержании копий данных например для сред разработки или резервных центров. Как правило такая задача решается с помощью современных дисковых массивов или специализированного ПО, которые реализуют эту функциональность на соотвествующем уровне. Для простых систем с невысокими требованиями можно реализовать подобную схему с помощью ZFS.

Основным средством передачи данных является комбинация команд zfs send и zfs recieve, к примеру для копирования датасета data из пула production в пул development можно воспользоваться следующим набором команд:

# zfs snapshot production/data@snapshot00
# zfs send production/data@snapshot00 | \
zfs receive -d development/data

Если пул development находится на другом сервере поток данных можно отправить туда через ssh, предварительно настроив безпарольную аутентификацию. Замечу что передавать таким образом можно передавать только мгновенные снимки, что весьма логично, т.к. сама файловая система может измениться в процессе ее передачи.

После завершения этой операции в пуле development появится датасет содержащий копию данных data из production. Пока что ничего интересного - можно было с тем же успехом просто скопировать файлы между двумя файловыми системами.

Интересное в данной схеме это возможность инкрементального обновления данных. ZFS позволяет передавать не полный снимок файловой системы (датасета) а только блоки данных изменившиеся в период времени между созданием первого и второго снимков, которые затем могут быть применены к копии, содержащий первый снимок. При больших объемах данных эта возможность серьезно экономит время обновления копии. Создание таких дифференциальных потоков данных выполняется с помощью команды zfs send с опцией -i:

# zfs snapshot production/data@snapshot01
# zfs send -i snapshot00 production/data@snapshot01 | \
zfs receive -d development/data

Стоит отметить что данная операция закончится ошибкой если данные development/data были изменены (заметим что даже простой просмотр содержимого этого файлового вызовет изменение метаданных - меток времени последнего доступа), поэтому перед этой операцией необходимо откатить целевую файловую систему на момент создания первого снимка:

# zfs rollback development/data@snapshot00

Написав несложный скрипт и запланировав его с помощью cron можно при помощи этих средств получить несложную схему репликации данных.

http://blog.curthread.org/posts/solaris/zfs/zfs_replication.html

Яндекс.Метрика