Quelques trucs en vrac sur Xen.
Kickstart
- fichier .cfg Xen
kernel = "/var/xen_images/centos/vmlinuz" ramdisk = "/var/xen_images/centos/initrd.img" extra = "text ks=https://192.168.3.1/_ks_.cfg noverifyssl" name = "centos6_1" memory = "1024" disk = [ 'phy:/dev/datavg/centos6_1-disk,xvda,w', ] vif = [ 'bridge=xenbr0', ] vcpus=1 on_reboot = 'destroy' on_crash = 'destroy'
- fichier ks.cfg
install url --url http://mirror.centos.org/centos/6/os/x86_64 lang en_US.UTF-8 network --device eth0 --bootproto dhcp # Bogus password, change to something sensible! rootpw bogus firewall --disabled authconfig --enableshadow --enablemd5 selinux --disabled timezone --utc Europe/Paris bootloader --location=mbr --driveorder=xvda --append="console=xvc0" reboot # Partitioning clearpart --all --initlabel --drives=xvda zerombr ignoredisk --only-use=xvda part /boot --fstype ext4 --size=100 --ondisk=xvda part pv.2 --size=8000 --grow --ondisk=xvda volgroup rootvg pv.2 logvol / --fstype ext4 --name=LogVol00 --vgname=rootvg --size=1024 --grow logvol swap --fstype swap --name=LogVol01 --vgname=rootvg --size=256 --grow --maxsize=512 %packages @core
Convertir image .ova ou .vmdk vers Xen
tar vxf Hortonworks_Sandbox_2.1.ova qemu-img convert -O raw Hortonworks_Sandbox_2.1-disk1.vmdk Hortonworks_Sandbox_2.1.raw
Créer une VM Linux
xen-create-image -lvm=vgdata --debootstrap --size=4GB --memory=1500MB --swap=1500MB --dist=etch --mirror=http://ftp.fr.debian.org/debian/ --force --ip=192.168.1.1 --netmask=255.255.255.0 --gateway=192.168.1.254 --hostname=wowvmii --passwd --kernel=/boot/vmlinuz-2.6.18-6-xen-686 --initrd=/boot/initrd.img-2.6.18-6-xen-686
Exemple de fichier de conf pour une VM Debian
- /etc/xen/gameVM.cfg
# # Configuration file for the Xen instance gameVM, created # by xen-tools 3.9 on Mon Jun 29 14:35:36 2009. # # # Kernel + memory size # kernel = '/boot/vmlinuz-2.6.26-2-xen-amd64' ramdisk = '/boot/initrd.img-2.6.26-2-xen-amd64' memory = '2048' extra = 'xencons=tty' vcpus = '2' # # Disk device(s). # root = '/dev/sda2 ro' disk = [ 'phy:/dev/vg_data/gameVM-swap,sda1,w', 'phy:/dev/vg_data/gameVM-disk,sda2,w', 'phy:/dev/vg_data/gameVM-data,sdb,w', 'phy:/dev/vg_data/gameVM-data2,sdc,w', ] # # Hostname # name = 'gameVM' # # Networking # vif = [ 'ip=192.168.1.3,vifname=vif1.3' ] # # Behaviour # on_poweroff = 'destroy' on_reboot = 'restart' on_crash = 'restart'
Exemple de conf pour une VM XP
Testé avec Xen 3.2 sur Debian Lenny
kernel = '/usr/lib/xen-3.2-1/boot/hvmloader' builder = 'hvm' memory = '1024' name = "xpVM" vcpus = 1 vif = ['type=ioemu, bridge=xenbr0'] disk = [ 'phy:/dev/vg_data/xpVM-disk,ioemu:hda,w', 'file:/tmp/xp.iso,ioemu:hdc:cdrom,r' ] device_model = '/usr/lib/xen-3.2-1/bin/qemu-dm' boot = 'd' sdl = 0 vnc = 1 vncdisplay = 0 vncviewer = 0 usbdevice = 'tablet'
Penser à modifier (vnc-listen 'X.X.X.X') dans /etc/xen/xen-config.sxp pour avoir un accès VNC lors de l'install et relancer un /etc/init.d/xend restart.
Une fois l'install terminée on peut retirer la ligne suivante :
'file:/tmp/xp.iso,ioemu:hdc:cdrom,r'
Et remplacer :
boot = 'd' vnc = 1
Par :
boot = 'c' vnc = 0
La connexion se fera via un client RDP par la suite.
Créer un bridge local pour une VM Windows (avec HVM)
Le NAT ne marche pas des masses (Xen 3.2) avec une VM avec HVM. Du coup un bridge local permet de résoudre le souci :
tunctl -t tap0 -u root ip link set up dev tap0 brctl addbr xenbr0 brctl addif xenbr0 tap0 ip link set up dev xenbr0 ip addr add 192.168.3.1/24 dev xenbr0 brctl addif xenbr0 tap0
Sur la ou les VM(s) on utilise 192.168.3.2 par ex. comme adresse IP.
Lister les VMs
- xm list
dedibox:/usr/sbin# xm list Name ID Mem(MiB) VCPUs State Time(s) Domain-0 0 1014 2 r----- 16540.9 NXvm 2 256 1 -b---- 459.6 WEBvm 3 512 1 -b---- 1020.3 WoWvmII 1 1000 1 -b---- 6352.7 gserver 8 256 1 r----- 7579.9
Afficher l'uptime des machines
- xm uptime
dedibox:/usr/sbin# xm uptime Name ID Uptime Domain-0 0 22:39:40 NXvm 2 22:36:21 WEBvm 3 22:36:02 WoWvmII 1 22:36:40 gserver 8 19:54:13
Afficher les perfs des VMs
- xentop -b -i 2 2>/dev/null |grep -v vdb |tail -12 |grep -v vbd
xentop -b -i 2 2>/dev/null |grep -v vdb |tail -12 |grep -v vbd xentop - 13:37:31 Xen 3.0.3-1 5 domains: 2 running, 1 blocked, 0 paused, 0 crashed, 0 dying, 0 shutdown Mem: 3144124k total, 3143720k used, 404k free CPUs: 2 @ 2000MHz NAME STATE CPU(sec) CPU(%) MEM(k) MEM(%) MAXMEM(k) MAXMEM(%) VCPUS NETS NETTX(k) NETRX(k) VBDS VBD_OO VBD_RD VBD_WR SSID Domain-0 -----r 16666 99.1 1037476 33.0 no limit n/a 2 0 0 0 0 0 0 0 0 gserver -----r 7712 99.5 261996 8.3 262144 8.3 1 0 0 0 5 6 57598 163161 0 NXvm --b--- 460 0.1 261968 8.3 262144 8.3 1 0 0 0 2 52 27095 216960 0 WEBvm ------ 1029 0.4 524104 16.7 524288 16.7 1 1 637789 364648 8 420 138717 536729 0 WoWvmII ------ 6354 0.5 1023748 32.6 1024000 32.6 1 1 52265 548430 3 193 154307 1415267 0
Afficher la répartition CPU
- xm vcpu-list
dedibox:/usr/sbin# xm vcpu-list Name ID VCPUs CPU State Time(s) CPU Affinity Domain-0 0 0 0 r-- 8989.2 any cpu Domain-0 0 1 0 --- 7777.5 any cpu NXvm 2 0 0 --- 461.1 any cpu WEBvm 3 0 0 -b- 1032.7 any cpu WoWvmII 1 0 0 --- 6355.7 any cpu gserver 8 0 1 r-- 7817.7 any cpu
Afficher les infos réseau
- xm network-list VM
dedibox:/usr/sbin# xm list |egrep -v "Domain|Name"|awk '{print $1}'|while read i > do > echo $i > xm network-list $i > done NXvm Idx BE MAC Addr. handle state evt-ch tx-/rx-ring-ref BE-path 0 0 00:16:3e:7b:7c:6e 0 4 8 522 /523 /local/domain/0/backend/vif/2/0 WEBvm Idx BE MAC Addr. handle state evt-ch tx-/rx-ring-ref BE-path 0 0 00:16:3e:54:d8:29 0 4 14 528 /529 /local/domain/0/backend/vif/3/0 WoWvmII Idx BE MAC Addr. handle state evt-ch tx-/rx-ring-ref BE-path 0 0 00:16:3e:11:b8:c3 0 4 9 523 /524 /local/domain/0/backend/vif/1/0 gserver Idx BE MAC Addr. handle state evt-ch tx-/rx-ring-ref BE-path 0 0 00:16:3e:27:dd:cb 0 4 11 525 /526 /local/domain/0/backend/vif/8/0
Afficher les poids de chaque VM
- xm sched-credit -d VM
xm list|egrep -v Name|awk '{print $1}'|while read i; do echo "--- $i ---" ;xm sched-credit -d $i; done --- Domain-0 --- {'cap': 0, 'weight': 256} --- NXvm --- {'cap': 0, 'weight': 256} --- WEBvm --- {'cap': 0, 'weight': 512} --- WoWvmII --- {'cap': 0, 'weight': 512} --- gserver --- {'cap': 0, 'weight': 256}
Ajouter un disque à chaud
lvcreate -L 51200 -n ftpVM-data8 vg_data xm block-attach ftpVM phy:/dev/vg_data/ftpVM-data8 /dev/sdi w
⇒ Penser à modifier le fichier de conf de la VM pour la prise en compte au boot
Troubleshooting
4gb seg fixup errors
- Installer le package libc6-xen : apt-get install libc6-xen
- Si /lib/tls existe sur votre machine : mv /lib/tls /lib/tls.disabled
- echo ‘hwcap 0 nosegneg’ > /etc/ld.so.conf.d/libc6-xen.conf && ldconfig
- Rebooter la VM
Choisir l'ordre de démarrage des VMs
Par défaut les VMs sont démarrées par rapport à l'ordre alphabétique des liens sous /etc/xen/auto :
lrwxrwxrwx 1 root root 20 Dec 22 15:50 0WoWvmII.cfg -> /etc/xen/WoWvmII.cfg lrwxrwxrwx 1 root root 17 Dec 22 15:50 1NXvm.cfg -> /etc/xen/NXvm.cfg lrwxrwxrwx 1 root root 18 Dec 22 15:50 2WEBvm.cfg -> /etc/xen/WEBvm.cfg lrwxrwxrwx 1 root root 20 Mar 8 21:02 3gserver.cfg -> /etc/xen/gserver.cfg
Temporiser le démarrage des VMs
On peut parfois avoir des soucis si plusieurs VMs démarrent en parallèle. Cela peut arriver qu'une VM soit plus longue à démarrer (fsck par ex.) ce qui amène la VM suivante à démarrer alors que la précédente est toujours en cours de boot. On peut temporiser le lancement des VMs grâce à la variable XENDOMAINS_CREATE_USLEEP présente dans le fichier /etc/default/xendomains.
Perfs réseau dégradées
Sous Debian, décommenter la ligne suivante dans /etc/network/interfaces sur les VMs :
post-up ethtool -K eth0 tx off
le package ethtool doit être installé.
PTY allocation request failed on channel 0
Sur la VM, lancer :
apt-get install udev
Rajouter la ligne ci-dessous dans le /etc/fstab (sur la console de la VM) :
none /dev/pts devpts defaults 0 0
Lancer :
mkdir /dev/pts mount -a