Magazine

VServer : une mise en place sous Debian

Publié le 11 mai 2007 par Olivier Duval

La virtualisation est de plus en plus utilisée et le sera d’autant plus dans les années à venir, et cela pour plusieurs raisons :

  • économie de matériels (serveurs physiques), et donc de place : au lieu d’acheter 10 serveurs physiques à héberger, on se retrouve à placer dans la baie (et le coût n’est pas négligeable…) qu’un seul serveur physique avec 10 serveurs virtuels (VMWare, VServer, ...).
  • cloisonnement des serveurs : on peut architecturer de façon un peu plus propre et pérenne son parc : serveur par type de services, on pensera par type de services à : PHP (voire n serveurs / versions), Rails, passerelle SMTP, SGBDR, ... chaque serveur est spécialisé. L’administrateur sait alors précisément les versions et les modules qui tournent sur ces serveurs, leurs mises à jour, gestion, et sauvegardes s’en trouve simplifiées.
  • accès : ce cloisonnement permet aussi l’accès de la part de tiers qui souhaiteraient avoir toute la main sur leur serveur : imaginons un LAMP sur lequel on donnerait l’accès root à un client, celui-ci ne voit que SON serveur et rien d’autre.

Pour ces raisons, j’ai mis en place des serveurs virtuels sous VServer, peu consommateur en ressources. Chaque serveur utilise le même noyau, et les mêmes ressources que le serveur maître (host), mais on peut limiter pour chaque serveur virtuel (guest) les ressources allouées.

Environnement

Le cas décrit se base sur les spécifications suivantes (host) :

  • Debian Etch
  • version 2.6.20(.4) du noyau (2.6.20.11 à l’heure où j’écris ce billet)
  • patch 2.2.0 de vserver disponible en page d’accueil
root@nestor:~# uname -a
Linux nestor 2.6.20.4-vs2.2.0-vs #1 Thu Apr 12 07:39:33 CEST 2007 i686 GNU/Linux

Nous aurons besoin des utilitaires vserver (vserver, vapt-get, vserver-stat, ...):

$ apt-get install util-vserver

Compilation et installation du noyau patché

Télécharger les sources 2.6.20 (ou pour la dernière version prendre le bz2 qui convient au patch vserver). Télécharger le patch vserver (ou la version appropriée à votre noyau).

$ wget http://www.kernel.org/pub/linux/kernel/v2.6/linux-2.6.20.4.tar.bz2
$ wget http://ftp.linux-vserver.org/pub/kernel/vs2.2/patch-2.6.20.4-vs2.2.0.diff

Mettre les sources dans /usr/src et les patcher :

$ bzip2 -cd linux-2.6.20.4.tar.bz2 | tar xvf - 
$ cp patch-2.6.20.11-vs2.2.0.diff linux-2.6.20.4
$ cd linux-2.6.20.4
$ patch -p1 < patch-2.6.20.4-vs2.2.0.diff

On prend une configuration et on l’adapte pour la prise en compte du VServer :

$ cp /boot/config- /usr/src/linux-2.6.20.4/.config
$ make menuconfig

La dernière commande permet de configurer votre noyau selon vos besoins. Il faut au moins activer la configuration VServer. Ma configuration de ce fichier :


#
# Linux VServer
#
# CONFIG_VSERVER_LEGACY is not set
CONFIG_VSERVER_LEGACYNET=y
CONFIG_VSERVER_REMAP_SADDR=y
CONFIG_VSERVER_COWBL=y
# CONFIG_VSERVER_VTIME is not set
CONFIG_VSERVER_PROC_SECURE=y
CONFIG_VSERVER_HARDCPU=y
CONFIG_VSERVER_IDLETIME=y
# CONFIG_VSERVER_IDLELIMIT is not set
# CONFIG_TAGGING_NONE is not set
# CONFIG_TAGGING_UID16 is not set
# CONFIG_TAGGING_GID16 is not set
CONFIG_TAGGING_ID24=y
# CONFIG_TAGGING_INTERN is not set
# CONFIG_TAG_NFSD is not set
# CONFIG_PROPAGATE is not set
CONFIG_VSERVER_PRIVACY=y
CONFIG_VSERVER_CONTEXTS=256
CONFIG_VSERVER_WARN=y
# CONFIG_VSERVER_DEBUG is not set
CONFIG_VSERVER=y

