Categories
Computing

Installation et configuration d’un cluster Pacemaker/CoroSync sous GNU/Linux Debian 6 (Squeeze)

Installation et pré-configuration de CoroSync

remarque: les actions suivantes sont à réaliser sur les deux noeuds.

Installer les paquets nécessaires :

# aptitude install corosync pacemaker

Autoriser le démarrage de CoroSync :

# sed -i 's/START=no/START=yes/' /etc/default/corosync

Sauvegarder la configuration par défaut de CoroSync :

# cp /etc/corosync/corosync.conf /etc/corosync/corosync.conf.original

Modifier le fichier hosts :

# sed -i 's/^10.20.*$/10.20.30.1\tvm-debian1.france.local\tvm-debian1\n10.20.30.2\tvm-debian2.france.local\tvm-debian2/' /etc/hosts

Générer une paire de clés RSA pour SSH (sans mot de passe) :

# ssh-keygen -b 2048

Copier la clé publique sur le second noeud :

# if hostname | grep -q 1; then ssh-copy-id $(hostname | sed 's/1/2/'); else ssh-copy-id $(hostname | sed 's/2/1/'); fi

remarque: les actions suivantes sont à réaliser sur le premier noeud.

Générer des I/O :

# dd if=/dev/urandom of=/tmp/temp bs=1024 count=1000000&

En parallèle, générer une clé pour Corosync :

# corosync-keygen

Supprimer le fichier temporaire précédemment créé :

# rm /tmp/temp

Copier la clé précédemment générée sur le second noeud :

# scp /etc/corosync/authkey sfrafilx02:/etc/corosync/authkey

remarque: les actions suivantes sont à réaliser sur les deux noeuds.

Modifier le fichier de configuration de Corosync

# vim /etc/corosync/corosync.conf
# Please read the openais.conf.5 manual page

totem {
        version: 2

        # How long before declaring a token lost (ms)
        token: 3000

        # How many token retransmits before forming a new configuration
        token_retransmits_before_loss_const: 10

        # How long to wait for join messages in the membership protocol (ms)
        join: 60

        # How long to wait for consensus to be achieved before starting a new round of membership configuration (ms)
        consensus: 3600

        # Turn off the virtual synchrony filter
        vsftype: none

        # Number of messages that may be sent by one processor on receipt of the token
        max_messages: 20

        # Limit generated nodeids to 31-bits (positive signed integers)
        clear_node_high_bit: yes

        # Disable encryption
        secauth: off

        # How many threads to use for encryption/decryption
        threads: 0

        # Optionally assign a fixed node id (integer)
        # nodeid: 1234

        # This specifies the mode of redundant ring, which may be none, active, or passive.
        rrp_mode: none

        interface {
                # The following values need to be set based on your environment
                ringnumber: 0
                bindnetaddr: 10.20.30.1
                mcastaddr: 226.94.1.1
                mcastport: 5405
        }
}

amf {
        mode: disabled
}

service {
        # Load the Pacemaker Cluster Resource Manager
        ver:       0
        name:      pacemaker
        use_mgmtd: 1
}

aisexec {
        user:   root
        group:  root
}

logging {
        fileline: off
        to_stderr: yes
        to_logfile: yes
        logfile: /var/log/corosync.log
        logfile_priority: info
        to_syslog: no
        syslog_facility: daemon
        debug: off
        timestamp: on
        logger_subsys {
                subsys: AMF
                debug: off
                tags: enter|leave|trace1|trace2|trace3|trace4|trace6
        }
}

Démarrer CoroSync :

# /etc/init.d/corosync start

Vérifier l’état du cluster :

# crm_mon -1

Préparation des agents pour l’Open Cluster Framework (OCF)

Ajouter un agent OCF HTTPCheck :

# mkdir /usr/lib/ocf/resource.d/myscripts
# vim /usr/lib/ocf/resource.d/myscripts/HTTPCheck
#!/bin/sh
#
#
#       HTTPCheck OCF RA. It checks the accessibility of a Web resource.
#
# Copyright (c) 2004 SUSE LINUX AG, Lars Marowsky-Bré
#                    All Rights Reserved.
#
# This program is free software; you can redistribute it and/or modify
# it under the terms of version 2 of the GNU General Public License as
# published by the Free Software Foundation.
#
# This program is distributed in the hope that it would be useful, but
# WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
#
# Further, this software is distributed without any warranty that it is
# free of the rightful claim of any third person regarding infringement
# or the like.  Any license provided herein, whether implied or
# otherwise, applies only to this software file.  Patent licenses, if
# any, provided herein do not apply to combinations of this program with
# other software, or any other product whatsoever.
#
# You should have received a copy of the GNU General Public License
# along with this program; if not, write the Free Software Foundation,
# Inc., 59 Temple Place - Suite 330, Boston MA 02111-1307, USA.
#
#######################################################################
# OCF parameters:
#   OCF_RESKEY_url    : Web resource URL
#
#######################################################################
# Initialization:

