最近安定してきたZFS on Linuxの実験をHyper-Vで。あとNFSdもたててみる。
apt-add-repository ppa:zfs-native/stable
apt-get update
apt-get install ubuntu-zfs
mkdir /volumes
zpool create -f -o ashift=12 pool /dev/sdb
zfs set mountpoint=/volumes/pool pool
zfs set snapdir=visible pool
zfs set atime=off pool
zfs set compression=on pool
zfs set sync=disabled pool
zfs create pool/dir
chmod 777 /volumes/pool/dir
ashiftは必要に応じて。vhdやntfs dedupとの関連は実験しにゃいと分からにゃいにゃ。
apt-get install nfs-kernel-server
echo '/mnt localhost(ro,no_subtree_check)' >> /etc/exports
/etc/default/nfs-kernel-server
RPCNFSDCOUNT=32
/etc/init.d/nfs-kernel-server start
zfs set sharenfs="rw,async,wdelay,no_subtree_check,all_squash" pool/dir
zfs share pool/dir
/etc/default/zfs
ZFS_SHARE='yes'
reboot
showmount -e
ZFS on Linuxの難点としては、NFSやCIFSから.zfs以下が正常にアクセスできにゃい。下手に.zfs以下を見に行くと帰って来れにゃくにゃる。
server::
sudo mkdir -p /share/
sudo mount -t zfs pool/dir@snapname /share/
sudo exportfs *:/share/
client::
sudo mount zfsServer:/share /mnt/
ls -la /mnt/
sudo umount /mnt/
server::
exportfs -uf *:/share
umount /share
sudo rmdir /share
zfs destroy pool/dir@snapname
とかすることで一連のアクセスができるが、超絶めんどくさい。まぁnfsクライアントの部分は一部automountで省力化できるかもだがこの様子では危にゃっかしい。
にゃので懸案だったzfs+nfsの利便性は大差にゃし。
zfs create pool/dir
zfs share pool/dir
zfs create pool/dir/dir2
zfs create pool/dir/dir3
zfs create pool/dir/dir4
してもちゃんとdir/dir2にアクセスできるようにするのはnohideやcrossmntにゃんかで可能ににゃるんだが、inodeが被るためかこの状態ではesxからアクセスするといろいろ破壊される。
vm毎にzfs dir作ったりできれば、zfs上でcloneしてvm量産したり、zfs sendで差分転送バックアップしたりとか強力にゃ動作が可能ににゃるはずにゃんだが、不便にゃ。
細かいところとしてはvhdを拡大してもzpool容量が増えにゃいことが。autoexpandあたりが効いてにゃい感じで、export/importして再起動してzpool online -eしたら容量認識したけど正解が何にゃのかよく分からにゃい。
他には、鯖をリセットするといった落とし方をした場合にesxからnfsの見え方がおかしくにゃる。ロックできにゃい祭りでかにゃり長時間復帰出来にゃかったり。そもそも起動時にzfsがimportされにゃかったり。そのへんの堅牢性ががっかりにゃので実際使うのにゃらバックアップをかにゃり頑張った方が良い感じ。
network系のチューニングとしては
net.core.rmem_default=524288
net.core.wmem_default=524288
net.core.rmem_max=16777216
net.core.wmem_max=16777216
net.core.optmem_max=524287
net.core.netdev_max_backlog=2500
net.ipv4.ipfrag_high_thresh=524288
net.ipv4.ipfrag_low_thresh=393216
net.ipv4.tcp_rmem=4096 524288 16777216
net.ipv4.tcp_wmem=4096 524288 16777216
net.ipv4.tcp_window_scaling=1
net.ipv4.tcp_timestamps=0
net.ipv4.tcp_moderate_rcvbuf = 1
sunrpc.tcp_slot_table_entries=128
sunrpc.udp_slot_table_entries=128
にゃどがあるらしいがベンチしてにゃい。
悩ましい留意点としては、
・ZFS on Ubuntu上のvmdkに対してzfsリアルタイムdedupが可能。但しメモリバカ食いにゃので非実用的にゃのでこれは選から外して良い。
・ZFS on Ubuntu上のvmdk等に対してzfs圧縮が可能。高性能でsparseにゃvmdk入力に対して極めて強力。
・Hyper-V上のvhdに対してNTFS圧縮が可能。但し性能悪い上にdedupと相性悪い。
・Hyper-V上のvhdに対して遅延dedupが可能。高効率で圧縮も効くので容量節減には是非使いたい。
という状態で、zfsの圧縮をONにするとNTFSのdedup効率は壊滅的に、しかしzfs圧縮をOFFにしてしまうとWrite量が無駄にゃことに。まぁNTFSのdedup使いたかったらこうするしかにゃい感じだが。