Compiler (méthode Debian) et installer le package :

$ make-kpkg clean
$ fakeroot make-kpkg --append_to_version -vs --initrd --revision=vserver.01 kernel_image modules_image
$ dpkg -i linux-image-2.6.20.4*.deb

puis rebooter…

$ shutdown -r now

Création d’un serveur virtuel (guest)

A ce stade, votre noyau contient le module VServer, nous pouvons dès lors créer notre 1er vserver. Les serveurs seront installés sur /var/lib/vservers. On pourra penser à l’utilisation de LVM pour la création d’une partition logique par vserver. Cela permet de faciliter la maintenance : ajout d’espace disque simplifié, séparation de la partition vserver du host, ...on en parlera lors d’un prochain billet.

Une commande suffit, on peut aussi exclure certains packages à ne pas installer lors de la préparation du gest. Création d’un guest nommé nestor-wiki, avec l’IP 192.168.1.180, le n° du context doit être unique :

  $ REMOVE_PACKAGES="sparc-utils,dhcp-client,lilo,makedev,pcmcia-cs,ppp,pppconfig,pppoe,pppoeconf,setserial,\
  syslinux,fdutils,libpcap0,iptables,pciutils" 
  $ vserver nestor-wiki build -m debootstrap --context 49800 --hostname nestor-wiki --interface eth0:192.168.1.180/32 --force -- -d etch -- --exclude=$REMOVE_PACKAGES
I: Retrieving Release
I: Retrieving Packages
I: Validating Packages
I: Resolving dependencies of required packages...
I: Resolving dependencies of base packages...
I: Checking component main on http://ftp.debian.org/debian...
I: Retrieving adduser
I: Validating adduser
I: Retrieving apt
...  
I: Base system installed successfully.

Le système a été installé dans /var/lib/vservers/nestor-wiki.

Exécution et configuration de base

Il reste maintenant à exécuter le vserver, à y installer au moins ssh pour l’accès, ainsi que vos services qui répondent à vos besoins.

$ vserver nestor-wiki start
$ vserver-stat
49800    2   3.8M   1.4M   0m00s00   0m00s00   0m22s11 nestor-wiki

On copie les sources apt-get du host sur le vserver : cp /etc/apt/sources.list /var/lib/vservers/nestor-wiki/etc/apt/ Soit on entre dans le contexte du vserver pour une mise à jour et y installer ssh et sudo, soit on utilise vapt-get (mais à ce stade, on préférera la 1ère méthode) :

  • par vserver, on entre sur le guest :
$ vserver nestor-wiki enter
$ apt-get update
$ apt-get upgrade
$ apt-get install ssh
$ apt-get install sudo
$ adduser zorky
$ visudo => ajouter zorky
$ exit
  • par vapt-get (à partir du host):
$ vapt-get nestor-wiki -- update
$ vapt-get nestor-wiki -- upgrade
$ vapt-get nestor-wiki -- install ssh
$ vapt-get nestor-wiki -- install sudo
$ vserver nestor-wiki enter
$ adduser zorky
$ visudo => ajouter zorky

ça y est, vous pouvez dès lors utiliser votre client ssh préféré pour vous logguer sur votre nouveau vserver : putty sous windows, ssh sous linux.

On vérifie les IPs utilisées.

 root@nestor:~# ip addr
1: lo: <LOOPBACK,UP,10000> mtu 16436 qdisc noqueue
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
    inet 127.0.0.1/8 scope host lo
    inet6 ::1/128 scope host
       valid_lft forever preferred_lft forever
2: eth0: <BROADCAST,MULTICAST,UP,10000> mtu 1500 qdisc pfifo_fast qlen 1000
    link/ether 00:0f:3d:f8:a7:73 brd ff:ff:ff:ff:ff:ff
    inet 192.168.1.104/24 brd 192.168.1.255 scope global eth0
    inet 192.168.1.170/32 scope global eth0
    inet 192.168.1.150/32 scope global eth0
    inet 192.168.1.160/32 scope global eth0
    inet 192.168.1.140/32 scope global eth0
    inet6 fe80::20f:3dff:fef8:a773/64 scope link
       valid_lft forever preferred_lft forever

