Настройка общего NFS хранилища для VMWARE/Citrix используя FreeBSD с ФС ZFS
Введение.
На так давно одна компания была переведена на VMWARE vSphere5. Как следствие стали высвобождаться старые сервера с другой стороны понадобилось пространство на хранилище. (Так же описываемое решение было протестировано с Citrix XenServer 6)
К хранилищу были составлены требования:
Для одного из решений появившейся задачи удачно подходит связка: FreeBSD 9.0 + ZFS + NFS.
Конфигурация
Установка FreeBSD 9.0 на ZFS раздел подробно описана в этой статье поэтому остановимя только на настройках ZFS, NFS и скрипте создания и backup snapshots.
Разворачиваем FreeBSD на двух серверах. Первый будет NFS второй будет backup-server. Не забудьте настроить ntpd на обоих серверах.
ZFS
Создание пулa rpool RAID5
zpool create rpool raidz1 /dev/ada2 /dev/ada3 /dev/ada4
Проверка
zpool status
pool: rpool
state: ONLINE
scan: none requested
config:
NAME STATE READ WRITE CKSUM
rpool ONLINE 0 0 0
raidz1-0 ONLINE 0 0 0
ada2 ONLINE 0 0 0
ada3 ONLINE 0 0 0
ada4 ONLINE 0 0 0
errors: No known data errors
Создание раздела для VMWARE
zfs create rpool/vm-store
И самое главное. Для обеспечения высокой скорости необходимо сделать следующую настройку.
zfs set sync disabled rpool/vm-store
более подробно о zfs tuning рассказано в этой статье
NFS
/etc/exports
/rpool/vm-store -maproot=root IP1_VMWARE IP2_VMWARE IP3_VMWARE
Для Citrix:
/rpool/vm-store -alldirs -maproot=root IP1_VMWARE IP2_VMWARE IP3_VMWARE
Необходимо добавить следующие строчки в /etc/rc.conf
nfs_server_enable="YES"
rpcbind_enable="YES"
mountd_enable="YES"
rpc_statd_enable="YES"
rpc_lockd_enable="YES"
nfs_server_flags="-t -n 10
Для запуска nfs:
/etc/rc.d/nfsd start
Теперь можно смонтировать раздел в VMWARE или Citrix
Создание snapshot
Для обеспечения возможности создания snapshot-ов необходимо:
файл /etc/ssh/sshd_config
PermitRootLogin yes
ssh-keygen -t rsa
ssh-copy-id root@backup-server
На серере NFS необходимо создать первый snapshot вручную и отправляем его на backup-server
zfs snapshot rpool/vm-store@`/bin/date "+%Y%m%d"`
zfs send rpool/vm-store@`/bin/date "+%Y%m%d"` | ssh park-nfs-node-backup zfs recv -Fuv rpool/vm-store@`/bin/date "+%Y%m%d"`
Ниже простой скрипт, который раз в сутки создает snapshot, отправляет инкрементно на backup-server. На NFS-серере snapshot хранятся 3 дня на backup-server 30 дней. Требуется, чтобы скрипт запускался на следующий день после создания первого snapshot вручную. Так-же скрипт не предусматривает перерывов в работе более суток.
createandsend.sh
#!/bin/sh
num=`/bin/date "+%Y%m%d"`
numm=`/bin/date -v-1d "+%Y%m%d"`
days=`/bin/date -v-30d "+%Y%m%d"`
onlinedays=`/bin/date -v-3d "+%Y%m%d"`
#creating snapshot
/sbin/zfs snapshot rpool/vm-store@$num
/bin/sleep 20
/sbin/zfs send -i $numm rpool/vm-store@$num | /usr/bin/ssh backup-server zfs recv -Fuv rpool/vm-store@$num
#destroying snapshot
/sbin/zfs destroy rpool/vm-store@$onlinedays
/usr/bin/ssh backup-server zfs destroy rpool/vm-store@$days
Скрипт createandsend.sh прописывается в cron на запуск раз в сутки
Тестирование
1. Монтируется партиция к узлам VmWare.
IP адрес для монтирования: 10.255.254.30
2. Создание тестовой VM
Мы развернули win7 x86 на thick disk размером 40GB. На виртуалку установили Performance Test
3. Результаты тестов
Об авторе