ESX上のVMをHyper-Vに移動するには、Microsoft Virtual Machine Converterみたいにゃものもあるのだが、これがまた動作条件が厳しい。大概失敗する感じにゃのでvmdkをvhdxに変換するだけの物を探してみる。
StarWind V2V Converterはシンプルにゃ変換ツールで相互に使えるのが良いところ。但しsnapshot類は認識できにゃいので予め統合しておく必要がある。
ドメイン参加してればGUIで設定すりゃ動く。
仮想スイッチ名が移動先で一致してにゃいと手動で選ぶ羽目ににゃる。
で、大概動くものの、認証系で失敗することがあるので制約付き委任を構成した方が良い。
Active Directory ユーザーとコンピューターで関連コンピュータのプロパティの委任タブで移行先コンピューターのcifsとMicrosoft Virtual System Migration Serviceを追加。各サーバ再起動すれば確実に反映される。次のPSでもよい。
function SvDelegateTo ( $TargetServer , $AddServer ) {
$TargetServerDN = (Get-ADComputer $TargetServer)
$AddServerDN = (Get-ADComputer $AddServer)
$AddServerName = $AddServerDN.Name
$AddServerDNS = $AddServerDN.DNSHostName
function Exec ( $ServiceName ) {
Set-ADObject -Identity $TargetServerDN -Add @{ "msDS-AllowedToDelegateTo" = "$ServiceName/$AddServerName", "$ServiceName/$AddServerDNS" }
}
Exec "cifs"
Exec "Microsoft Virtual System Migration Service"
}
function SetAll {
$array = $args
foreach($sv1 in $array){
foreach($sv2 in $array){
if( $sv1 -eq $sv2 ){continue}
SvDelegateTo $sv1 $sv2
}
}
}
SetAll sv1 sv2 sv3
多重実行しても上書きされるだけにゃのでサーバが増える度に全サーバ指定して実行してしまえばよいかも知れにゃい。
最近安定してきた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使いたかったらこうするしかにゃい感じだが。