. ${OCF_ROOT}/resource.d/heartbeat/.ocf-shellfuncs

#######################################################################

meta_data() {
        cat <<END
<?xml version="1.0"?>
<!DOCTYPE resource-agent SYSTEM "ra-api-1.dtd">
<resource-agent name="HTTPCheck" version="0.9">
<version>1.0</version>

<longdesc lang="en">
This is HTTPCheck Resource Agent.
It checks the accessibility of a Web resource using wget binary.
Remember that you can configure wget options through /etc/wgetrc
configuration file.
</longdesc>
<shortdesc lang="en">HTTPCheck resource agent</shortdesc>

<parameters>

<parameter name="url" unique="0" required="1">
<longdesc lang="en">
This is a required parameter. This parameter specifies the Web resource to check.
</longdesc>
<shortdesc lang="en">Web resource</shortdesc>
<content type="string" default="www.debian.org" />
</parameter>

<parameter name="state" unique="1">
<longdesc lang="en">
Location to store the resource state in.
</longdesc>
<shortdesc lang="en">State file</shortdesc>
<content type="string" default="${HA_VARRUN}/OCF-{OCF_RESOURCE_INSTANCE}.state" />
</parameter>

</parameters>

<actions>
<action name="start"        timeout="15" />
<action name="stop"         timeout="15" />
<action name="monitor"      timeout="15" interval="10" depth="0" start-delay="0" />
<action name="meta-data"    timeout="5" />
<action name="validate-all"   timeout="30" />
</actions>
</resource-agent>
END
}

#######################################################################

httpcheck_usage() {
        cat <<END
usage: $0 {start|stop|monitor|validate-all|meta-data}

Expects to have a fully populated OCF RA-compliant environment set.
END
}

httpcheck_start() {
    httpcheck_monitor
    if [ $? =  $OCF_SUCCESS ]; then
        return $OCF_SUCCESS
    fi
    /usr/bin/wget -q -t 1 -T 4 --no-dns-cache --no-cache -4 -O ${OCF_RESKEY_state} $OCF_RESKEY_url
}

httpcheck_stop() {
    httpcheck_monitor
    if [ $? != $OCF_NOT_RUNNING ]; then
        rm ${OCF_RESKEY_state}
    fi
    return $OCF_SUCCESS
}

httpcheck_monitor() {
    # Monitor _MUST!_ differentiate correctly between running
    # (SUCCESS), failed (ERROR) or _cleanly_ stopped (NOT RUNNING).
    # That is THREE states, not just yes/no.

    if [ ! -f ${OCF_RESKEY_state} ]; then
        return $OCF_NOT_RUNNING
    else
        if /usr/bin/wget -q -t 1 -T 4 --no-dns-cache --no-cache -4 -O ${OCF_RESKEY_state} $OCF_RESKEY_url; then
            return $OCF_SUCCESS
        else
            return $OCF_ERR_GENERIC
        fi
    fi
}

httpcheck_validate() {

    # Is the state directory writable?
    state_dir=`dirname "$OCF_RESKEY_state"`
    touch "$state_dir/$$"
    if [ $? != 0 ]; then
        return $OCF_ERR_ARGS
    fi
    rm "$state_dir/$$"

    return $OCF_SUCCESS
}

: ${OCF_RESKEY_CRM_meta_interval=0}
: ${OCF_RESKEY_CRM_meta_globally_unique:="true"}

if [ "x$OCF_RESKEY_state" = "x" ]; then
    if [ ${OCF_RESKEY_CRM_meta_globally_unique} = "false" ]; then
        state="${HA_VARRUN}/OCF-${OCF_RESOURCE_INSTANCE}.state"

        # Strip off the trailing clone marker
        OCF_RESKEY_state=`echo $state | sed s/:[0-9][0-9]*\.state/.state/`
    else
        OCF_RESKEY_state="${HA_VARRUN}/OCF-${OCF_RESOURCE_INSTANCE}.state"
    fi
fi

if [ "x$OCF_RESKEY_url" = "x" ]; then
    OCF_RESKEY_url="www.debian.org"
