INSTALLATION
-On node which has zfs storage pool
+On node which will host zfs storage pool
cd /usr/share/ganeti/extstorage/
git clone https://github.com/ffzg/ganeti-extstorage-zfs zfs
cd zfs
vi defaults.sh
-You need to specify zfs filesystem under which block devices will be created.
+Run install scripts:
-Now ssh into ganeti master node and do following:
+# ls install/
+1-enable-ext-template.sh 2-create-log-directory.sh 3-lvm-wrappers.sh
-1. enable new disk template
+Cron helper can be install under /etc/cron.daily
- gnt-cluster modify --enabled-disk-templates plain,drbd,ext \
- --ipolicy-disk-templates plain,drbd,ext
+# ls cron/
+daily-block-snapshot purge-log
-2. create log directory
+Overview commands are available (try running them to see output):
- mkdir /var/log/ganeti/extstorage
+# ls bin/
+ill list node size snap
-3. try instance creation with something similar to
+Create test instances:
- gnt-instance add -t ext --disk=0:size=10G,provider=zfs \
- --net 0:mode=bridged,link=br1001 \
- --net 1:mode=bridged,link=br0060 \
- --net 2:mode=bridged,link=br0080 \
- --no-name-check --no-ip-check \
- -o debootstrap+default \
- -B maxmem=1G -n arh-hw zfs
+# ls t/*.sh
+t/drbd.sh t/plain.sh t/zfs.sh
-4. install helper scripts for daily block snapshots
+Review that instaces have been created:
- ln -sf /usr/share/ganeti/extstorage/zfs/bin/daily-block-snapshot /etc/cron.daily/
+# ./bin/ill t-
-5. install lvm wrapper scripts to report zfs volumes as lv
+Test ganeti commands after reading them:
- find /usr/share/ganeti/extstorage/zfs/sbin/ -type f | xargs -i ln -v -s -f {} /sbin/
-
-This scripts enable gnt-node commands to work:
-
-root@vmh02:/home/dpavlin# gnt-node list arh-hw
-Node DTotal DFree MTotal MNode MFree Pinst Sinst
-arh-hw.gnt.ffzg.hr 87.8G 87.2G 7.8G 252M 5.6G 1 0
-
-root@vmh02:/home/dpavlin# gnt-node list-storage arh-hw
-Node Type Name Size Used Free Allocatable
-arh-hw.gnt.ffzg.hr lvm-vg arh-hw 190.0G 62.7G 127.3G Y
-arh-hw.gnt.ffzg.hr lvm-vg ffzgvg 87.8G 610M 87.2G Y
-
-
-HELPER SCRIPTS
-
-Helper scripts in bin directory list volumes, show size or snapshots.
-
-
-arh-hw:/usr/share/ganeti/extstorage/zfs# ./bin/list
-NAME USED AVAIL REFER MOUNTPOINT
-tmp500g/block 612M 87.2G 30K /tmp500g/block
-tmp500g/block/af1a90e8-0566-4cbf-bc8c-99fc82b67ce3.ext.disk0 612M 87.2G 610M -
-
-
-arh-hw:/usr/share/ganeti/extstorage/zfs# ./bin/size
-NAME PROPERTY VALUE SOURCE
-tmp500g/block/af1a90e8-0566-4cbf-bc8c-99fc82b67ce3.ext.disk0 volsize 11G local
-
-
-arh-hw:/usr/share/ganeti/extstorage/zfs# ./bin/snapshots
-NAME USED AVAIL REFER MOUNTPOINT
-tmp500g/block@etckeeper 0 - 30K -
-tmp500g/block/af1a90e8-0566-4cbf-bc8c-99fc82b67ce3.ext.disk0@2014-06-24 2.64M - 610M -
+# ls t/gnt-*
+t/gnt-backup-export.sh t/gnt-instance-modify.sh
DRBD disk replication
KNOWN BUGS for using -t plain on top of zfs
-- bin/daily-block-snapshot snapshots are not correctly renamed
+- cron/daily-block-snapshot snapshots are not correctly renamed
--- /dev/null
+#!/bin/sh -e
+
+ssh `gnt-cluster getmaster` \
+gnt-backup $*
+++ /dev/null
-#!/bin/sh
-
-. /usr/share/ganeti/extstorage/zfs/defaults.sh
-
-zfs list -r -o name -t volume -H $EXTP_ZFS | xargs -i zfs snap {}@`date +%Y-%m-%d`
--- /dev/null
+#!/bin/sh -e
+
+ssh `gnt-cluster getmaster` \
+gnt-instance list -o name,status,oper_vcpus,oper_ram,disk_usage,pnode,snodes | grep "$*"
--- /dev/null
+ssh `gnt-cluster getmaster` gnt-node list `hostname -s`
+ssh `gnt-cluster getmaster` gnt-node list-storage `hostname -s`
--- /dev/null
+#!/bin/sh
+
+. /usr/share/ganeti/extstorage/zfs/defaults.sh
+
+zfs list -t snapshot -r $EXTP_ZFS -o name,logicalused,used,available,refer
+++ /dev/null
-#!/bin/sh
-
-. /usr/share/ganeti/extstorage/zfs/defaults.sh
-
-zfs list -t snapshot -r $EXTP_ZFS -o name,logicalused,used,available,refer
--- /dev/null
+#!/bin/sh
+
+. /usr/share/ganeti/extstorage/zfs/defaults.sh
+
+zfs list -r -o name -t volume -H $EXTP_ZFS | xargs -i zfs snap {}@`date +%Y-%m-%d`
--- /dev/null
+#!/bin/sh
+
+rm /var/log/ganeti/extstorage/*
+++ /dev/null
-# debugging options
-#set -x
-#set >&2
-
-# zfs pool and file system (existing) where to create block devices
-test -z "$EXTP_ZFS" && EXTP_ZFS=tmp500g/block
-
-# parameters for zfs create, by default
-# -s sparse
-# -b 4k block size sutable for ext4 filesystem which ganeti uses
-# lz4 compression with low cpu operhead which always helps
-test -z "$EXTP_CREATE" && EXTP_CREATE="-s -b 4k -o compression=lz4"
-
-# on zfs destroy remove snapshots of instance disks
-test -z "$EXTP_DESTROY" && EXTP_DESTROY="-r"
-
-# emulate VG configured in cluster for wrapper scripts in sbin
-test -z "$EXTP_VG" && EXTP_VG='ffzgvg'
--- /dev/null
+etc/defaults.sh
\ No newline at end of file
--- /dev/null
+# debugging options
+#set -x
+#set >&2
+
+# zfs pool and file system (existing) where to create block devices
+test -z "$EXTP_ZFS" && EXTP_ZFS=tmp500g/block
+
+# parameters for zfs create, by default
+# -s sparse
+# -b 4k block size sutable for ext4 filesystem which ganeti uses
+# lz4 compression with low cpu operhead which always helps
+test -z "$EXTP_CREATE" && EXTP_CREATE="-s -b 4k -o compression=lz4"
+
+# on zfs destroy remove snapshots of instance disks
+test -z "$EXTP_DESTROY" && EXTP_DESTROY="-r"
+
+# emulate VG configured in cluster for wrapper scripts in sbin
+test -z "$EXTP_VG" && EXTP_VG='ffzgvg'
--- /dev/null
+#!/bin/sh -x
+
+gnt-cluster modify \
+ --enabled-disk-templates plain,drbd,ext \
+ --ipolicy-disk-templates plain,drbd,ext
--- /dev/null
+#!/bin/sh -x
+
+mkdir /var/log/ganeti/extstorage
--- /dev/null
+#!/bin/sh -xe
+
+find /usr/share/ganeti/extstorage/zfs/sbin/ -type f | xargs -i ln -v -s -f {} /sbin/
+
+++ /dev/null
-#!/bin/sh -xe
-
-find /usr/share/ganeti/extstorage/zfs/sbin/ -type f | xargs -i ln -v -s -f {} /sbin/
-
-pvs --noheadings --nosuffix --units=m --unbuffered '--separator=|' -opv_name,vg_name,pv_free,pv_attr,pv_size,pv_name
--- /dev/null
+ssh `gnt-cluster getmaster` \
+ gnt-instance add -t drbd --disk=0:size=10G \
+ -o debootstrap+default \
+ --no-name-check --no-ip-check \
+ -B maxmem=1G -n arh-hw:box02 t-drbd
+
+
--- /dev/null
+#!/bin/sh -xe
+
+./bin/ill t- | awk '{ print $1 }' | xargs -i ssh `gnt-cluster getmaster` gnt-backup export -n arh-hw {}
+./bin/backup list -n arh-hw | grep t-
+
--- /dev/null
+#!/bin/sh -xe
+
+gnt-instance stop t-plain
+gnt-instance modify -t drbd -n box02 t-plain
+gnt-instance rename --no-ip-check --no-name-check t-plain t-plain-drbd
+gnt-instance failover t-plain-drbd
+gnt-instance modify -t plain t-plain-drbd
+gnt-instance rename --no-ip-check --no-name-check t-plain-drbd t-plain-remote
+gnt-instance start t-plain-remote
--- /dev/null
+ssh `gnt-cluster getmaster` \
+ gnt-instance add -t plain --disk=0:size=10G \
+ -o debootstrap+default \
+ --no-name-check --no-ip-check \
+ -B maxmem=1G -n arh-hw t-plain
+
+
--- /dev/null
+ssh `gnt-cluster getmaster` \
+ gnt-instance add -t ext --disk=0:size=10G,provider=zfs \
+ -o debootstrap+default \
+ --no-name-check --no-ip-check \
+ -B maxmem=1G -n arh-hw t-zfs
+
+