Twitter

  • Reminder 1 year ago, #ChaosMonkey app... Let’s see how CxOs will save @SG_InsideIT with the Smile ;)… https://t.co/SgpvGqo1nd

Cluster OpenSVC sur Cloud Gandi

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.

gandi opensvc

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

gandi opensvc

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 :

gandi opensvc

Ne pas oublier de mettre à jour le reverse de l'IP 92.243.14.166 :

gandi opensvc

Préparation des ressources Gandi dédiées au service

Créons un disque de donnée de 1G que l'on appellera flatstapp01 :

gandi opensvc

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 :

gandi opensvc

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 :

gandi opensvc

Tutoriel terminé, plus d'informations via :

Partager


averon

Le 22 novembre 2010

Quel talent ce fmonthel ! bravo pour le partage. a+. Arnaud

1

Florent

Le 22 novembre 2010

@averon : Merci Arnaud ;)

2

Greg

Le 11 décembre 2010

Salut mon Flo,
je vois que toi aussi tu fais des p'tits tutos sympa.
La connaissance ne sert à rien si elle n'est pas partagée ;-)
Well done

3

Commenter