fi

case $__OCF_ACTION in
meta-data)      meta_data;;
start)          httpcheck_start;;
stop)           httpcheck_stop;;
monitor)        httpcheck_monitor;;
validate-all)   httpcheck_validate;;
usage|help)     httpcheck_usage
                exit $OCF_SUCCESS
                ;;
*)              httpcheck_usage
                exit $OCF_ERR_UNIMPLEMENTED
                ;;
esac
rc=$?
ocf_log debug "${OCF_RESOURCE_INSTANCE} $__OCF_ACTION : $rc"
exit $rc
# chmod +x /usr/lib/ocf/resource.d/myscripts/HTTPCheck

Corriger l’agent OCF Squid :

# cp /usr/lib/ocf/resource.d/heartbeat/Squid /usr/lib/ocf/resource.d/heartbeat/Squid.original
# vim /usr/lib/ocf/resource.d/heartbeat/Squid
  ligne 198 : awk '/(tcp.*[0-9]+\.[0-9]+\.+[0-9]+\.[0-9]+:'$SQUID_PORT' |tcp.*:::'$SQUID_PORT' )/{

Configuration du cluster Pacemaker (CRM)

remarque: les actions suivantes sont à réaliser sur le premier noeud. Configurer les ressources du cluster :

# crm configure property stonith-enabled=false
# crm configure property no-quorum-policy=ignore
# crm configure rsc_defaults resource-stickiness=100
# crm configure primitive ClusterIP ocf:heartbeat:IPaddr2 \
      params ip=10.20.30.3 cidr_netmask=24 \
      op monitor interval=30
# crm configure primitive Proxy ocf:heartbeat:Squid \
      params squid_exe="/usr/sbin/squid3" squid_conf="/etc/squid3/squid.conf" squid_pidfile="/var/run/squid3.pid" squid_port="3128" squid_stop_timeout="30" \
      op start interval="0" timeout="60s" \
      op stop interval="0" timeout="120s" \
      op monitor interval="20s" timeout="30s"
# crm configure primitive HTTPCheck ocf:myscripts:HTTPCheck \
      params url="kb.france.local" \
      op monitor interval="120s"
# crm configure primitive WebSite lsb:apache2 op monitor interval="60sec"
# crm configure location proxy-prefer-node1 Proxy 50: vm-debian1
# crm configure location website-prefer-node1 WebSite 50: vm-debian1
# crm configure colocation proxy-with-clusterip inf: Proxy ClusterIP
# crm configure colocation website-with-clusterip inf: WebSite ClusterIP
# crm configure colocation httpcheck-with-proxy inf: HTTPCheck Proxy
# crm configure order apache-after-clusterip inf: ClusterIP WebSite
# crm configure order squid-after-clusterip inf: ClusterIP Proxy
# crm configure order httpcheck-after-proxy inf: Proxy HTTPCheck
Categories
Computing

GNU/Linux Debian (testing) : Nagios (3.2.1) / Centreon (2.1.9)

Sur le futur serveur Nagios/Centreon

Installation de Nagios 3

Installez Nagios 3 :

# apt-get install nagios3

Remarque : il vous sera demandé d’initialiser le mot de passe de l’utilisateur nagiosadmin (compte d’administration par défaut au niveau de l’interface Web)
Vous pouvez d’ores et déjà accéder à l’interface Web de Nagios3 via l’URL http://<@IP_serveur_nagios>/nagios3/

Installation des prérequis pour Centreon

# apt-get install build-essential

Installez le serveur Web Apache2, le language de scripts PHP 5 ainsi que les modules associés :

# apt-get install apache2 php5 php5-mysql php-pear php5-ldap php5-snmp php5-snmp php5-gd

Installez le SGBD MySQL ainsi que des librairies de développement :

# apt-get install mysql-server libmysqlclient-dev

Remarque : il vous sera demandé d’initialiser le mot de passe du superutilisateur (root) de votre SGBD (MySQL). Installez l’outil Round Robin Database ainsi que l’interface Perl pour ce même outil :

# apt-get install rrdtool librrds-perl

Installez le module Config::IniFiles pour Perl :

# apt-get install libconfig-inifiles-perl

Installez le client ainsi que l’agent SNMP, et le module Perl Net::SNMP :

# apt-get install snmp snmpd libnet-snmp-perl

Installez différentes librairies graphiques :

# apt-get install libgd2-xpm libgd2-xpm-dev libpng12-dev

