OpenSVC est un nouveau logiciel libre français, qui fournit une solution de haute disponibilité (HA) pour les services critiques.
OpenSVC permet le pilotage de ressources (IP, volume de disques, systèmes de fichiers, synchronisations, lanceurs d’applications) et la reprise de vos services en minimisant le temps d’interruption grâce au mécanisme de bascule automatique entre noeuds.
Quel est le rapport avec Gandi ?
Gandi nous propose un hébergement de serveur sur infrastructure Cloud avec la possibilité d'ajouter des ressources à la demande (IPs, disques, RAM, etc).
Depuis le début octobre, ils ont lancés une API afin de manipuler ces ressources en automatique (XML-RPC).
L'API va nous servir à contrôler l'attribution des ressources de service à tel ou tel noeud.
Cahier des charges
Nous avons besoin de créer un service applicatif qui sera complètement étanche vis à vis du serveur physique.
Ce service pourra donc basculer d'une machine à l'autre sans impact fort côté "client" (migration, cluster, etc).
Nous avons donc besoin :
- d'une adresse IP de service dédiée
- d'un disque dédié de 1Go
- d'un nom de service = flatstapp01.flox-arts.net (fla = trigramme Flox-arts.net; tst comme test; app01 comme nom d'application)
Un service MySQL pourrait s'appeler flaprdsql02.flox-arts.net
Préparation côté OpenSVC
Il faut créer un compte via cette page OpenSVC.
Une fois cette étape faite, il vous faut envoyer un mail à support[@]opensvc.com afin de leur demander d'attacher votre compte à votre nom de domaine.
Pour ma part, mon compte est attaché au nom de domaine flox-arts.net.
De ce fait, tous les services, noeuds que vous allez créer avec votre nom de domaine vont remonter dans le collecteur OpenSVC.
Préparation de la VM Gandi (Cloud)
Pour notre test, une machine 1 part suffit largement. La première étape constitue donc à créer cette VM :
- 1 part Gandi
- Mode expert
- Image Debian 5 - 32 bits
- Un hostname bien défini => ici c'est "athena"
- le reste, c'est selon votre convenance
Ne pas prendre l'image Debian 5 - 64 bits, un bug existe
Pendant la création de la VM je vous invite à mettre à jour votre entrée DNS, ici j'ai fait pointer l'adresse IP 92.243.14.166 avec athena.flox-arts.net :
Ne pas oublier de mettre à jour le reverse de l'IP 92.243.14.166 :
Préparation des ressources Gandi dédiées au service
Créons un disque de donnée de 1G que l'on appellera flatstapp01 :
Il faut également créer une IP dédiée (reverse DNS flatstapp01.flox-arts.net) donc mettre à jour le fichier de zone du domaine flox-arts.net dans mon cas :
Ici j'ai fait pointer l'IP 95.142.170.211 avec flatstapp01.flox-arts.net
Configuration de notre VM Gandi pour OpenSVC
On met à jour notre OS :
apt-get update apt-get upgrade
Clef publique SSH
Je vous conseille de configurer depuis votre poste d'administration l'authentification en root par clef publique pour que ça soit plus commode :
yoshi:~ fmonthel$ ssh root@athena Flox-art.net - Ceci est un systeme prive Seul les utilisateurs possedant un compte ont le droit de s'authentifier Linux athena 2.6.18-xenU #1 SMP Tue Nov 24 18:35:42 CET 2009 i686 The programs included with the Debian GNU/Linux system are free software; the exact distribution terms for each program are described in the individual files in /usr/share/doc/*/copyright. Debian GNU/Linux comes with ABSOLUTELY NO WARRANTY, to the extent permitted by applicable law. athena:~#
Python 2.6
OpenSVC a besoin de Python 2.6 pour fonctionner. Par défaut sur une Debian 5 c'est Python 2.5 qui est installé.
On va ajouter des dépôts dans le fichier /etc/apt/sources.list pour qu'il ressemble à ça :
deb http://mirrors.gandi.net/debian lenny main contrib non-free deb http://mirrors.gandi.net/gandi/debian lenny main deb http://security.debian.org/ lenny/updates main contrib non-free # Apt source for python 2.6 deb http://http.us.debian.org/debian stable main contrib non-free deb http://ftp.uk.debian.org/debian unstable main
On met à jour apt et on installe Python 2.6 :
apt-get update apt-get install python2.6
On repositionne ensuite nos dépôts dans /etc/apt/source.list suivi d'un petit apt-get update :
deb http://mirrors.gandi.net/debian lenny main contrib non-free deb http://mirrors.gandi.net/gandi/debian lenny main deb http://security.debian.org/ lenny/updates main contrib non-free
Mise à l'heure du système
Il est primordial que votre serveur soit à l'heure pour que les remontées dans le collecteur OpenSVC soient correctes :
apt-get install ntpdate ntpdate ntp.gandi.net
Mise à jour de la timezone dans le fichier /etc/timezone :
Europe/Paris
On peut automatiser la mise à jour régulière de l'heure du système en crontab par exemple (etc/crontab)
Installation d'OpenSVC sur notre VM Gandi
Vous pouvez suivre la documentation officielle, je détaille ci-dessous l'essentiel pour une VM Gandi.
On télécharge et installe le dernier repository OpenSVC :
cd /tmp wget http://repo.opensvc.com/deb/opensvc-1.0-101008.1159.noarch.deb dpkg -i opensvc-1.0-101008.1159.noarch.deb
Voilà OpenSVC est installé dans le répertoire /opt/opensvc.
Configuration d'OpenSVC sur notre VM Gandi
Il faut définir le type de serveur que nous avons installé.
Un serveur peut être enregistré comme noeud PRD ou DEV, ici nous choisirons DEV (fichier /opt/opensvc/var/host_mode) :
athena:/tmp# more /opt/opensvc/var/host_mode DEV
Afin que la remontée d'information dans le collecteur OpenSVC se passe bien, il faut que le nom generic dbopensvc pointe vers collector.opensvc.com.
On ajoute donc cette entrée dans le fichier /etc/hosts :
# Collecteur OpenSVC 188.165.36.82 collector.opensvc.com dbopensvc
OpenSVC a besoin que la commande hostname retourne le FQDN (afin de lier votre serveur à votre compte OpenSVC).
Pratique, Gandi propose cette option dans le fichier /etc/default/gandi :
athena:~# more /etc/default/gandi | grep HOSTNAME HOSTNAME_TYPE=full athena:~# reboot
Le hostname sera le reverse DNS de l'interface VM (eth0)
Création du service OpenSVC sur notre VM Gandi
On est prêt à créer notre service flatstapp01.flox-arts.net, vous pouvez suivre la documentation officielle.
On se place dans le répertoire de configuration des services :
cd /opt/opensvc/etc
Ce lien symbolique permet de passer toutes les commandes relatives au service :
ln -s ../bin/svcmgr flatstapp01.flox-arts.net
Ce lien symbolique est essentiel pour démarrer les applications de notre service :
ln -s /srv/flatstapp01/etc/init.d flatstapp01.flox-arts.net.d
On va créer le fichier de configuration /opt/opensvc/etc/flatstapp01.flox-arts.net.env :
[default] app = FLA comment = FLA APP TST service mode = hosted service_type = TST nodes = athena.flox-arts.net autostart_node = athena.flox-arts.net [ip#1] ipname = flatstapp01.flox-arts.net ipdev = eth1 pre_start = /opt/opensvc/extern/ip-action.py --action attach --ip 95.142.170.211 pre_stop = /opt/opensvc/extern/ip-action.py --action detach --ip 95.142.170.211 [fs#1] dev = /dev/xvdb mnt = /srv/flatstapp01 type = ext3 pre_start = /opt/opensvc/extern/disk-action.py --action attach --disk flatstapp01 pre_stop = /opt/opensvc/extern/disk-action.py --action detach --disk flatstapp01
Il faut bien sûr l'adapter à votre configuration (IP, FS, etc)
Comme vous pouvez le remarquer on utilise les options pre_start et pre_stop de la section IP et FS pour exécuter un script python.
Ces scripts s'occupent d'attacher ou détacher les ressources du service via l'API Gandi :
cd /tmp wget http://download.flox-arts.net/opensvc-gandi.tar.gz tar -xvzf opensvc-gandi.tar.gz mv opensvc-gandi /opt/opensvc/extern chmod -R 700 /opt/opensvc/extern
Il vous faut éditer les 2 scripts python pour y renseigner votre clef API Gandi (ligne 35)
Bouquet final, le démarrage de notre service OpenSVC
Voilà votre "enveloppe" de service est prête, vous pouvez suivre ces quelques "best practices" :
- /srv/flatstapp01/data => stockage des données de votre service (datafiles MySQL par exemple)
- /srv/flatstapp01/tools => binaires des applications de votre services (binaire MySQL par exemple)
- /srv/flatstapp01/etc/init.d => scripts de démarrage/arrêt des applications de votre service (SysV style)
Allez on démarre notre service minime (IP + FS) :
athena:/# /opt/opensvc/etc/flatstapp01.flox-arts.net start 2010-11-21 19:35:26,838 - FLATSTAPP01.FLOX-ARTS.NET.IP#1 - INFO - /opt/opensvc/extern/ip-action.py --action attach --ip 95.142.170.211 2010-11-21 19:35:51,738 - FLATSTAPP01.FLOX-ARTS.NET.IP#1 - INFO - 95.142.170.211 is already up on eth1 2010-11-21 19:35:51,751 - FLATSTAPP01.FLOX-ARTS.NET.FS#1 - INFO - /opt/opensvc/extern/disk-action.py --action attach --disk flatstapp01 2010-11-21 19:36:31,335 - FLATSTAPP01.FLOX-ARTS.NET.FS#1 - INFO - fs(/dev/xvdb /srv/flatstapp01) is already mounted
On vérifie le statut :
athena:/# /opt/opensvc/etc/flatstapp01.flox-arts.net print_status rid status label --- ------ ----- fs#1 up /dev/xvdb@/srv/flatstapp01 ip#1 up flatstapp01.flox-arts.net@eth1 sync#i0 n/a rsync svc config to drpnodes, nodes # no destination nodes sync#i1 n/a rsync system files to drpnodes # no destination nodes app n/a app # no startup script overall up
Et on vérifie que ça remonte bien via le collecteur OpenSVC :
Tutoriel terminé, plus d'informations via :
- OpenSVC via http://www.opensvc.com
- Gandi hébergement via http://www.gandi.net/hebergement
Quel talent ce fmonthel ! bravo pour le partage. a+. Arnaud