Proxmox 1.9 Cluster : Différence entre versions
De wikiGite
(→Erreur SPLIT BRAIN sur primary/primary) |
(→Erreur SPLIT BRAIN sur primary/primary) |
||
Ligne 143 : | Ligne 143 : | ||
Sur le primaire : | Sur le primaire : | ||
drbdadm connect data2 | drbdadm connect data2 | ||
− | /proc/drbd | + | /proc/drbd montre la synchronisation |
Vérifier la synchronisation : | Vérifier la synchronisation : | ||
cat /proc/drbd | cat /proc/drbd | ||
− | Lorsque c'est UpToDate/UpToDate, sur le secondaire (qui doit redevenir primaire pour faire un primary/primary) : | + | Lorsque c'est UpToDate/UpToDate (/proc/drbd doit indiquer un état "cs:Connected" sur les 2), sur le secondaire (qui doit redevenir primaire pour faire un primary/primary) : |
drbdadm primary data2 | drbdadm primary data2 | ||
kpartx -a /dev/drbd0 | kpartx -a /dev/drbd0 |
Version du 12 août 2011 à 22:41
(Suite de Proxmox Installation, notes techniques)
Sommaire
Cluster
Configuration
Sur le maitre :
pveca -c
Génère des clés RSA pour les échanges entre serveurs, et déclare ce serveur comme master (il gèrera tous les autres noeuds et toutes les opérations standards, voir plus bas).
Vérifier la configuration avec
pveca -l
Sur le(s) esclaves(s) :
pveca -a -h 192.168.1.33
(ou 192.168.1.33 est l'IP du maître)
Vérifier que les deux noeuds se voient bien
pveca -l
RELANCER les 2 serveurs.
Suppression d'un noeud
Sur le master :
pveca -d <ID du noeud>
Et sur l'esclave, resynchroniser la configuration à partir de celle du maître
pveca -s 192.168.1.33
Migration de VMs
La migration d'un VM locale (hébergée sur le disque local d'un noeud) doit se faire machine arrêtée (la migration "live" ne peut se faire que si le vdisk est stocké sur un espace partagé par les 2 noeuds concernées - voir plus bas "DRBD".
La migration "offline" est réalisée avec rsync (environ 3 mns pour un fichier qcow2 de 800M, sur un réseau 100Mb/s).
Erreurs possibles
- Erreur "Ticket authentication failed - invalid ticket..." à la création d'un noeud esclave.
- Vérifier en premier lieu l'heure des serveurs.
- Si l'heure est identique, vérifier que les serveurs ont accès à un serveur DNS (le contraire peut ralentir les échanges ssh, et causer des timeouts).
- Si tout ça est bon, l'erreur peut disparaitre seul après quelques minutes, le temps que les serveurs se synchronisent. Se déconnecter et se reconnecter sur l'interface peut aussi aider.
Opérations sur le cluster
ATTENTION : Les opération de démarrage/arrêt des VM, les consoles VNC, la soumission de jobs, ne peuvent être réalisés QU'A PARTIR DU MASTER. La gestion de tous les noeuds et de toutes les VMs doit se faire de ce serveur-ci.
Sur un autre noeud, on obtient "Vous n'avez pas les droits d'accès en écriture." ("You do not have write access"). Si le master est défaillant, ou pour utiliser ces fonctions à partir d'un autre noeud, il faut passer celui-ci en maître. Sur le noeud en question :
pveca -m
Et avertir éventuellement tous les autres noeuds du changement de maître. Sur chacun d'eux :
pveca -s -h <IP du nouveau maître>
leur fait découvrir le nouveau maître, mais ne les ré-enregistre pas automatiquement dessus. Pour ça relancer :
pveca -a -h <IP du nouveau maître>
Visualisation des stockage
On ne voit les disques locaux ("storage" de type "local") qu'en se connectant individuellement à l'interface de chacun des noeuds. Seuls les emplacements partagés sur le maître apparaissent sur les autres, mais attention aux pertes de VM à la migration si ces emplacements n'existent pas sur un des noeuds !
DRBD
N'est utile que pour migrer à chaud les VM full (KVM), car il sait migrer à chaud les VZ (penser à fermer les consoles VNC dans ce cas, sinon il ne peut pas suspendre la VM au moment de basculer sur l'autre serveur). La migration a froid est une copie disque à disque avec rsync, il n'y a donc pas besoin non plus de drbd.
Configuration
Les 2 serveurs en cluster utilisés pour tester DRBD avec Proxmox n'ont qu'un disque (2*250Go en RAID1). Proxmox a partitionné / (pve-root) à 54Go et /var/lib/vz (pve-data) à 163 Go.
Réduction de la partition pve-data
OPTIONNEL. Pour un premier test on réduit pve-data à 10G, on crée un pve-data2 sur la place libre et on le réplique en DRBD.
/etc/init.d/pvedaemon stop umount /dev/mapper/pve-data e2fsck -f /dev/mapper/pve-data resize2fs -p /dev/mapper/pve-data -p 10G # la nouvelle taille devient 10 Go lvresize -L 11G /dev/mapper/pve-data # légèrement plus grand pour être sûr de ne rien couper sur le FS mount /var/lib/vz # On remonte pve-data vgdisplay # vérifiez l'espace disponible dans le volume LVM lvcreate -n data2 -L 158G pve # créer un emplacement data2 (NOTE : pas de "pve-" dans le nom, c'est le nom du VG ajouté automatiquement) /etc/init.d/pvedaemon start
Installation DRBD
A partir de là, on a une partition LVM utilisable pour drbd. Voir http://wiki.systea.fr/index.php/R%C3%A9plication_de_syst%C3%A8mes_de_fichiers_avec_DRBD
Création d'un volume group répliqué
Quand DRBD est opérationnel, il faut déclarer ce volume répliqué dans Proxmox. On ne peut pas utiliser ext3 sur le volume DRBD en primary/primary car il faut un filesystem qui fonctionne en cluster (pas d'erreurs si on formate en ext3, mais les modifications du filesystem ne sont tout simplement pas répliquées et pas vu sur les autres noeuds). On utilisera donc LVM, qu'on remet par-dessus DRBD, lui-même étant déjà par-dessus LVM...
D'ABORD CREER UNE PARTITION LVM SUR LE DEVICE DRBD ! Avec fdisk, en donnant le type 8E (LVM). On a donc l'empilage suivant :
Disque partition LVM (fdisk 8E) Groupe de volume VG00 Volume logique DRBD partition LVM (fdisk 8E) Groupe de volume VG01
Les volumes logiques des VMs seront ensuite gérés par Proxmox dans le groupe de volumes VG01.
Vérifier si la partition apparait dans /dev/mapper (elle doit être nommée par défaut drbd0p1). Si ce n'est pas le cas, la déclarer avec kpartx
kpartx -a /dev/drbd0
Si kpartx n'est pas installé :
apt-get install kpartx
ATTENTION : LANCER KPARTX SUR LES 2 NOEUDS, SINON LE SECOND NE VERRA PAS LE NOUVEAU VOLUM GROUP !!
Ensuite :
pvcreate /dev/mapper/drbd0p1 pvscan PV /dev/sda2 VG pve lvm2 [231.75 GB / 764.00 MB free] PV /dev/dm-4 lvm2 [157.99 GB] Total: 2 [389.73 GB] / in use: 1 [231.75 GB] / in no VG: 1 [157.99 GB] vgcreate drbdvg /dev/mapper/drbd0p1 pvscan PV /dev/dm-4 VG drbdvg lvm2 [157.98 GB / 157.98 GB free] PV /dev/sda2 VG pve lvm2 [231.75 GB / 764.00 MB free] Total: 2 [389.73 GB] / in use: 2 [389.73 GB] / in no VG: 0 [0 ]
Il reste à ajouter un storage de type "LVM" dans l'interface Proxmox, sur le VG "drbdvg", en "Partagé".
IMPORTANT: kpartx est nécessaire au reboot pour que la machine re-découvre bien la partition contenant drbd.
Ajouter dans /etc/rc.local
kpartx -a /dev/drbd0
Notes sur DRBD
Limitation : on ne peut dans ce cas que créer des VM avec un disque raw (sur un volume logique créé pour l'occasion) dont plus question de diques extensibles type qcow2.
NOTE IMPORTANTE : Si on ajoute d'autres noeuds au clusters et que ceux-ci ne font pas partie de la réplication DRBD, il y a risque de perte de VM. L'emplacement DRBD étant partagé sur le maître, ilo sera visible sur tous les noeuds, même ceux qui ne l'ont pas. On peut donc par erreur migrer une VM de l'emplacement DRBD vers un noeud qui n'a pas cet emplacement : Proxmox ne l'interdit pas, mais la VM est perdue ! Elle fait 0 octet à l'arrivée, et impossible de la ramener vers le noeud de départ car il ne trouve plus le volume correspondant, et s'arrête en erreur !
Il est donc préférable de créer un cluster pour les noeuds partageant un emplacement de type DRBD (pour les migrations à chaud), et un autre cluster pour les noeuds n'ayant que des emplacements locaux. Ce second cluster permettra de centraliser la gestion de ces machines et autorisera des migrations "à froid" d'emplacement local vers emplacement local.
Erreur SPLIT BRAIN sur primary/primary
En cas de coupure du lien, un reboot d'un des noeuds, ou toute autre raison désynchronisant le DRBD, le primary/primary cause une erreur SPLIT BRAIN (en d'autres termes, il n'arrive plus à décider qui doit répliquer sur qui pour re-synchroniser les volumes).
On peut voir dans les logs, par exemple :
kernel: block drbd0: helper command: /sbin/drbdadm split-brain minor-0 exit code 0 (0x0)
Si on essaie de passer DRBD sur le noeud esclave en secondaire, on a :
drbdadm secondary all 0: State change failed: (-12) Device is held open by someone Command 'drbdsetup 0 secondary' terminated with exit code 11
Pour relancer la réplication : Sur les 2 noeuds :
drbdadm disconnect data2
Sur le secondaire :
vgchange -an drbdvg kpartx -d /dev/drbd0 drbdadm secondary data2 drbdadm -- --discard-my-data connect data2
/proc/drbd doit indiquer une tentative de connexion au primaire "cs:WFConnection"
Sur le primaire :
drbdadm connect data2
/proc/drbd montre la synchronisation
Vérifier la synchronisation :
cat /proc/drbd
Lorsque c'est UpToDate/UpToDate (/proc/drbd doit indiquer un état "cs:Connected" sur les 2), sur le secondaire (qui doit redevenir primaire pour faire un primary/primary) :
drbdadm primary data2 kpartx -a /dev/drbd0 vgchange -ay drbdvg
Pour valider la synchronisation des volumes :
drbdadm verify data2 watch cat /proc/drbd