LPS:Xen/Migrace na MetroCluster

Z HelpDesk

Migrace virtuálních strojů z SW RAID na MetroCluster řešení, jako příklad poslouží migrace stroje VIRT (virtuální stroj - domU) na SRV (fyzický stroj - dom0), legenda:

Tučně je vyznaceno, na co si dat pozor, je možné upravit dle situace
modře je vyznačena práce v konzoli virtálního stroje xenmv
zeleně jsou vyznačeny výpisy souborů nebo tvar výsledných úprav konfiguráků
šedě jsou označny výpisy příkazů
červeně jsou části (nejčastěji názvy strojů), které je potřeba v příkazech zaměnit dle aktuální situace

Tento návod je připraven pouze pro Debian/squeeze, pokud jde jeste o Debian/Lenny, pak je třeba napřed provést jeho upgrade.

Migrace

  • kontrola serveru (kontrola dostatku místa na disku, volné paměti a obsazenosti swapu)
ssh root@VIRT
uname -a
df -h | grep /dev/md
free
cat /etc/debian_version

cat > /tmp/debconf.txt << EOF
grub-pc grub-pc/install_devices_empty boolean true
grub-pc grub-pc/install_devices    string
EOF
debconf-set-selections /tmp/debconf.txt
rm /tmp/debconf.txt 
  • instalace grubu, v nabídce věe odsouhlasit, instalovat grub i přes to, ze NEVYBEREME žádné zařízení, protože to nepotřebujeme, na závěr možno odstranit staré nepoužívané verze jader a modulů
ssh root@VIRT
apt-get update
apt-get install grub-pc

cp /usr/lib/grub/i386-pc/video.lst /boot/grub/
sed -i -e 's/^.*GRUB_DISABLE_LINUX_UUID=.*/GRUB_DISABLE_LINUX_UUID=true/' /etc/default/grub
update-grub
rm -f /boot/grub/menu.lst 
sed -i -e "s/set root='(.*)'/set root=(hd0)/g" /boot/grub/grub.cfg 
sed -i -e "s#root=/dev/md.#root=/dev/xvda#g" /boot/grub/grub.cfg 
ls /boot/
dpkg -l | egrep "(linux-image|openafs-modules)"
# pregeneruje grub.cfg!
dpkg --purge linux-image-package
dpkg --purge memtest86+
  • vytvoření nových LVM oddílů, synchronizace s ostatními xen servery:
ssh root@zen1
lvcreate -L10G  vgxen -n VIRT.root
lvcreate -L256M vgxen -n VIRT.swap
logout

for i in zen1 zen2 zen3 hippod ; do ssh root@$i 'lvchange -ay `lvscan 2>/dev/null | grep inactive | perl -pe "s/^\s+\S+\s+.(.*?).\s+.*$/\1/g;"`' ; done
  • příprava konfigurace migračního serveru, změna na nový disk vytvořený v LVM, kontrola
sed -i -e 's#/dev/vgxen/.*\(\..*\).*,xvd\(.*\)#/dev/vgxen/VIRT\1,xvd\2#' /afs/.zcu.cz/common/etc/xen/install/xenmv
vos rel common.etc.xen -v
  • spuštění migračního virtuálu
#b find /afs/zcu.cz/common/etc/xen/ | grep auto | grep VIRT
ssh root@zen1
cat /etc/xen/install/xenmv |grep -v ^# | sed -e '/^\s*$/d' | grep VIRT
        'phy:/dev/vgxen/VIRT.root,xvda,w',
        'phy:/dev/vgxen/VIRT.swap,xvdb,w'

xm create -c /etc/xen/install/xenmv
  • vypnutí virtuálního serveru a připojení jeho disků do výše vytvořeného 'xenmv':