Utilitaires

  • Connaître le statut des serveurs :
 root@nestor:~$ vserver-stat
CTX   PROC    VSZ    RSS  userTIME   sysTIME    UPTIME NAME
0       70 300.9M    81M   3h10m56  24m03s81  25d22h25 root server
20       9 161.6M 118.1M  10m21s23   1m28s19  25d18h20 nestor-rails
60      16 206.5M  71.1M   6m22s87   1m10s88  25d18h20 nestor-php
70      12 139.6M  43.9M   1m09s60   0m28s40  25d18h20 nestor-sympa
49700    8  90.5M  38.7M   4m25s27   1m20s93  25d18h20 nestor-mysql
  • apt-get sur un ou l’ensemble des serveurs, cela peut s’avérer pratique pour les mises à jour sécurité par exemple :
 $ vapt-get --all -- update
 vapt-get: operating on vserver nestor-mysql
Lecture des listes de paquets... Fait
Construction de l'arbre des dépendances... Fait..
 $ vapt-get --all -- upgrade
  • un top global qui permet d’afficher l’ensemble des processus de tous les serveurs (host et guests) :
 $ vtop
 top - 18:47:13 up 25 days, 22:29,  3 users,  load average: 1.75, 1.08, 0.46
Tasks: 117 total,   2 running, 115 sleeping,   0 stopped,   0 zombie
Cpu(s): 93.3%us,  6.0%sy,  0.0%ni,  0.0%id,  0.7%wa,  0.0%hi,  0.0%si,  0.0%st

  PID USER      PR  NI  VIRT  RES  SHR S %CPU %MEM    TIME+  COMMAND
10954 www-data  15   0 51380  38m 2292 S  0.0 10.2   1:33.04 mongrel_rails
10957 www-data  15   0 50996  38m 2292 S  0.0 10.1   1:12.22 mongrel_rails
10951 www-data  15   0 50944  38m 2280 S  0.0 10.1   1:11.03 mongrel_rails
 9516 identd    18   0 78240  34m 5076 S  0.0  9.2   5:29.84 mysqld
31726 sympa     17   0 35736  31m 2680 S  0.0  8.2   0:02.85 wwsympa.fcgi
  337 www-data  21   0 18328 6680 4028 S  0.0  1.7   0:41.14 apache2
  340 www-data  15   0 18320 6572 3924 S  0.0  1.7   0:27.31 apache2
  458 www-data  15   0 18276 6512 3944 S  0.0  1.7   0:28.01 apache2
 1209 www-data  15   0 18340 6512 3928 S  0.0  1.7   0:20.88 apache2
  336 www-data  18   0 18284 6484 3908 S  0.0  1.7   0:26.89 apache2
 4603 www-data  15   0 18336 6456 3796 S  0.0  1.7   0:21.96 apache2
  339 www-data  15   0 18276 6404 3832 S  0.0  1.7   0:22.79 apache2
11082 www-data  15   0 18284 6256 3712 S  0.0  1.6   0:02.87 apache2
  • vps pour afficher l’ensemble des processus, par serveurs :

    $ vps xau

  • vkill pour tuer un processus d’un vserver

Contexts

Lors du chargement du vserver, il inscrit dans /var/run/vservers sous forme de fichiers les serveurs qui sont lancés, avec le n° du context sur lequel le vserver est lancé.


 $ ls /var/run/vservers 
 total 16
-rw-r--r-- 1 root root 6 2007-04-12 23:21 nestor-mysql
-rw-r--r-- 1 root root 3 2007-04-12 23:21 nestor-php
-rw-r--r-- 1 root root 3 2007-04-12 23:21 nestor-rails
-rw-r--r-- 1 root root 3 2007-04-12 23:21 nestor-sympa

 $  cat /var/run/vservers/nestor-mysql
49700

S’il s’avérait qu’un problème se passe (reboot involontaire du host, ...), il suffit de supprimer un des fichiers pour résoudre le défaut de lancement du vserver si celui-ci ne se lançait pas le cas échéant.


Retour à La Une de Logo Paperblog

A propos de l’auteur


Olivier Duval 4 partages Voir son profil
Voir son blog

l'auteur n'a pas encore renseigné son compte l'auteur n'a pas encore renseigné son compte