Outils personnels

Proxmox 3.3 - Installation, configuration cluster

De wikiGite

Révision datée du 30 décembre 2014 à 10:00 par Pierre (discussion | contributions) (Fencing)

Installation

L'installation se fait à partir de l'image ISO (http://www.proxmox.com/downloads). L'installation est simple, se fait par une interface graphique mais ne propose toujours pas de partitionner manuellement les disques.

Une fois installé, l'accès à l'interface web se fait à l'adresse https://<IP du serveur>:8006

Configuration

Mises à jour

Depuis la version 3, les éditeurs de Proxmox ont modifié les dépôts. Les dépôts configurés de base sont réservés aux clients qui ont souscrit au support de Proxmox. N'étant pas notre cas, il faut modifier les sources pour accéder aux dépôts gratuits. REMPLACER le contenu du fichier source.list

# vi /etc/apt/sources.list

Par :

deb http://ftp.debian.org/debian wheezy main contrib

# PVE pve-no-subscription repository provided by proxmox.com, NOT recommended for production use
deb http://download.proxmox.com/debian wheezy pve-no-subscription

# security updates
deb http://security.debian.org/ wheezy/updates main contrib

Puis supprimer le fichier qui contient le dépôt par défaut. Ceci évite des messages d'erreurs (connection refusée) lors des "apt-get update".

rm /etc/apt/sources.list.d/pve-enterprise.list

On peut maintenant effectuer les mises à jour

apt-get update && apt-get upgrade

Fichiers hosts

Il faut modifier les fichiers /etc/hosts sur chacun des noeuds qui seront ajoutés au cluster. Ceux-ci doivent contenir les adresses et noms de tous les noeuds. Exemple :

Sur le noeud "pm0" :

root@pm0 : #cat /etc/hosts
127.0.0.1 localhost.localdomain localhost
10.10.168.5    pm0.local           pm0  pvelocalhost
10.10.168.10   pm1.local           pm1
10.10.168.15   pm2.local           pm2

Sur un second noeud :

root@pm2 : #cat /etc/hosts
127.0.0.1 localhost.localdomain localhost
10.10.168.5    pm0.local           pm0  
10.10.168.10   pm1.local           pm1
10.10.168.15   pm2.local           pm2 pvelocalhost

Mise en cluster

On considère ici deux machines Proxmox fraîchement installées à l'identique. Pour fonctionner en cluster, il faut définir un noeud Maître. Sur une des deux machines éxecuter

pvecm create <nom_du_cluster>

Pour vérifier la création du cluster, lancer

# pvecm status

Version: 6.2.0
Config Version: 1
Cluster Name: FWCluster
Cluster Id: 40372
Cluster Member: Yes
Cluster Generation: 4
Membership state: Cluster-Member
Nodes: 1
Expected votes: 1
Total votes: 1
Node votes: 1
Quorum: 1  
Active subsystems: 5
Flags: 
Ports Bound: 0  
Node name: herrena
Node ID: 1
Multicast addresses: 239.192.157.82  
Node addresses: 192.168.37.11 

Une fois le cluster créé, il faut ajouter la seconde machine. Pour cela, sur le second Proxmox, lancer la commande :
(où l'adresse IP correspond à celle du nœud Maître)

pvecm add <adresse_du_maitre>

Echangez les clés, puis vérifier l'ajout

pvecm status

Si cette commande fonctionne sur le second nœud, l'ajout à fonctionner. On peut s'en assurer en regardant dans la sortie de la commande précédente, la ligne :

Nodes: 2

Fencing

Pour faire fonctionner le fencing, il faut ajouter les machines à un groupe de fencing. Tout d'abord, activer le fencing en dé-commentant la ligne "FENCE_JOIN="yes"" du fichier /etc/default/redhat-cluster-pve :

vim /etc/default/redhat-cluster-pve
FENCE_JOIN="yes"

Installer ipmitool

# apt-get install ipmitool

Redémarrer cman :

# service cman restart

Sur chaque machine, éxécuter la commande suivante :

fence_tool join

Pour vérifier que les machines sont toutes présentes dans le groupe :

#fence_tool ls
fence domain
member count  3
victim count  0
victim now    0
master nodeid 1
wait state    none
members       1 2 3

GLusterFS

Glusterfs permet très simplement et de façon fiable d'avoir un système de fichiers partagé, répliqué et/ou distribué entre plusieurs serveurs. Le répertoire géré par GlusterFS sera vu soit comme une partition GlusterFS (Proxmox 3, par la librairie glusterfs), soit comme un partage NFS (fourni par GlusterFS).

http://gluster.org/community/documentation//index.php/Main_Page

Sur tous les noeuds :

Ajouter la clé gluster.org :

wget -O - http://download.gluster.org/pub/gluster/glusterfs/3.3/3.3.1/Debian/gpg.key | apt-key add -

Ajouter le dépôt Glusterfs :

vi /etc/apt/sources.list.d/glusterfs.list
  deb http://download.gluster.org/pub/gluster/glusterfs/3.3/3.3.1/Debian/squeeze.repo squeeze main

Et installer le serveur (le client suivra en dépendance) :

aptitude install glusterfs-server

Préparer le terrain (la partition partagée sera dans le volume des VMs de Proxmox):

mkdir /var/lib/vz/glusterfs

Sur un seul des noeuds, connecter un ou plusieurs autres noeuds et créer un volume. Exemple, à partir de "node1", on ajoute "node2" et on crée un volume répliqué sur les 2 machines (RAID1) :

gluster peer probe node2
gluster volume create glusterstorage replica 2 node1:/var/lib/vz/glusterfs node2:/var/lib/vz/glusterfs
gluster volume start glusterstorage

Pour ajouter un serveur (une "brique") par la suite, sur n'importe lequel des noeud existant taper :

gluster peer probe node3
gluster volume add-brick glusterstorage replica 3 node3:/var/lib/vz/glusterfs
gluster volume info

Accès par la librairie glusterfs

Dans l'interface, Créer un stockage GlusterFS, remplissez les champs Serveur principal et Serveur secondaire avec les noms de vos serveurs. Dans le menus déroulant Nom du volume devrait apparaître le volume que vous avez créé précédemment (ici "glusterstorage").

Accès en NFS

Dans l'interface, Créer un stockage NFS, remplissez le champ Serveur avec "localhost". Dans le menus déroulant Nom du volume devrait apparaître le volume que vous avez créé précédemment (ici "glusterstorage").

Benchmark librairie glusterfs / NFS

La différence est notable. En fonctionnement en HA, proxmox est capable de migrer une machine, lorsqu'il perd un noeud du cluster, sur un second. Ceci est vrai seulement avec la librairie NFS. De notre expérience, non seulement les machines ne sont pas migrées, mais les disques virtuels sont parfois endommagés !

Quorum

Le Quorum est une partition partagée, à partir d'une troisième machine, qui permet d'utiliser la HA. Cette machine sert en fait de référent aux Proxmox, qui ont parfois du mal à déterminer s'il y a une panne ou non dans un configuration avec uniquement 2 noeuds Proxmox. On ajoute donc de la stabilité et une couche de sécurité pour les VMs/données.

Cette troisième machine sera ici une CentOS 6.5.

iSCSI

iSCSI est choisi pour partager la partition entre les différents noeuds du cluster.

Pour commencer, créer la partition. (Réduire une autre si cela est nécessaire, en théorie QDisk n'utilise qu'une partition de 10Mo)

lvcreate -n quorumdisk -L 10M vg_QUORUM

Installer le serveur iSCSI :

yum -y install scsi-target-utils # (nom du paquet sous CentOS)

Important ! : le port 3260 doit être ouvert pour permettre les connexions à la cible iSCSI.

Créer ensuite la cible iSCSI (Des conventions de nommage ont été mises en place. Il est recommandé de les utiliser : http://en.wikipedia.org/wiki/ISCSI#Addressing)

# vim /etc/tgt/targets.conf

<target iqn.2012-06.com.domain.hostname:server.p1qdisk>
   backing-store /dev/vg_QUORUM/quorumdisk
   initiator-address <IP_du_noeud_1>
   initiator-address <IP_du_noeud_2>
</target>

Démarrer ensuite le service tgt, et le paramétrer pour le démarrage automatique :

service tgtd start
chkconfig tgtd on
tgt-admin -s    #notre volume doit apparaître ici

Il faut maintenant monter la cible sur les Proxmox. Installer tgt (il installe open-iscsi en dépendance sur le client, c'est lui dont on a besoin) :

apt-get install tgt # (nom du paquet sous Debian / Proxmox).

Modifier ensuite le fichier /etc/iscsi/iscsid.conf. Le champ node.startup doit être configuré en automatic

#vim /etc/iscsi/iscsid.conf

...
#*****************
# Startup settings
#*****************

# To request that the iscsi initd scripts startup a session set to "automatic".
# node.startup = automatic
#
# To manually startup the session set to "manual". The default is manual.
node.startup = automatic
...

Redémarrer le client iscsi :

service open-iscsi restart

On peut maintenant tester quelles cibles les clients voient :

iscsiadm --mode discovery --type sendtargets --portal <IP_du_ serveur iSCSI>

Puis se connecter à la cible qui nous interesse :

iscsiadm -m node -T iqn.BLAHBLAH -p <IP_du_serveur_iSCSI> -l

Configurer QDisk

Il faut identifier la partition qui correspond au volume logique précédemment créé. On crée ensuite une partition sur celui-ci, via fdisk (ici sdc1 mais peut varier suivant la configuration de votre système). Une fois ceci fait on peut créer le disque de Quorum :

mkqdisk -c /dev/sdc1 -l qdisk_proxmox
#Noter que le paramètre -l est suivi du nom que vous souhaitez donner à votre disque de Quorum

Déconnecter et reconnecter les clients pour voir les changements :

iscsiadm --mode node --target <IQN> --portal x.x.x.x --logout
iscsiadm --mode node --target <IQN> --portal x.x.x.x --login

Ajouter QDisk au cluster

Sur un des deux noeuds :

Copier le fichier cluster.conf en cluster.conf.new

cp /etc/pve/cluster.conf /etc/pve/cluster.conf.new

Editer ce fichier en prenant soins de :
1) Incrémenter "config_version" de 1
2) Supprimer 2node="1"
3) Ajouter la définition du Quorum

Cela doit ressembler à peu près à ceci :

 <cman expected_votes="3" keyfile="/var/lib/pve-cluster/corosync.authkey"/>
 <quorumd votes="1" allow_kill="0" interval="1" label="qdisk_proxmox" tko="10"/>
 <totem token="54000"/>

Activer les modifications : Sur l'interface Web de Proxmox, selectionner le datacenter (dans le menu de gauche) puis sélectionner l'onglet HA. On voit ici apparaître le fichier fraîchement modifié. cliquer sur Activate pour charger les modifications dans le cluster.

Lancer la commande pvecm s et vérifier que les deux noeuds on bien reçu les modifications du cluster.conf. Puis sur chacun des noeuds, un à la fois :

service rgmanager stop
service cman reload

la dernière commande devrait reancer rgmanager, si non, relancez le manuellement.

Vérification On peut utiliser la commande clustat pour vérifier que le quorum est présent et connecté

#clustat
Cluster Status for proxmox1 @ Mon Nov 24 16:46:23 2014
Member Status: Quorate

Member Name                                         ID   Status
------ ----                                         ---- ------
proxmox1                                              1 Online, Local, rgmanager
proxmox2                                              2 Online, rgmanager
/dev/block/8:16                                     0 Online, Quorum Disk

Astuces et notes

Supprimer l'avertissement de souscription

Lorsqu'on utilise Proxmox 3 sans souscription, un message apparrait à chaque login sur l'interface web. Pour se débarrasser de ce message, il faut modifier le fichier pvemanagerlib.js. On commence par sauvegarder le fichier d'origine :

# cp /usr/share/pve-manager/ext4/pvemanagerlib.js /usr/share/pve-manager/ext4/pvemanagerlib.js.OLD

Puis on édite

# vim /usr/share/pve-manager/ext4/pvemanagerlib.js

Il faut chercher l'instruction IF de la forme suivante :

if (data.status !== 'Active') {
Ext.Msg.show({
                       title: gettext('No valid subscription'),
                       icon: Ext.Msg.WARNING,
                       msg: PVE.Utils.noSubKeyHtml,
                       buttons: Ext.Msg.OK,

En fait, Proxmox teste si on a un abonnement non actif, auquel cas, il affiche le message. Il nous suffit donc de remplacer le test par false

if (false) {
Ext.Msg.show({
                       title: gettext('No valid subscription'),
                       icon: Ext.Msg.WARNING,
                       msg: PVE.Utils.noSubKeyHtml,
                       buttons: Ext.Msg.OK,

Problèmes connus avec QDisk

Les noeuds Proxmox utilisent iSCSI pour se connecter au disque de Quorum partagé. Les machines proxmox, au démarrage, lancent une connexion à la cible iSCSI. Or, si la machine de Quorum n'est pas présente lors de cette étape, les connexion échouent logiquement. Les proxmox ne sont ensuite pas capables de se reconnecter automatiquement au disque de quorum, il faut soit les redémarrer, soit connecter la cible manuellement, en ligne de commande. Bien que ce soit un scénario plus rare, il est toujours bon de savoir quoi faire.