sed -i -e "s/set root='(.*)'/set root=(hd0)/g" /boot/grub/grub.cfg 
sed -i -e "s#root=/dev/md.#root=/dev/xvda#g" /boot/grub/grub.cfg 
ssh root@VIRT 'halt'
ssh root@zen1
export VIRT=VVV
cat /etc/xen/boot/$VIRT | grep vgxen
disk = [ 'phy:/dev/vgxen-ui420/VIRT.system,xvda,w',
         'phy:/dev/vgxen-ul008/VIRT.system,xvdb,w' ]
xm block-attach xenmv phy:/dev/vgxen-ui420/$VIRT.system xvdc r
xm block-attach xenmv phy:/dev/vgxen-ul008/$VIRT.system xvdd r
  • přerušit reboot FAIe v xenmv, připojit původní disky a zahájit kopírování, odpojit
ctrl+c - je třeba počkat na Press <RETURN> to reboot
rm -rf /target/var
mdadm --assemble --scan
cat /proc/mdstat
Personalities : [raid1] 
md126 : active raid1 xvdd1[0] xvdc1[1]
      1020084 blocks super 1.2 [2/2] [UU]
      
md127 : active raid1 xvdc2[0] xvdd2[1]
      9461189 blocks super 1.2 [2/2] [UU]
mdadm -o /dev/md126
mdadm -o /dev/md127
mount /dev/md127 -o ro /mnt
cd /target
time ( cd /mnt ; tar cp . ) | pv -s `df /mnt | tail -n 1 | awk '{print $3}'`k | tar xp --numeric-owner
sed -i -e 's#^.* / #/dev/xvda    / #' /target/etc/fstab
sed -i -e 's#^.*none.*swap#/dev/xvdb    none              swap #' /target/etc/fstab
cat /target/etc/fstab
df -h
cd /
umount /mnt
umount /target
halt

  • upravit konfiguraci pro virtuální stroj
vim /afs/.zcu.cz/common/etc/xen/boot/VIRT

bootloader      = '/usr/lib/xen-default/bin/pygrub'
#kernel = ...
#ramdisk = ...
disk = [ 'phy:/dev/vgxen/VIRT.root,xvda,w',
         'phy:/dev/vgxen/VIRT.swap,xvdb,w']
#root = ...
#extra = ...

vos rel -v common.etc.xen
find /afs/zcu.cz/common/etc/xen/ | grep auto | grep VIRT
ssh root@SERV
xm create -c /etc/xen/auto/VIRT
  • odstraneni puvodnich LVM volumů a synchronizace
export PUVODNI=VIRT
for i in zen1 zen2 zen3 hippod ; do ssh root@$i "echo \"$i\" ; lvchange -an /dev/vgxen-ui420/${PUVODNI}.system /dev/vgxen-ul008/${PUVODNI}.system" ; done
ssh root@zen1 "lvremove /dev/vgxen-ui420/${PUVODNI}.system /dev/vgxen-ul008/${PUVODNI}.system"
for i in zen2 zen3 hippod ; do ssh root@$i "echo \"$i\" ; lvscan >/dev/null" ; done

Triky

Test pygrubu

/usr/lib/xen-default/bin/pygrub /dev/vgxen/VIRT.root

Pokud se nezobrazi menu, je to spatne, vetsinou je chyba v /boot/grub/grub.cfg, kde je jinak definovaná volba root=(hd0) než právě takto.

Boot nefunguje

K původnímu bootu se lze vrátit, stačí upravit konfigurák do níže uvedené podoby:

#bootloader = ...
kernel = ...
ramdisk = ...
root = "/dev/xvda ro"

Release volumu a znova se pokusit spustit virtuál

vos rel common.etc.xen -v
ssh root@SRV
xm create -c /etc/xen/auto/VIRT

Připojení souborového systému

Pokud je potřeba něco opravit, pak stačí, pokud virtuální stroj běží, je třeba jej vypnout nebo připojit jako read-only: mount -o ro

ssh root@zen1
mount /dev/vgxen/VIRT /mnt/floppy
vim /mnt/floppy/
umount /mnt/floppy