Installation de l’addon NDOUtils

Etant sous Debian GNU/Linux Squeeze, l’extension Nagios Data Output Utils n’est pas packagée. Pour y remédier, ajoutez le dépôt Unstable :

# echo "deb http://ftp.fr.debian.org/debian/ unstable main contrib non-free" >> /etc/apt/sources.list

Ayant à présent des dépôts pour testing et unstable, indiquez votre distribution par défaut (testing) :

# echo "APT::Default-Release \"testing\";" >> /etc/apt/apt.conf

Récupérez la liste des paquets mis à votre dispositions (testing/unstable) :

# apt-get update

Installez l’extention NDOUtils :

# apt-get install ndoutils-nagios3-mysql

Installation de Centreon 2

Récupérez les sources de Centreon 2.1.9 :

# cd /usr/local/src
# wget http://download.centreon.com/index.php?id=143

Décompressez l’archive précédemment téléchargée et lancez le processus d’installation de Centreon (à l’aide d’un template) :

# tar zxvf centreon-2.1.9.tar.gz
# cd centreon-2.1.9
# ./install.sh -f tmpl/vardistrib/debian-lenny

Remarque : le déroulement du script d’installation de Centreon est indiqué dans le fichier texte associé. Rendez-vous sur l’interface Web de votre serveur Centreon, http://<@IP_serveur_nagios>/centreon/, afin de finaliser l’installation.

Sur le client à superviser

Installation de NRPE Server

Installez le serveur Nagios Remote Plugin Executor :

# apt-get install nagios-nrpe-server

Sauvegardez le fichier de configuration d’origine puis éditez-le :

# cp /etc/nagios/nrpe.cfg /etc/nagios/nrpe.cfg.original
# vim /etc/nagios/nrpe.cfg
	log_facility=daemon
	pid_file=/var/run/nagios/nrpe.pid
	server_port=5666
	nrpe_user=nagios
	nrpe_group=nagios
	allowed_hosts=127.0.0.1,11.22.33.2
	dont_blame_nrpe=0
	debug=0
	command_timeout=60
	connection_timeout=300
	command[check_users]=/usr/lib/nagios/plugins/check_users -w 5 -c 10
	command[check_load]=/usr/lib/nagios/plugins/check_load -w 15,10,5 -c 30,25,20
	command[check_sda1]=/usr/lib/nagios/plugins/check_disk -w 20% -c 10% -p /dev/sda1
	command[check_zombie_procs]=/usr/lib/nagios/plugins/check_procs -w 5 -c 10 -s Z
	command[check_total_procs]=/usr/lib/nagios/plugins/check_procs -w 150 -c 200
	include=/etc/nagios/nrpe_local.cfg
	include_dir=/etc/nagios/nrpe.d/

Redémarrez finalement le serveur NRPE afin de prendre en compte vos modifications :

# /etc/init.d/nagios-nrpe-server restart

La suite très prochainement…

Categories
Computing

Installation des VMWare Tools sous GNU/Linux Debian

Tout d’abord, installez les prérequis, à savoir un compilateur C, un outil d’aide à la compilation et le fichiers d’en-tête de votre noyau :

$ sudo apt-get install gcc make linux-headers-$(uname -r) 

Dans l’interface du client VMware (ici VMWare Workstation 7.0.1), déroulez le menu VM pour la machine virtuelle en cours d’exécution puis cliquez sur Install VMware Tools. Cela va vous permettre de monter le CDROM contenant les VMware Tools et, bien évidement, de les installer. Remarque : il est préférable d’ouvrir un Shell local dans la mesure où nous risquons de perdre toute connectivité lors de la mise à jour du module des interfaces Ethernet.

$ sudo mount /dev/cdrom /media/cdrom0 
$ tar zxvf /media/cdrom/VMwareTools-8.1.4-227600.tar.gz -C ~ 
$ sudo ~/vmware-tools-distrib/vmware-install.pl 

Répondez alors aux questions posées (les réponses par défaut étant le plus souvent le choix à retenir). Ne reste plus démonter les interfaces Ethernet, décharger les modules pcnet32 et l’ancien vmxnet (dans le cas d’une ancienne installation des VMware Tools), charger le module vmxnet issu de précédente installation, puis remonter les interfaces Ethernet :

$ sudo /etc/init.d/networking stop 
$ sudo rmmod pcnet32 
$ sudo rmmod vmxnet 
$ sudo modprobe vmxnet 
$ sudo /etc/init.d/networking start 

