XEN
XEN jppNote 2016: ce groupe d'articles date un peu mais ils correspondent à une époque à laquelle la virtualisation n'était pas aussi commune qu'aujourd'hui. Je me sers toujours de Xen (4.6 maintenant et un peu de KVM aussi) pour tous mes essais et tests.
Ce livre est destiné à regrouper tous les articles sur XEN, son paramétrage, son usage, des trucs ...
Le premier article explique mon installation XEN, une des premières ... pensez, la virtualisation en 2009 !
Linux : serveur de machines virtuelles
Linux : serveur de machines virtuelles jppAyant eu besoin d'installer plusieurs systèmes différents pour des tests je me suis tourné vers la solution des machines virtuelles.
Etant un fervent partisan des logiciels libres j'ai choisi XEN voir la définition sur : fr.wikipedia.org/wiki/XEN
Le site officiel de Xen : www.xen.org
J'ai reçu, au cours d'un salon, un DVD Suse (SLES 11) permettant d'installer un tel serveur, j'ai donc decidé d'utiliser ce système pour ma dernière acquisition, us système AMD 64 bits dual core.
Je suis pourtant un fervent partisan de Debian, mais ayant eu à utiliser SUSE pour des installations professionnelles j'ai décidé de l'utiliser ici.
Le système est constitué ainsi :
- carte mère ASUS
- Processeur AMD Athlon(tm) 64 X2 Dual Core Processor 4400+
- 8Go de RAM (4 * 2Go)
- Disques : 2 * 250 Go de récupération + 2 * 1To tout neufs le tout en SATA2
J'ai décidé d'utiliser le RAID 1 logiciel sur tous les disques afin de sécuriser l'engin.
Les deux disques de 250 Go (sda et sdb) supportent donc :
- Une partition "swap" chacun (sda1 et sdb2)
- Une partition "boot" en ext2 chacun (sda2 et sdb2) (l'une est une copie de l'autre)
- Une partition "système" en ext3 montée en RAID1 (sda3 + sdb3) de 16Go (md1)
- Une partition comprenant le reste du disque utilisée en RAID1 (sda4 + sdb4) et gérée par LVM
Les deux disques de 1To ont été divisés en deux partitions
- une partition (sdc1 ett sdd1) de réserve de 8Go pour pouvoir y mettre un autre système
- une partition montée en RAID1 (sdc2 + sdd2) de 980Go gérée en LVM (md0)
Toutes ces opérations ont été faites lors de l'installation avec l'installeur standard de SUSE qui est très agréable à utiliser et permet toutes les fantaisies dans la création des partitions.
J'ai ensuite réalisé une installation standard de poste de travail en y ajoutant la gestion des machines virtuelles.
La version installée de XEN était la 3.3.1 que je ne connaissais pas encore (j'ai utilisé professionnellement la 3.0, la 3.1 et la 3.2). Des machines que j'avais créées en 3.1 ont été démarrées sans problème après :
- Définition d'un disque de stockage système (vive LVM) de 16Go
- Recopie de la sauvegarde de la machine roginale réalisée par "dd" du disque système et "gzip" du résultat pour pouvoir le transporter facilement.
- Paramétrage de mon serveur DHCP pour attribuer une adresse fixe à cette nouvelle machine grâce à la MAC Address.
- Mise en place du fichier paramètres d'origine de la MV
- Mise à jour de ce fichier (nom du disque et des interfaces réseau et MAC Address)
- Lancement de la machine ... ça boote.
- Accès réseau OK
La machine fonctionne parfaitement, elle peut accéder à internet, on peut se connecter normalement sur ce nouveau système.
Aujourd'hui j'ai une dizaine de machines virtuelles installées dont plusieurs peuvent fonctionner ensemble tant que je ne dépasse pas la mémoire disponible !
En effet chaque MV se voit attribuer un quota de mémoire et lorsqu'il ne reste plus de mémoire disponible XEN refuse sagement de lancer une nouvelle machine.
Les VM c'est le pied.
Dernières nouvelles : le système passe sur SSD
Paramètres définissant une machine virtuelle
Paramètres définissant une machine virtuelle jppLa déclaration d'une machine virtuelle se réduit à quelques paramètres permettant à XEN de créer l'environnement de cette machine. Il existe différentes manières d'écrire ces fichiers de configuration (y compris un mode XML), mais les éléments à paramétrer sont toujours les mêmes. En plus je préfère la syntaxe la plus simple en fichier texte "légèrement" structuré par l'usage des parenthèses carrées [ et ] pour les éléments multiples tels que disques ou interfaces réseau.
Le paramétrage concerne les éléments typiques de toute machine qu'elle soit physique ou virtuelle :
Nom de la machine (NAME) :
C'est le nom de la machine tel que vous l'utiliserez pour "discuter" avec l'hyperviseur, exemple :
- name='amdx2-deb65'
Ce nom doit bien entendu être unique ...
Identifiant (UUID):
Chaque MV doit disposer d'un identifiant différent des autres. L'identifiant est construit sous un format complexe afin d'éliminer les possibilités de doublon. Le programme "uuid" génère très bien ces identifiants.
Un exemple :
uuid='9e8c403f-bd93-75f7-1754-dde60e2803d9'
CPU (VCPUS):
Une nouvelle MV doit disposer d'au moins un CPU ! Mais elle peut en disposer d'autant que la machine physique servant de support peut lui en offrir.
Le seul paramètre direct est donc le nombre de VCPU (CU Virtuels) attribués à cette machine, par exemple :
- vcpus=1
Mémoire (MEMORY) :
C'est la quantité de mémoire attribuée à cette machine lors de son démarrage, la valeur est exprimée en MégaOctets, exemple :
- memory=1024
Comportement stop/start :
Ce groupe comporte trois paramètres viennent contrôler le comportement de la machine lors des arrêts et redémarrage, les valeurs indiquées sont des standards:
- on_crash='destroy'
- on_poweroff='destroy'
- on_reboot='restart'
Je ne change jamais ces valeurs qui conviennent parfaitement pour les cas "normaux".
Contrôle de l'horloge :
Ce paramètre contrôle le comportement de l'horloge, j'ai toujours vu la valeur "0".
- localtime=0
Mode d'émulation :
Ceci permet une émulation totale ou partielle. L'émulation partielle suppose des systèmes dont le noyau est prévu pour être "virtualisé" et est très coopérant, notamment au niveau des périphériques.
- builder='hvm'
Fournisseur des périphériques :
C'est le nom du module d'émulation qui sera utilisé pour présenter à la MV un "hardware" cohérent.
- device_model="/usr/lib/xen/bin/qemu-dm"
Bootloader chargé du lancement du système.
C'est le programme qui "lance" le système contenu sur le disque de la machine.
- kernel='/usr/lib/xen/boot/hvmloader'
Ici les paramètres sont destinés à une émulation totale (hardware virtual machine) pour utiliser un système virtualisé quelconque.
Mode de boot.
Selon la valeur (en direct de MSDOS) "c" provoque un boot depuis le "disque dur virtuel", la valeur "d" provoque un boot depuis le lecteur de CD virtuel.
- boot='c'
Après la création initiale d'une nouvelle machine (pour laquelle on a mis "d") depuis le CD, il fat remettre cette valeur à "c" avant de rebooter la machine.
Définition des disques dur virtuels.
on définit dans ce groupe "disk" le lien entre le périphérique physique et la manière dont il est présenté au nouveau
système.disk=[ 'phy:/dev/HUGE_1/MV4,hda,w' ]
Ici il s'agit dune partition "phy"sique qui sera présentée comme disque "hda" au système avec droit d'écriture ("w").
Une image ISO sera présentée comme :
- 'file:/STOCKAGE/ISOS/debian-500-amd64-DVD-1.iso,hdd:cdrom,r'
Le lecteur de CD physique de la machine support sera présenté (en lecture seule ("r"), comme c'est normal pour un CDROM) sous la forme :
- 'phy:/dev/hdb,hdc:cdrom,r'
Carte(s) réseau :
Plusieurs syntaxes existent (on peut même fournir l'adresse IP), je préfère celle-ci qui me permet d'utiliser mon mécanisme standard de DHCP.
On doit ici fournir adresse MAC, nom du "bridge" géré par le domaine 0, le modèle de périphérique à émuler. Il y a ici deux interfaces réseau :
Et puis quelques autres paramètres que je ne touche jamais et que je vous livre "en vrac" :
- vnc=1
- vncunused=1
- apic=0
- acpi=1
- pae=1
- serial='pty'
- keymap='fr'
Ces valeurs me conviennent et je ne me hasarde pas à les changer.
D'autres paramètres existent permettant de définir la priorité de la machine mais je préfère démarrer les machines avec la priorité standard et la modifier ensuite à l'aide des commandes "xm".
Exemple de définition d'une machine (Debian 5.0 bien que cela ne soit pas visible dans la définition) :
ostype='other'
name='amdx2-deb67'
memory=1024
vcpus=1
uuid='8e8c485f-a093-75a5-f753-afe71e2803e9'
on_crash='destroy'
on_poweroff='destroy'
on_reboot='restart'
localtime=0
builder='hvm'
extid=0
device_model="/usr/lib/xen/bin/qemu-dm"
kernel='/usr/lib/xen/boot/hvmloader'
boot='c'
disk=[ 'phy:/dev/SYSTEM/DEB67,hda,w',
# 'file:/STOCKAGE/ISOS/debian-503-amd64-netinst.iso,hdd:cdrom,r',
]
vif=['mac=00:16:3e:30:02:01,bridge=eth0,model=rtl8139,type=ioemu',
'mac=00:16:3e:40:02:02,bridge=eth1,model=rtl8139,type=ioemu',
]
vnc=1
vncunused=1
apic=0
acpi=1
pae=1
serial='pty'
keymap='fr'
Ce petit article sans prétentions devrait démystifier la création de machines virtuelles.
XEN : mon réseau
XEN : mon réseau jppIl existe plusieurs manières de configurer le réseau dans un serveur XEN afin que les Machines Virtuelles (MV) disposent chacune d'un accès réseau.
Les différents modes sont :
- NAT
- Bridge
- Route
Le plus simple pour moi est le mode "Bridge" car chaque MV dispose de sa propre adresse IP et de tous les ports disponibles sans aucun paramétrage spécifique au niveau du domaine-0. Dans mon cas où toutes les machines sont des machines de test bien à l'abri derrière un pare-feu sur la machine "pont" de mon réseau cela ne me pose pas de problèmes de sécurité.
La situation pourrait être très différente sur des machines accessibles directement depuis Internet ou surtout dans le cas de machines de production où la sécurité est primordiale. Par ailleurs dans ce cas là les ports utilisés sont peu nombreux et la gestion du routage entre les machines n'est pas trop évolutive.
En effet je n'aimerais pas toucher à un script iptables compliqué sur des machines de production ..... au risque de bloquer l'accès à des ressources critiques.
J'ai donc choisi le mode "Bridge" qui répond à mes besoins.
Paramétrage du mode "Bridge".
- Au niveau du paramétrage de XEN.
Il s'agit de mettre en place les bons paramètres dans le fichier "xend-config.sxp".
- (network-script L-NT )
c'est le script utilisé par le démon xend au démarrage pour initialiser le(s) bridge(s) - (vif-script vif-bridge)
c'est le script utilisé par xend à la création de chaque interface de chaque MV
Comme je dispose de deux interfaces réseau j'utilise un petit script perso qui initialise les deux ponts d'un seul coup en appelant le script "standard" de Suse :
#!/bin/bash
# L-nt : Start XEN bridge
MKBRIDGE ()
{
"$dir/network-bridge" "$@" vifnum=1 bridge=eth1 netdev=eth1
sleep 1
"$dir/network-bridge" "$@" vifnum=0 bridge=eth0 netdev=eth0
brctl show
echo '.'
echo ' '
}
MKBRIDGE $1 $2
Les deux ponts sont activé et les MV peuvent se "brancher" et accéder aux réseaux.
Le script standard OpenSuse ne traite qu'un interface il faut donc passer par un script intermédiaire.
Par ailleurs le démarrage du script par le démon est effectué à un mauvais moment dans la séquence d'init et cela provoque des ennuis divers, je lance donc ce script complètement en fin de la séquence de boot ou "à la main" lorsque j'effectue des manips.
Dernières nouvelles :
Avec OpenSuse 11.2 le réseau est d'office installé en "pont" il ne reste rien à faire ... et cela marche sans problèmes.
Le "pont" est créé automatiquement lors de l'installation et est utilisé même dans les modes non "Xen".
Les performances réseau ne semblent pas en souffrir si ce n'est que la gestion du MTU fonctionne mal. Il est impossible de mettre un MTU à 4000 en automatique. Il est inutile de configure le MTU à 4000 avec les outils graphiques, cela n'a aucun effet. Même en remplissant les fichiers de configuration "à la main" avec la bonne valeur, on constate qu'après un reboot le MTU est retombé à 1500. J'aime bien avoir l'interface utilisant le iSCSI avec un MTU plus élevé.
Attention la version 11.2 n'est pas encore finalisée et peut présenter quelques inconvénients voir l'article sur le SSD
XEN : passage de 3.3.1 à 3.4.1
XEN : passage de 3.3.1 à 3.4.1 jppArès avoir utilisé du XEN 3.0 puis 3.2 j'ai upgradé mon installation en OpenSuse 11.1 ( http://www.opensuse.org ) et Xen 3.3.1, puis j'ai trouvé dans OpenSuse factory une version 3.4.1 que j'ai tout de suite voulu essayer ...
Comme j'ai du utiliser des "rpm" chargés un par un j'ai essuyé les problèmes de dépendances que j'ai résolu comme autrefois ... à la main.
On charge un RPM, on le teste et on cherche le RPM xxx de la version yyy qui est demandé, cela dure un petit moment mais on y arrive à l'aide de RPMFIND.NET qui est toujours le dernier recours pour les RPM récalcitrants.
Enfin j'y suis arrivé avec :
libeggdbus-1-0-0.5-1.12.x86_64.rpm
libpolkit0-0.94-2.3.x86_64.rpm
libpolkit-gtk-1-0-0.94-2.1.x86_64.rpm
libpolkit-qt0-0.9.2-3.1.x86_64.rpm
libreadline6-6.0-17.1.x86_64.rpm
libselinux1-2.0.80-4.6.x86_64.rpm
libuuid1-2.16-3.1.x86_64.rpm
libvirt-0.7.1-13.1.x86_64.rpm
libvirt-python-0.7.1-13.1.x86_64.rpm
parted-1.9.0-1.12.x86_64.rpm
polkit-0.94-2.3.x86_64.rpm
virt-manager-0.8.0-10.1.x86_64.rpm
xen-3.4.1_19718_04-23.1.x86_64.rpm
xen-doc-pdf-3.4.1_19718_04-23.1.x86_64.rpm
xen-libs-3.4.1_19718_04-23.1.x86_64.rpm
xen-tools-3.4.1_19718_04-23.1.x86_64.rpm
Et j'ai pu installer mon nouveau XEN 3.4.1 !
A première vue, rien d'extraordinaire, les machines se lancent et tournent plutôt bien. Le fonctionnement est stable avec 4 ou 5 MV en route, le fonctionnement global et la performance sont très corrects.
Seule ombre au tableau le gestionnaire graphique "virt-manager" a perdu un certain nombre de gadgets d'affichage, on disposait de l'usage CPU avec un graphe, de la taille mémoire, du combre de CPU attribués à chaque machine, c'est fini on ne peut plus tout avoir simultanément. Ce n'est pas très grave mais c'était bien de tout voir d'un coup d'oeil.
Les VM c'est le pied.
XEN : test 3.4.2
XEN : test 3.4.2 jppAprès l'utilisation des versions 3.2, 3.3, 3.4.1 j'ai décidé de tester la dernière mouture la 3.4.2.
Cette version est censée corriger quelques bugs présents dans la 3.4.1, bugs que je n'ai pas rencontrés personnellement.
Par ailleurs le support de la variation de la fréquence des CPU en fonction de la charge système est censé être "meilleur". Aucune fonctionnalité nouvelle n'est annoncée dans cette version que semble être uniquement une 3.4.1 stabilisée.
La version étant "toute neuve" j'ai téléchargé directement le paquet source : http://www.xen.org/products/xen_source.html
La compilation s'effectue sans problèmes après l'installation des dépendances nécessaires :
- GCC v3.4 or later, j'ai utilisé le 4.4.1
- GNU Make
- GNU Binutils
- Development install of zlib (e.g., zlib-dev)
- Development install of Python v2.3 or later (e.g., python-dev)
- Development install of curses (e.g., libncurses-dev)
- Development install of openssl (e.g., openssl-dev)
- Development install of x11 (e.g. xorg-x11-dev)
- bridge-utils package (/sbin/brctl)
- iproute package (/sbin/ip)
- hotplug or udev
L'installation s'effectue très simplement par recopie du binaire "gzifié" ( xen-3.4.2/dist/install/boot/xen-3.4.2.gz) dans le répertoire /boot et par paramétrage de grub.
Aucune dépendance spécifique par rapport aux outils (QEMU, libvirt ...) n'étant indiquée je me suis lancé directement dans l'exécution.
Les différentes machines que j'ai testées se sont lancées sans erreurs et ont fonctionné tout à fait normalement :
- Windows XP (32 bits)
- Windows 2000 (32 bits)
- Windows 2003 (32 bits)
- Linux Debian en 32 et 64 bits
- Linux Suse 10/SP2
Je continue les tests pour donner un peu plus d'impressions sur cette version.
Comme la version OpenSuse 11.2 vient de sortir en beta je vais reformater le système, mettre la partie système sur SSD et installer OpenSuse 11.2.
Voir l'article : sur le SSD
XEN : installation 3.4.2 sur Debian "instable"
XEN : installation 3.4.2 sur Debian "instable" jppDepuis que je dispose d'une belle machine tout neuve j'ai eu l'envie de tester XEN. Mon installation Deian étant fondée sur la distribution "unstable" je suis donc resté dans la ligne en essayant d'installer la dernière version de XEN la 3.4.2.
L'installation se fait à grands coups de "apt-get" ou "aptitude" selon les goûts de chacun. Les paquets à installer sont :
- xen-hypervisor-3.4-amd64 3.4.2-2
- xenstore-utils 3.4.2-2
- xen-tools 4.1.1
- xen-utils-3.4 3.4.2-2
- xen-utils-common 3.4.2-2
auxquels il faut ajouter
- xen-utils-unstable 3.3 ?
Le volume à télécharger est assez faible # 15Mo.
L'installation se passe sans problèmes; merci aptitude.
Il faut ensuite se mettre à la recherche d'un noyau "xénifié" pour gérer le domaine 0.
La seule image Debian que j'ai trouvée en X86_64 est le 2.6.26-2-xen-amd64 dans la branche "stable" avec son inséparable paquet de modules.
Ce noyau convient en principe pour le domaine 0 et pour les domaines Utilisateurs.
Après moult essais ce noyau ne fonctionne pas sur mon matériel et se bloque presque au début avant les accès aux disques.
Le passage par la case compilation est obligatoire. En principe les dernières versions de noyau sont aptes à gérer le domaine 0 à condition de définir le bon paramétrage.
Après une petite recherche j'ai trouvé un noyau 2.6.31 modifié pour supporter le domaine 0 sur http://x17.eu/xen/
où plusieurs noyaux sont disponibles, j'ai choisi le suivant :
linux-2.6.31.4-xen-r4.aka.suse-xenified-2.6.31.3-1.1.src.rpm-rebased.patches.by.andrew.lyon.tar.gz
qui me plaisait bien car très récent et réalisé par un gourou connu.
Le fichier ".config" que j'ai utilisé est en téléchargement en bas de cette page, il suffira de le renommer en ".config".
Il faut ensuite ajouter le lancement de XEN et du noyau fraîchement compilé dans le fichier grub.cfg aucune opération ne le fait automatiquement.
Il y a une petite bizarrerie dans la configuration : il faut mettre deux fois (???) certains paramètres ce qui ne semble pas évident et peut dépendre de la version de GRUB utilisée (1.97 pour moi). Pour simplifier je donne ci dessous la partie adéquate du "grub.cfg" :
menuentry "Debian XEN GNU/Linux" {
insmod ext2
set root=(hd0,1)
search --no-floppy --fs-uuid --set 116c3b30-4586-4f25-b7c1-c0d5c5a5b003
multiboot /xen.gz /xen.gz noreboot dom0_mem=1536M
module /vmlinuz-xen /vmlinuz-xen root=/dev/md0 ro noquiet
module /initrd-xen
}
Avec tout cela le système se lance et XEN es activé mais lorsque je tente la création d'une machine virtuelle il y a un problème :
Error: HVM guest support is unavailable: is VT/AMD-V supported by your CPU and enabled in your BIOS?
Simple oubli ... il suffit de rebooter en passant par le BIOS pour activer cette option.
Cette fois-ci on va pouvoir y aller :
- créer une Machine virtuelle avec un fichier de config "emprunté" et une image disque récupérée.
- xm new k2000-....
Unexpected error: <type 'exceptions.ImportError'>
Please report to xen-devel@lists.xensource.com
Traceback (most recent call last):
File "/usr/lib/xen-3.4/bin/xm", line 8, in <module>
main.main(sys.argv)
File "/usr/lib/xen-3.4/lib/python/xen/xm/main.py", line 2997, in main
_, rc = _run_cmd(cmd, cmd_name, args)
File "/usr/lib/xen-3.4/lib/python/xen/xm/main.py", line 3021, in _run_cmd
return True, cmd(args)
File "<string>", line 1, in <lambda>
File "/usr/lib/xen-3.4/lib/python/xen/xm/main.py", line 1366, in xm_importcommand
cmd = __import__(command, globals(), locals(), 'xen.xm')
File "/usr/lib/xen-3.4/lib/python/xen/xm/new.py", line 26, in <module>
from xen.xm.xenapi_create import *
File "/usr/lib/xen-3.4/lib/python/xen/xm/xenapi_create.py", line 23, in <module>
from xml.parsers.xmlproc import xmlproc, xmlval, xmldtd
ImportError: No module named xmlproc
xm create --> erreur : from xml.parsers.xmlproc import xmlproc, xmlval, xmldtd
Les dépendances de Debian sont pourtant en général bonnes ... on cherche un paquet "python-xml" ... qui existe bel et bien au milieu d'un très grand nombre de paquets python. Tiens il faudra que je me mette sérieusement à Python.
aptitude install python-xml
Et cela repart :
xm new k2000-xp1
Using config file "./k2000-xp1".
Ouuuiiii, cette fois-ci c'est bon, la MV est créée, on va pouvoir jouer. Je lance le NS5200 (j'y ai stocké l'image disque que l'on m'a prêtée) et ...
Je crée une nouvelle machine avec un fichier param récupéré avec l'image et légèrement modifié pour l'adapter (réseau et image disque) :
xm new mach_test
C'est OK !Il y a encore un petit problème la machine virtuelle ne se lance pas, la consultation du fichier de lancement (/var/log/xen/qemu-dm.....) montre que "qemu-dm" reçoit un paramètre qu'il n'est pas capable d'interpréter. Le paramètre concerné est "-videoram 16", ja construit vite fait un petit script shell "qemu-dm" qui "filtre" les paramètres, élimine le paramètre "videoram" et appelle le programme original renommé en "qemu-dm.real":
#!/bin/bash
OPTS=` echo $* | sed 's/-videoram .//' `
/usr/lib/xen-unstable/bin/qemu-dm.real $OPTS
Par ailleurs je constate que les fchiers de XEN sont un peu "en pagaille" dans les répertoires :
- xen
- xen-3.4
- xen-common
- xen-default
- xen-tools
- xen-unstable
Un peu de rangement ne ferait pas de mal et certains modules sont présents (et différents) dans plusieurs répertoires. Je renomme certains répertoires de "xen-unstable" pour donner la priorité aux modules de "xen-3.4").
Je lance le gestionnaire "virt-manager" mais la machine nouvellement créée n'apparait pas dans la liste ... tan pis je la lance à la main :
xm start mach_test
La machine apparaît dans virt_manager, j'ouvre l'écran et tout semble se dérouler correctement jusqu'au passage en mode graphique où l'écran est parfaitement illisible.
Je lance une connexion SSH vers la machine, c'est OK, la machine tourne normalement. Il me suffit de lancer le serveur VNC pour pouvoir me connecter en mode graphique.
C'est vraiment dommage que virt-manager ne donne pas accès directement au mode graphique, probablement un problème lié à "videoram".
Je tente de lancer une image Windows XP, le démarrage est OK, l'affichage est bon dans la phase de démarrage mais dès que l'écran de login doit s'afficher l'écran se brouille. La machine est parfaitement accessible et fonctionnelle en utilisant le mode Terminal Server avec "rdesktop".
Le fonctionnement est parfaitement souple, la souris réponds plutôt mieux qu'avec les versions antérieures de XEN.
"Virt-manager" ne montre pas les machines qui ne sont pas lancées et je ne trouve aucun paramétrage à ce sujet dans les préférences, il est donc impossible de lancer les machins depuis l'interface graphique puisqu'elles n'y deviennent visibles qu'après leur lancement.
Il me faut me mettre à la recherche d'une version convenable de "qemu-dm" et attendre la prochaine version de "virt-manager".
Dans un prochain article on va tester les possibilités de sauvegarde et de restauration de machines et peut-être même la migration de machines d'un serveur à un autre.
Mais en conclusion l'installation de XEN depuis la version Debian "instable" nécessite un travail assez important avant d'arriver à quelque-chose d'utilisable. Il me faut chercher un "qemu-dm" un peu plus récent (?) qui admette le paramètre videoram pour, peut-être, pouvoir profiter des écrans graphiques "en direct" depuis la console. Quand à "virt_manager" il n'affiche pas les machines inactives et les statistiques IO et réseau bien que présentes dans le paramétrage n'affichent pas de valeurs lorsqu'elles sont activées.
D'autres fonctions ne marchent pas par exemple un "xm save" suivi d'un "xm restore" déclenche une erreur irrécupérable. Si le restore ne fonctionne pas il en sera de même de la fonction "xm migrate".
Devant ces ennuis je vais tester la version complète fourni par Xensource mais cela sera un autre article.
Voir l'autre article
J'ai appris depuis que les mainteneurs de Xen pour Debian ont limité leurs activités à autoriser Debian comme domaine hébergé et abandonné la possibilité d'utiliser Debian en "Domaine-0" car cela nécessite la maintenance du paquet "qemu-dm" qui semble a priori fort délicate.
L'intégration dand le noyau officiel de la gestion d'un "Domaine-0" est en cours mais devrait durer encore assez longtemps car les modifications sont assez "intrusives" peut-être pour le noyau 2.6.40 ?
XEN : installation 3.4 "unstable" de Xensource
XEN : installation 3.4 "unstable" de Xensource jppAprès une tentative avortée et afin de tester l'installation de la dernière version de XEN sur ma belle machine ( voir l'article ) je me dirige vers une génération complète à partir des sources de Xensource.
- pour récupérer les sources il faut installer "Mercurial" ( apt-get install mercurial ).
- installer quelques dépendances nécessaires :
apt-get install bcc gettext python-dev libsdl1.2-dev libgpmg1-dev
Il y a peut-être d'autres dépendances mais elles devaient déjà être installées sur mon système ... - Se mettre dans un répertoire tranquille et lancer la récupération des sources par :
hg clone http://xenbits.xensource.com/xen-3.4-testing.hg - On peut ensuite lancer la compilation par les classiques
make world
make install
Remarque un noyau Linux 2.6.18 est chargé et compilé (il vous faudra fournir le paramétrage de ce noyau) dans la foulée, ayant un noyau beaucoup plus récent j'ignorerai celui là.
Le processus est très long car il y beaucoup de sources à compiler, l'installation par contre est très rapide.
Si vous voulez utiliser le noyau 2.6.18 il faudra générer un "initrd" ( "update-initramfs -c -v -k 2.6.18" pour Debian et dérivés).
Je note au passage que la version de XEN est la 3.4.3.
Le paramétrage de Grub est identique à celui du précédent essai :
menuentry "Debian GNU/Linux, with Linux xen" { insmod ext2 set root=(hd0,1) search --no-floppy --fs-uuid --set 116c3b30-4586-4f25-b7c1-c0d5c5a5b003 multiboot /xen.gz /xen.gz noreboot dom0_mem=1536M module /vmlinuz-xen /vmlinuz-xen root=/dev/md0 ro noquiet module /initrd-xen /initrd-xen } |
Bien noter le "doublement" des informations sur les noms des fichiers ( /xen.gz, /vmlinuz-xen et /initrd.xen ) !
Si vous avez un "Grub" plus ancien, par exemple celui de la OpenSuse 11.2 le schéma est plus simple (plus intuitif surtout !) :
title Xen -- openSUSE 11.2 - 2.6.31.5-0.1-xpatch XEN 3.4.2 root (hd0,0) kernel /boot/xen-3.4.2.gz dom0_mem=2048M module /boot/vmlinuz-2.6.31.5-0.1-xpatch root=/dev/disk/by-label/ROOT splash=silent noresume showopts vga=0x345 module /boot/initrd-2.6.31.5-0.1-xpatch |
On reboote dans l'angoisse pour vérifier et ... celà marche du premier coup.
Je tente fébrilement de démarrer une VM, c'est parfait. L'écran du système est parfait dans la fenêtre de "virt-manager" (celui fourni par Debian).
Je tente me connecter sur 1 VM et lance des applications ensuite un :
xm save VM fichier
qui se termine assez rapidement avec un arrêt normal de la machine virtuelle après la mise en pause. Vite une tentative de restauration :
xm restore fichier
qui après quelques dizaines de secondes ré-ouvre l'écran pile sur les applications ouvertes précédemment. La fonction save/restore est donc parfaite.
Pour les prochains tests il me faudra accéder à une autre machine tournant avec un XEN relativement récent, un petit prêt/transfert de machine est à l'étude pour pouvoir réaliser ces tests.
Xen : noyaux Suse
Xen : noyaux Suse jppSuse est toujours à la pointe du progrès (OpenSuse) pour les noyaux "xenifiés", on peut ainsi tester les dernières versions des noyaux et bénéficier de toutes les améliorations.
J'ai ainsi testé les noyaux 2.6.33.6 et 2.6.34-rc4-4 en version "xenifiée" avec le "xen" 3.4 de OpenSuse (version 1_19718_04-2.1).
Ces deux noyaux sont parfaitement stables et toutes les machines virtuelles se lancent et fonctionnent sans problèmes. La stabilité de X est également bonne (je n'ai pas eu de plantages inexpliqués sous X, mais quelques ralentissements bizarres, avec Xorg à 100% de CPU, lors de défilement dans Firefox ou de changement d'écran), ce qui permet quand même l'accès direct par "virt-manager" aux écrans graphiques des machines virtuelles.
Petite différence :
le répertoire "/proc/xen" ne semble plus aussi important mais contient toujours les fichiers habituels, mais le répertoire "/sys/hypervisor" est bien plus fourni, c'est probablement l'avenir.
Il va falloir maintenant passer à XEN 4 pour être tout à fait "dans la course".
Rappel :
- Machine avec Processeur "AMD Athlon(tm) 64 X2 Dual Core Processor 4400"
- RAM : 8Go Disques : système sur
- SSD OCZ Agility 32Go (pas encore "trimmé", mais qui a gardé sa vitesse)
- 2 * 1To en RAID 1 2 * 160Go en RAID 1
Où récupérer ces trucs : sur le repository OpenSuse (OpenSuse 11.3 beta),.
Attention ce ne sont pas des versions "stables".
Je viens d'y voir un 2.6.34.6 (fini le -rc) à tester très prochainement et une version de Xen 4.0 toute fraîche d'aujourd'hui 7 mai 2010.
Je vais probablement finir par passer en 4.0, je n'ai pas tenu longtemps ...
XEN : migration de machines en live
XEN : migration de machines en live jppAvec l'installation de la dernière version de Xen, sur une nouvelle machine, l'envie m'est venue de tester la migration d'une Machine Virtuelle d'un serveur à l'autre.
Pour réaliser cette opération il faut :
- Deux serveurs de MV !
- Des installations de XEN "compatibles" (avec les mêmes chemins d'accès aux différentes fonctionnalités de XEN)
- Un espace de stockage partagé
note : le chemin d'accès aux "disques virtuels" doit être identique sur les deux systèmes, si le disque de la machine est accédé par "/REP/XEN.img" ce chemin doit être identique pour les deux serveurs. - Assez de mémoire libre sur le deuxième système pour "accueillir" une machine virtuelle supplémentaire.
- Une liaison réseau pour le tout, si elle est rapide (1 Gb) celà n'est que mieux
- Que les fonctions " xm save " et " xm restore " fonctionnent correctement sur chacune des deux machines.
- Que les processeurs soient compatibles, ici pas de problème tout est en AMD 64 bits.
- Pour les deux serveurs de MV un "simple" emprunt me permet de remplir ce pré-requis.
- Pour les installations compatibles cela semble OK car l'implantation de la machine "prêtée" (OpenSuse 11.2) est strictement standard, l'autre machine, installée avec les sources de Xensource est au standard.
- L'espace de stockage partagé est fourni par le NS5200 sur un "folder" ouvert en NFS, les deux machines ont été autorisées sur la boîte miracle.
- La liaison réseau est fournie par un petit hub 1 Gigabit D-LINK à 8 ports modèle DGS-1008d.
- Les fonctions " xm save" et " xm restore " ont été testées séparément sur les deux machines et marchent à merveille.
Il faut configurer les deux XEN pour permettre la migration, il faut pour cela modifier le fichier de configuration "/etc/xen/xend-config.sxp" :
- (xend-relocation-server yes)
- (xend-relocation-hosts-allow '192.168.2.20') ou (xend-relocation-hosts-allow '') pour des tests.
- (xend-relocation-port 8002)
Une fois la belle machine prêtée branchée, configurée et connectée au réseau (petite mise à jour de l'adresse de la carte nécessaire) les tests peuvent commencer.
Il faut d'abord assurer l'accès au NS5200 en NFS à la nouvelle machine, les structures de stockages devant être identiques il suffit de créer un nouveau point de montage à le racine du nouveau serveur.
Pour la commodité le serveur ancien (AMD dualcore) sera appelé serveur B, l'autre (AMD quadcore) sera appelé serveur A.
Un petit script permettra de ne pas retaper plusieurs fois la même commande d'accès au serveur NFS.
#!/bin/bash
NS5200='192.168.3.101'
mount -t nfs $NS5200:/raid0/data/Sauvegardes /THECUS_NFS -o rw
Une machine de test est lancée sur le serveur A, l'exemple utilisé est une machine WIndows XP dont le fichier de configuration est présenté en fichier attaché.
La machine est accédée par le logiciel " rdesktop ".
La suite des opérations est très simple :
- Connecter le montage NFS sur les deux machines
- Lancer la machine virtuelle XP sur le serveur A
- Se connecter à la machine XP à l'aide de "rdesktop"
- Ouvrir une application (OpenOffice) dans la machine XP
- Lancer la migration de serveur A vers serveur B
- Vérifier dans l'écran "rdesktop" que l'application est bien fonctionnelle sur la MV
Le script de connexion NFS est lancé sur les deux serveurs
Lancer la machine sur le serveur A : xm start com-xp1
Lancer la connexion à la MV : rdesktop -B -P -x -l -g 1024x768 com-xp1
Lancer OpenOffice et ouvrir un document.
Cà marche !
<Image 1 > : la MV est bien active sur le serveur A et invisible sur le serveur B.
Lancer la migration : xm migrate com-xp1 192.168.3.10
La machine apparaît sur le " xm top " du serveur A et passe en " migrating " sur le " xm top " de serveur B, après environ 20 secondes la machine disparait du serveur A et après une quinzaine de secondes supplémentaires la machine XP est de nouveau parfaitement exploitable dans l'écran rdesktop.
La vitesse de transfert de la mémoire (par le réseau) est d'environ 80 MO/s ce qui explique assez bien le temps de migration pour une taille mémoire de 1536 Mo.
<image 2> La machine est bien affectée au serveur B.
C'est quasiment magique !
Je vais regretter de perdre le deuxième serveur, mais arrêtons de rêver !
XEN : 4.0 sur Debian
XEN : 4.0 sur Debian jppCet article est destiné à présenter "mon" passage à XEN 4.0 depuis la compilation des sources.
J'ai déjà compilé XEN 3.4.3 et quelques noyaux, la plupart des utilitaires et autres "includes" nécessaires sont donc déjà présents dans ma machine.
Il faut, au moins disposer de :
- libssl-dev
- zlib-dev
- bin86
- bcc
- elks-libc
- python2.6-dev
- python-xml pour xml_proc
Après la récupération des sources depuis le site xensource et installation dans un répertoire propre il faut lancer la compilation, comme je dispose de noyaux Linux récents je ne compile pas le noyau standard de XEN.
Il suffit donc de lancer les commandes
make xen 2>&1 | tee XEN.LOG
make tools 2>&1 | tee TOOLS.LOG
pour compiler le tout et garder trace de l'événement.
La commande "make tools" déclenche automatiquement le chargement des sources de la version correspondante "xenifiée" de QEMU.
La vérification avant compilation des "tools" montre :
Checking check_crypto_lib: OK
Checking check_curl: unused, OK
Checking check_openssl_devel: OK
Checking check_python: OK
Checking check_python_devel: OK
Checking check_uuid_devel: OK
Checking check_x11_devel: OK
Checking check_xgettext: OK
Checking check_xml2: unused, OK
Checking check_zlib_devel: OK
Checking check_zlib_lib: OK
Cela donne une bonne indication des paquets de développement nécessaires.
make xen se passe bien, la première tentative d'installation achoppe sur l'absence d'un répertoire "check" dans l'arborescence "dist" :
./install.sh
Installing Xen from './dist/install' to '/'...
- installing for udev-based system
- modifying permissions
All done.
Checking to see whether prerequisite tools are installed...
cd: 53: can't cd to ./dist/install/../check
./install.sh: 54: ./chk: not found
All done.
Je récupère le répertoire "check" dans la verson 3.4.3 et la recopie "bêtement" ... et cela a l'air de fonctionner :
./install.sh
Installing Xen from './dist/install' to '/'...
- installing for udev-based system
- modifying permissions
All done.
Checking to see whether prerequisite tools are installed...
Xen CHECK-INSTALL lundi 26 avril 2010, 20:02:06 (UTC+0200)
Checking check_brctl: OK
Checking check_crypto_lib: OK
Checking check_curl: unused, OK
Checking check_iproute: OK
Checking check_python: OK
Checking check_python_xml: OK
Checking check_udev: /sbin/udevadm OK
Checking check_xml2: unused, OK
Checking check_zlib_lib: OK
All done.
Les nouveautés dans le répertoire "/boot" :
-rw-r--r-- 1 root root 669914 26 avril 22:50 xen-4.0.0.gz
lrwxrwxrwx 1 root root 12 26 avril 23:37 xen-4.0.gz -> xen-4.0.0.gz
lrwxrwxrwx 1 root root 12 26 avril 23:37 xen-4.gz -> xen-4.0.0.gz
On va bien vite voir si cela "boote" ! Eh non, un problème, il faut charger le package "python-profiler" pour que "xend" et compagnie se lancent normalement. Une fois ce paquet installé le boot est OK, et on peut lancer une machine virtuelle sans modifier son paramétrage.
Par contre mon "ancienne" installation (version 3.4.3) n'est plus utilisable pour diverses incompatibilités au niveau des scripts "python", le passage est donc un passage sans retour (à moins d'avoir réalisé une image de son disque système avant !).
J'ai ensuite refait les tests de migration "live" vers une machine tournant en XEN 3.4.3, la migration échoue. Un autre test :
"xm save machine fichier_sur_disque_partagé"
suivi (sur l'autre machine) d'un "xm restore fichier_sur_disque_partagé"
échoue. La compatibilité n'est donc pas évidente entre les versions 3.4 et 4, comme ce sont des versions "majeures" on ne s'en étonnera que peu.
XEN : 4.0 OpenSuse
XEN : 4.0 OpenSuse jppPas mal de paquets à charger avant de lancer le petit script ci-dessous :
#!/bin/bash
#
# Pour XEN
LISTE=" glibc-2.11.1-5.2.x86_64.rpm \
glibc-locale-2.11.1-5.2.x86_64.rpm \
libopenssl1_0_0-1.0.0-2.5.x86_64.rpm \
openssl-1.0.0-2.5.x86_64.rpm \
python-base-2.6.5-1.8.x86_64.rpm \
python-2.6.5-1.5.x86_64.rpm \
xen-4.0.0_21091_01-2.4.x86_64.rpm \
xen-libs-4.0.0_21091_01-2.4.x86_64.rpm \
xen-tools-4.0.0_21091_01-2.4.x86_64.rpm"
# Pour virt-manager
LISTEV="libxml2-2.7.7-3.2.x86_64.rpm \
libblkid1-2.17.2-1.6.x86_64.rpm \
parted-2.2-1.9.x86_64.rpm \
libvirt-python-0.8.0-1.8.x86_64.rpm \
libvirt-client-0.8.0-1.8.x86_64.rpm \
virt-utils-1.1.1-3.13.x86_64.rpm \
libvirt-0.8.0-1.8.x86_64.rpm \
virt-manager-0.8.4-2.3.x86_64.rpm "
rpm -hiv --replacefiles $LISTE
rpm -hiv --replacefiles $LISTEV
A bientôt pour les tests, à première vue tout baigne, la première machine virtuelle s'est bien lancée et tourne sans aucun problème.
Xen : Centos netinstall
Xen : Centos netinstall jppInstallation d'une machine Centos 5 avec le CD "Netinstall".
Sous XEN ou KVM c'est identique, sur une machine physique celà marche aussi !
Cette installation est tentée car j'ai vu que ce CD était très peu volumineux (environ 9Mo), ce qui semble très tentant et permet d'avoir une machine "à jour" dès l'installation, et si l'on peut mettre cela sur une vieille clé USB ...
L'image de démarrage est bien jolie
et vous emmène directement sur le premier écran texte. |
Premier écran "Choose a language" : je préfère le français ...
Deuxième écran "Quel type de clavier" : déjà en français ... j'aime bien les claviers "fr-latin9" ce qui ne pose pas de problèmes.
Troisième écran "Méthode d'installation"
je vais tenter le HTTP ... |
Quatrième écran "Configuration TCP/IP"
avec le choix IPV4 et/ou IPV6, l'un comme l'autre en IP fixe ou en dhcp. Comme j'ai préparé mon coup je sélectionne IPV4 et DHCP |
L'écran suivant permet de sélectionner le site de téléchargement
Le site HTTP est : "http://mirror.centos.org" le répertoire est : "centos-5/5.4/os/x86_64" A saisir sans le "http://" et sans "/" en tête de nom de répertoire. On peut aussi utiliser un miroir français en général plus rapide : mirrors.ircam.fr pub/CentOS/5.5/os/x86_64 (64 bits) ou pub/CentOS/5.5/os/i386 (32 bits) |
Après quelques instants la "Récupération" commence et après environ 3 minutes un écran graphique commence à s'ouvrir et au bout d'environ 40 secondes supplémentaires l'écran suivant s'affiche :
Mon disque "hda" n'étant pas initialisé, l'initialisation m'est proposée gentiment et je l'accepte puisque je crains pas de perdre les données contenues !
Très vite les trois disques que j'ai préparés sont repérés et présentés.
étant très paresseux je vais tenter le partitionnement par défaut en cochant aussi "Examiner et modifier la structure de stockage". Le bouton "+ Configuration avancée de stockage" permet même d'ajouter des cibles iSCSI directement. |
Après avoir confirmé que je veux bien partitionner les trois disques et que j'accepte de perdre toutes leurs données ... la proposition est de mettre les trois disques dans un Volume Group Unique de 48Go (mes trois disques de 16G) et deux volumes logiques: Swaq de 3G et une partition ext3 de 45G
On peut sur ce même écran gérer la mise en RAID et affiner LVM.
Ce n'est pas tout à fait ce que je veux et je clique "sur "Réinitialiser". l'écran est aussitôt mis à jour et me présente chacun de mes 3 disques en "espace libre". Il est très aisé d'éditer un espace libre en cliquant le bouton "Editer" :
le disque sélectionné est même encadré de rouge, le luxe ! Je crée donc un espace de swap de 3G, une partition racine de 13G sur le premier disque et crée une partition simple sur chacun des deux autres disques (/DATA et /LOG). L'éditeur de partition est très complet et très agréable à manipuler. |
L'écran suivant permet de sélectionner le chargeur de démarrage et le disque d'installation
Je choisis d'installer GRUB sur /dev/hda1 par défaut, sans mot de passe ni options avancées.
L'écran suivant permet de configurer les cartes réseaux, noms d'hotes ..., je choisis de laisser le boulot à DHCP toujours sans IPV6 (tiens il faudra que je m'y mette à IPV6).
Ecran suivant : choisir son fuseau horaire (belle mappemonde), pour moi Europe/Paris est préselectionné ainsi que l'horloge système en UTC.
Ecran suivant : le mot de passe de "root" et c'est parti ...... pour la sélection des paquets à installer
Je fais mon petit marché sans ajouter de dépot et choisis de "personnalier plus tard".
Les dépendances sont validées et il suffit de cliquer sur "Suivant" pour lancer l'installation. Une belle image s'affiche, les disques sont formatés rapidement, le "Démarrage du processus d'installation" est un peu laborieux (# 7 minutes) pendant ce temps quelque activité reseau vers des serveurs "centos".
Puis "Bienvenue dans Centos 5", l'installation commence :
... les images changent de temps en temps pour occuper le temps et expliquent tout du rojet Centos. Le téléchargement est assez rapide (de 150 à 500 Ko/s avec des pointes à 800Ko/s) sur cette ligne qui plafonne à 850Ko/s. La durée prévue est d'environ 65 minutes, malgré la progession le remps restant reste longtemps aux environs de 60/65 minutes avant de dommencer à descendre.
L'installation choisie est assez complète et le volume à télécharger est donc assez conséquent et c'est enfin fini (environ 50 minutes)
Après mise à jour du fichier de configuration de la MV on reboote ... les trois disques sont bien là et le noyau 2.6.18 démarre et lance les étapes complémentaires de configuration :
Pare-feu : je le désactive bien que l'écran permette de gérer assez finement les ports.
SELinux : je le désactive lui aussi.
Kdump : je le laisse inactif
Date et heure : OK, je lancerai NTP plus tard.
Utilisateur ; je crée un utilisateur standard
Carte son : pas sur la machine virtuelle ...
CDROM supplémentaires : aucun
La "dévalidation" de SELinux oblige à un redémarrage qui s'effectue sans problèmes. L'écran X est lancé et Gconf me signale que le pourcentage mini de la batterie ne peut être à zéro, et ... aucun menu ne s'affiche à part les icones "Poste de travail" et "Corbeille".
Il faut : faire un clic droit sur le "mini panel" présent en haut à Gauche sur l'écran et choisir "Propriétés", on peut alors configurer un peu ce panel avec "Etendre". On peut déjà le voir, mais il ne contient toujours rien ... encore un clic droit et on peut y ajouter une "barre de menus" (ne pas oublier de la "Verrouiller") pour le rendre beaucoup plus sympathique.
On peut ensuite le personnaliser à loisir comme d'habitude.
Bizarre que rien ne soit configuré dans le "gnome-panel", probablement un bug qui devrait être vite réparé.
A chaque connexion le "Gestionnaire d'énergie" positionne une erreur :
dont je n'arrive pas à me débarasser même en désactivant le gestionnaire d'énergie, bizarrement cela n'arrive pas pour le user "root".
Même après le rituel "yum update" (qui déclenche 136 mises à jour) ce bête message continue à s'afficher.
XEN : Linux + Oracle10g
XEN : Linux + Oracle10g jppUn petit tutoriel pour l'installation de Oracle 10g sur Linux.
C'est un peu ancien mais il y en a encore beaucoup, il y a même des entreprises qui n'ont pas encore migré vers Oracle 10 et restent en 9, 8 et même parfois Oracle 7 !
Le problème est ici que les dernières versions de Linux ne permettent pas l'installation (ou très difficilement) de Oracle 10g dans sa dernière version 10.2.
Ici, le choix s'est porté vers le Linux Oracle en version 4.8, il est probable qu'un Centos 4 ou un Suse 9 aurait pu convenir, mais je n'avais pas de Centos sous la main et la Suse 9 a refusé de s'installer dans la machine virtuelle prévue (blocage après la détection USB).
Celui-ci s'installe exactement comme le linux Centos55 (cf article).
La machine sur laquelle va être réalisée cette installation est constituée de :
- CPU 1
- RAM 1,5G
- Disques
- 20Go pour le système
- 32Go pour les données
- 1 adresse IP configurée "en dur", c'est important pour ne pas être ennuyé ensuite
Oracle 10 sur une OpenSuSE 11.4
Oracle 10 sur une OpenSuSE 11.4 jppOracle 10g commence à dater un peu et il peut être "délicat" de l'installer sur une distribution récente. Ce n'est pas le cas de la distribution OpenSuSE 11.4 sur laquelle Oracle 10 s'installe avec :
- les ajouts habituels aux paramètres systèmes :
/etc/sysctl.conf
kernel.shmall = 134217728
kernel.shmmax = 2147483648
kernel.semopn = 100
# semaphores: semmsl, semmns, semopm, semmni
kernel.sem = 250 32000 100 128
fs.file-max = 65536
net.ipv4.ip_local_port_range = 1024 65000
#
net.core.rmem_default = 262144
net.core.rmem_max = 262144
net.core.wmem_default = 262144
net.core.wmem_max = 262144
net.ipv4.tcp_rmem = 4096 87380 8388608
net.ipv4.tcp_wmem = 4096 65536 8388608
net.ipv4.tcp_mem = 4096 4096 4096
- une modification au fichier /etc/SuSE-release pour qu'il ressemble fortement à ceci :
openSUSE 9 (i586)
VERSION = 9
CODENAME = Celadon
L'installation doit ensuite se dérouler, comme pour moi, c'est à dire sans aucune difficulté.
XEN : Linux 4.8 + Oracle 10g
XEN : Linux 4.8 + Oracle 10g jppL'installation (en mode texte) est à peu près identique à celle de la version 5.4 présentée ici.
Attention, l'espace réservé au SWAP doit être eu moins égal à RAM * 1.5, dans mon cas RAM = 1024Mo, Swap = 2048Mo --> pré-requis largement rempli.
Une fois le système Linux installé on configure les variables système :
Ajouter dans /etc/sysctl.conf :
# add for Oracle
fs.file-max = 6815744
fs.aio-max-nr = 1048576
kernel.shmmni = 4096
kernel.shmall = 2097152
kernel.shmmax = 536870912
kernel.sem = 250 32000 100 128
net.ipv4.ip_local_port_range = 1024 65500
net.core.rmem_default = 262144
net.core.rmem_max = 4194304
net.core.wmem_default = 262144
net.core.wmem_max = 1048576
et dans /etc/security/limits.conf :
# for oracle
@dba soft nproc 2047
@dba hard nproc 16384
@dba soft nofile 65536
@dba hard nofile 131072
Mettre à jour les catalogues "yum" :
cd /etc/yum.repo.d
wget http://public-yum.oracle.com/public-yum-el4.repo
Dans le fichier "public-yum-el4.repo" mettre à jour la ligne "enabled=1" dans le paragraphe [el4_u8_base].
Lancer ensuite le rafraichissement du catalogue "yum update", attention il faut être patient, surtout si votre connexion n'est pas très rapide et plus le temps passe, plus il y a de mises à jour, aujourd'hui (Février 2011) il y a plus de mises à jour que lors du premier jet de cet article. Eh oui, je me sers de mes propres articles pour faire de nouvelles installations et j'y rajoute éventuellement un petit commentaire.
Puis charger les utilitaires indispensables tels que "vim-x11" qui fournit l'indispensable "gvim" par "yum install vim-X11".
Il faut aussi installer une version spécifique du paquet "libaio" puisqu'Oracle demande la version 0.3.96 exclusivement, celle chargée par "yum update" (version 0.3.105) n'est pas reconnue comme valide. (http://rpmfind.net). Le RPM trouvé crée un fichier "libaio.so.1" il m'a fallu créer un lien vers "libaio.so.0" ( ? ) pour que l'installeur accepte la librairie.
Le user "oracle" et le groupe "dba" sont créés.
Dans le disque monté sur "/DATA" créer un répertoire "u01" et "chown oracle:dba /DATA/u01", le fichier fstab sera agrémenté du montage de ce disque.
Le paquet "Oracle 10g" sera installé dans un coin tranquille ou rendu accessible par un montage Samba ou NFS.
On sera alors prêts pour la suite : l'installation de Oracle 10g
Ci dessous le fichier de paramétrage XEN de la machine virtuelle :
# Définition machine Linux Oracle 4.8 pour Oracle 10g
ostype='other'
name='com-ora10g'
memory=2048
vcpus=1
uuid='9b58d38c-1767-76f7-e865-3fa96ba392d2'
on_crash='destroy'
on_poweroff='destroy'
on_reboot='restart'
localtime=0
builder='hvm'
extid=0
device_model="/usr/lib/xen/bin/qemu-dm"
kernel='/usr/lib/xen/boot/hvmloader'
boot='c'
disk=[ 'phy:/dev/mapper/HUGE_1-COM_ORA10G_SYS,hdb,w',
'phy:/dev/mapper/DUO-COM_ORA10G_DATA,hdc,w',
# 'tap:aio:/MV/ORALINUX/Enterprise-R4-U8-x86_64-dvd.iso,hdd:cdrom,r'
]
vif=[ 'mac=00:16:3e:30:08:01,bridge=br0,model=rtl8139,type=ioemu',
]
vnc=1
vncunused=1
apic=0
acpi=1
pae=1
usb=1
usbdevice='tablet'
serial='pty'
XEN : Oracle 10, ajustements
XEN : Oracle 10, ajustements jppAprès le premier reboot, on tente le "dbstart" et on récupère l'infâme message :
Failed to auto-start Oracle Net Listener using /ade/vikrkuma_new/oracle/bin/tnslsnr
Il faut aller corriger le script $ORACLE_HOME/bin/dbstart et y ajouter (après la ligne 78) :
# ORACLE_HOME_LISTNER=/ade/vikrkuma_new/oracle
ORACLE_HOME_LISTNER=/home/oracle/oracle/product/10.2.0/db_1
Au prochain "dbstart" le listener démarrera correctement, sacré vikrkuma ! En plus il a signé son méfait.
Après un "bon" lancement la commande "lsnrctl service" nous renvoie la liste tant espérée :
Services Summary...
Service "PLSExtProc" has 1 instance(s).
Instance "PLSExtProc", status UNKNOWN, has 1 handler(s) for this service...
Handler(s):
"DEDICATED" established:0 refused:0
LOCAL SERVER
Service "orcl10g" has 1 instance(s).
Instance "orcl10g", status READY, has 1 handler(s) for this service...
Handler(s):
"DEDICATED" established:0 refused:0 state:ready
LOCAL SERVER
Service "orcl10gXDB" has 1 instance(s).
Instance "orcl10g", status READY, has 1 handler(s) for this service...
Handler(s):
"D000" established:0 refused:0 current:0 max:1022 state:ready
DISPATCHER <machine: com-ora10g.jpp.fr, pid: 16057>
(ADDRESS=(PROTOCOL=tcp)(HOST=com-ora10g.jpp.fr)(PORT=32815))
Service "orcl10g_XPT" has 1 instance(s).
Instance "orcl10g", status READY, has 1 handler(s) for this service...
Handler(s):
"DEDICATED" established:0 refused:0 state:ready
LOCAL SERVER
The command completed successfully
Le système est donc bien "prêt". Voyons voir ce que l'installeur nous a mis comme paramètres mémoire (sur la dbconsole) "Administration --> Memory parameters"
512MO de SGA répartis comme suit :
SGA Component | Current Allocation (MB) |
Shared Pool | 160 |
Buffer Cache | 340 |
Large Pool | 4 |
Java Pool | 4 |
Others | 4 |
et 192MO de PGA, cela sera très large pour nos essais.
Un petit tour dans "Administration --> All initialization parameters" pour voir un peu toute cette configuration "standard", 258 paramètres quand même.
"db_file_multiblock_read_count" est à 16, cela va très bien avec un bloc de 8K.
"db_keep_cache_size" et "db_recycle_cache_size" sont à blanc ce qui nous satiafait.
On cherche le "filesystemio_options" (à blanc par défaut) et lui met "DIRECTIO" juste pour voir.
Pour ce test pas d'archivelog, de flashback et autres complexités.
Au niveau du système je stoppe des services inutiles et modifie le fichier "/etc/inittab" pour démarrer en niveau 3, un serveur de BDD n'a pas besoin d'interface X ! Et cela économise de la mémoire.
Pour finir on reboote pour avoir "tout propre", peu après le démarrage le système occupe quand même #85Mo de mémoire.
Après le lancement de la base et de la dbconsole on est déjà à plus de 700Mo, se connecter à la console fait dépasser les 760Mo après le lancement de quelques opérations : création d'une table historique de #13 Millions de lignes par insertions multiples en modifiant les dates, la mémoire utilisée monte à 1,2G.
La dernière phase : générer 6,5 Millions de lignes en modifiant la date des 6,5 Millions de la table originale est effectuée en 63 secondes. Le tout occupe environ 640Mo sur le disque. L'insertion des mêmes 6,5 millions de rangs fraîchement générés dure #34 secondes, ça marche.
Un index composite (3 champs) est créé en 3' 45", un deuxième en 2' 55"...
Un petit tour dans "Administration --> All initialization parameters" pour voir un peu toute cette configuration "standard", 258 paramètres quand même.
"db_file_multiblock_read_count" est à 16, cela va très bien avec un bloc de 8K.
"db_keep_cache_size" et "db_recycle_cache_size" sont à blanc ce qui nous satiafait.
On cherche le "filesystemio_options" (à blanc par défaut) et lui met "DIRECTIO" juste pour voir.
Pour ce test pas d'archivelog, de flashback et autres complexités.
Au niveau du système je stoppe des services inutiles et modifie le fichier "/etc/inittab" pour démarrer en niveau 3, un serveur de BDD n'a pas besoin d'interface X ! Et cela économise de la mémoire.
Pour finir on reboote pour avoir "tout propre", peu après le démarrage le système occupe quand même #85Mo de mémoire.
Après le lancement de la base et de la dbconsole on est déjà à plus de 700Mo, se connecter à la console fait dépasser les 760Mo après le lancement de quelques opérations : création d'une table historique de #13 Millions de lignes par insertions multiples en modifiant les dates, la mémoire utilisée monte à 1,2G.
La dernière phase : générer 6,5 Millions de lignes en modifiant la date des 6,5 Millions de la table originale est effectuée en 63 secondes. Le tout occupe environ 640Mo sur le disque. L'insertion des mêmes 6,5 millions de rangs fraîchement générés dure #34 secondes, ça marche.
Un index composite (3 champs) est créé en 3' 45", un deuxième en 2' 55"..
Le calcul des statistiques sur cette table :
begin
dbms_stats.gather_schema_stats(ownname => 'test',estimate_percent => 90,
degree => 2);
end
dure #11 minutes.
XEN + Oracle 10G : mini test
XEN + Oracle 10G : mini test jppLe mini test a été réalisé selon la procédure décrite ici.
Remarque :
Cette machine est munie de disques "strippés" à priori deux fois plus rapides que les disques non strippés (voir article sur le stripping).
Calcul de la différence de dates :
select to_char( to_date(min(datec),'YYYYMMDD') - 180,'YYYYMMDD'),
min(datec), max(datec),
to_date(max(datec),'YYYYMMDD') - to_date(min(datec),'YYYYMMDD'),
count(*)
from xen_stat_v2 ;
Génération de la table temporaire :
set timing on
insert into toto
select to_char( to_date(datec,'YYYYMMDD') - DIFFERENTIEL_CALCULE ,'YYYYMMDD') as DATEC,
heurec,serveur,domnom,deltacpu,deltarx,deltatx,cpupct,
nbsecr,nbsecw
from xen_stat_v2;
Insertion des rangs calculés :
insert into xen_statv2 select * from toto
go
Après quelques itérations on arrive au volume voulu :
La table permanente a été mise en "nologging" pendant la durée des insertions et Le volume occupé par la table et ses deux index est d'environ 2200Mo.
Résultats du mini test.
- Test 1 création de deux index :
Index created.
Elapsed: 00:02:12.69
Index created.
Elapsed: 00:01:49.37
Soit un total de #242 secondes ou 5'02 ".
- Test 2 recalcul des statistiques :
set timing on
begin
dbms_stats.gather_table_stats(ownname => 'test',tabname => 'xen_stat_v2', estimate_percent => 100,
degree => 2);
end;
/
PL/SQL procedure successfully completed.
Elapsed: 00:06:14.64
Le calcul dure 6'14".
- Test 3 quelques "select" :
a) select DOMNOM,count(*) from xen_stat_v2 group by DOMNOM order by DOMNOM
go
- passe 1 : Elapsed: 00:00:12.46
- passe 2 : Elapsed: 00:00:08.97
Soit #11 secondes
b) select DOMNOM,count(*) from xen_stat_v2 group by DOMNOM order by DOMNOM
go
- passe 1 : Elapsed: 00:00:10.21
- passe 2 : Elapsed: 00:00:09.76
Soit #10 secondes