Afin de pouvoir utiliser des interfaces de type VMware VMXNET Ethernet Controller (recommandé par VMWare) au prochain redémarrage, il vous suffit d’ajouter la ligne suivante dans le fichier de configuration de la machine virtuelle (<vm_name>.vmx) : ethernet0.virtualDev = “vmxnet” Remarque : si vous avez plusieurs interfaces, il vous suffit d’ajouter cette ligne plusieurs fois en incrémentant l’id de l’interface (ethernet0, ethernet1, …, ethernetn).

Categories
Computing

Support du suivi de connexion pour IP Virtual Server

Voici la démarche à suivre pour un système sous GNU/Linux Debian avec le noyau 2.6.32 :

  • Ajoutez votre utilisateur dans le groupe src afin de pouvoir travailler dans le répertoire /usr/src :
$ sudo n3oxid src
  • Installez les paquets nécessaires pour la compilation de votre noyau :
$ sudo apt-get install linux-source-2.6.32 \
  kernel-package libncurses5-dev gcc make binutils \
  zlibc zlib1g-dev build-essential
  • Rendez-vous dans le répertoire où se trouve les sources de votre noyau :
$ cd /usr/src
  • Récupérez le patch NFCT correpondant aux sources de votre noyau :
$ wget http://www.ssi.bg/~ja/nfct/ipvs-nfct-2.6.32-1.diff
  • Décompressez les sources de votre noyau, faites un lien symbolique vers le répertoire contenant les sources et rentrer dans le répertoire en question :
$ tar jxvf linux-source-2.6.32.tar.bz2
$ ln –s linux-source-2.6.32 linux
$ cd linux
  • Appliquer le patch NFCT à vos sources :
$ cat ../ipvs-nfct-2.6.32-1.diff | patch –p1
  • Récupérer la configuration actuelle de votre noyau :
$ cp /boot/config-2.6.32-3-686 .config
  • Configurer les sources de votre noyau :
$ make menuconfig
  • Nettoyer de façon préventive les sources de votre noyau :
$ make-kpkg clean
  • Lancez la compilation :
$ make-kpkg --rootcmd fakeroot --initrd \
  --append-to-version=.perso.`date +%Y%m%d` \
  --revision=1.0 kernel-image kernel_headers
  • Installez votre noyau :
$ sudo dpkg -i ../linux-image-2.6.32.csat.20100427_1.1_i386.deb
$ sudo dpkg -i ../linux-headers-2.6.32.csat.20100427_1.1_i386.deb
  • Mettez à jour votre initramfs :
$ sudo update-initramfs -c -k 2.6.32.csat.20100427 –v
  • Mettez à jour les entrées de votre chargeur de démarrage :
$ sudo update-grub


Remarque : les deux dernières actions sont à effectuer uniquement sous GNU/Linux Debian testing suite à un problème rencontré lors de l’installation du noyau via les paquets “.deb” obtenus après compilation ; la mise à jour de l’initramfs ne se fait pas correctement.

Categories
Computing

Renommer une interface Ethernet sous GNU/Linux Debian

Vous est-il déjà arrivé de cloner un système sous GNU/Linux Debian et de vous rendre contre que la numérotation de vos interfaces Ethernet (eth<n>) sur le système cible ne débutaient plus à 0 ? La faute à udev !
En effet ce gestionnaire de périphériques se base notamment sur des règle de gestion, sous la forme de fichiers ASCII se trouvant sous /etc/udev/rules.d/. Dans le cadre de la gestion de nos interfaces Ethernet, il s’agit plus particulièrement du fichier /etc/udev/rules.d/70-persistent-dev.rules.
Afin de retrouver une numérotation cohérente sur votre système cible, deux choix s’offrent à vous :

  • Effacer complètement le fichier /etc/udev/rules.d/70-persistent-dev.rules et redémarrer votre système afin que udev se charge de régénérer ce même fichier
  • Modifier à la main le fichier /etc/udev/rules.d/70-persistent-dev.rules en faisant correspondre le nom de l’interface désirée avec l’adresse MAC correspondante tout en démontant/montant chacune de ces interfaces.

Pour information, voici à quoi ressemble le référencement d’une interface Ethernet au sein du fichier /etc/udev/rules.d/70-persistent-dev.rules sous un système sous GNU/Linux Debian :

 SUBSYSTEM=="net", ACTION=="add", DRIVERS=="?*", ATTR{address}=="xx:xx:xx:xx:xx:xx", ATTR{type}=="1", KERNEL=="eth*", NAME="eth0"