4

Proxmox 4.x : mise en place d’un Cluster HA avec Ceph

Un mémo sur la mise en place d’un cluster haute disponibilité d’hyperviseurs Proxmox avec un stockage distribuée et redondant Ceph.
Cet article traite uniquement de l’installation et de la configuration de Ceph avec Proxmox pour avoir un stockage partagé entre les nœuds.

Présentation de mon cluster Proxmox

Mon cluster sera composé de 3 nœuds Proxmox avec 2 partages Ceph et 1 serveur NFS pour les snapshots des VM et le stockage des ISOs.
Les VMs gourmandent en ressources seront hébergées sur le pool des disques 300Go.
Les machines virtuelles seront réparties sur les 3 noeuds Proxmox.

  • 3 Serveurs Dell R730 pour les Proxmox, avec :
    • 2 disques 146 Go SAS 15K RAID1 pour PVE + Monitor
    • 3 disques 300 GO SAS 15K : 2 OSD + 1 journalisation
    • 3 disques 4 TO SATA 7.4K pour OSD
  • Les réseaux :
    • LAN réseau entreprise : 10.10.8.0/24
    • LAN privée : 192.168.1.0/24
    • Les interfaces réseaux :
      • Vmbr0 : interface administration des proxmox en port cuivre
      • Vmbr1 : interface réseau sur le LAN réseau entreprise en port fibre, cette interface sera configurée pour le réseau des VMs
      • Vmbr2 : interface réseau sur le LAN privé en port fibre, cette interface sera utilisée pour le cluster et Ceph
  • Schéma réseau simplifié du cluster HA :

    • Adresses réseaux :
      • cluster-01 :
        • vmbr0 10.10.8.202
        • vmbr2 192.168.1.1
      • cluster-02 :
        • vmbr0 10.10.8.204
        • vmbr2 192.168.1.2
      • cluster-03 :
        • vmbr0 10.10.8.206
        • vmbr2 192.168.1.3

L’installation de Proxmox 4.x est identique à la version 3.x : tuto installation Proxmox 3.x

Mise en cluster des 3 nœuds Proxmox

  • Sur tous les noeuds, ajouter ces informations dans /etc/hosts :
    • 192.168.1.1 cluster-01
    • 192.168.1.2 cluster-02
    • 192.168.1.3 cluster-03
  • Vérifier que les serveurs sont synchroniser avec un serveur de temps :
  • timedatectl
  • Sur pve-01 créé le nom du cluster :
  • pvecm create kluster -bindnet0_addr 192.168.1.1 -ring0_addr cluster-01
  • Sur pve-02, rejoindre le cluster :
  • pvecm add cluster-01 -ring0_addr cluster-02
  • Même chose sur pve-03 :
  • pvecm add cluster-01 -ring0_addr cluster-03
  • Dans l’interface web, les 3 nœuds sont présent :

Installation et configuration de Ceph

Ce qui va suivre risque d’évoluer dans le temps, car à ce jour cette architecture est ma maquette de test et n’est pas encore en production. A chaque modification, je tiendrais cet article à jour.

Installation de Ceph

  • Installation de Ceph sur chaque nœud Proxmox :
  • https_proxy=http://IP_Proxy:PORT pveceph install -version jewel
  • Sur le premier nœud cluster-01 :
  • pveceph init --network 192.168.1.0/24
  • Sur Chaque nœud, créer le moniteur « mon » :
  • pveceph createmon

Création des OSD

Chaque disque est configuré en RAID 0.

  • Sur chaque nœud :
    • Le premier disque dédié à la journalisation :
    • pveceph createosd /dev/sdb -journal_dev /dev/sdb
    • Créer les OSD avec les disques restant :
    • pveceph createosd /dev/sd[X]
  • Ce qui donne une fois terminée, dans l’interface web de Proxmox, menu OSD :

Personnalisation du Crush MAP

La Crush MAP permet de déterminer comment vont être utilisés chaque OSD. Mon but est de regrouper les disques de 300Go ensemble et idem pour ceux de 4To.

  • Création des root :
  • ceph osd crush add-bucket 300SAS root
    ceph osd crush add-bucket 4ToSAS root
    ceph osd crush add-bucket journal root
    
  • Création des hosts :
  • ceph osd crush add-bucket ceph1-300SAS host
    ceph osd crush add-bucket ceph2-300SAS host
    ceph osd crush add-bucket ceph3-300SAS host
    
    ceph osd crush add-bucket ceph1-4ToSAS host
    ceph osd crush add-bucket ceph2-4ToSAS host
    ceph osd crush add-bucket ceph3-4ToSAS host
    
    ceph osd crush add-bucket ceph1-journal host
    ceph osd crush add-bucket ceph2-journal host
    ceph osd crush add-bucket ceph3-journal host
    
  • Déplacer les hosts sur chaque root respectif :
  • ceph osd crush move ceph1-journal root=journal
    ceph osd crush move ceph2-journal root=journal
    ceph osd crush move ceph3-journal root=journal
    
    ceph osd crush move ceph1-300SAS root=300SAS
    ceph osd crush move ceph2-300SAS root=300SAS
    ceph osd crush move ceph3-300SAS root=300SAS
    
    ceph osd crush move ceph1-4ToSAS root=4ToSAS
    ceph osd crush move ceph2-4ToSAS root=4ToSAS
    ceph osd crush move ceph3-4ToSAS root=4ToSAS
    
  • Ajouter les OSDs aux hosts respectifs, exemple avec le host journal :
  • Pour lister les OSDs :

    ceph osd tree
    ceph osd crush add osd.0 0.200 host=ceph1-journal
    ceph osd crush set osd.0 0.2 root=journal host=ceph1-journal
    ceph osd crush add osd.1 0.200 host=ceph2-journal
    ceph osd crush set osd.1 0.2 root=journal host=ceph2-journal
    ceph osd crush add osd.2 0.200 host=ceph3-journal
    ceph osd crush set osd.2 0.2 root=journal host=ceph3-journal
    
  • Supprimer les anciens emplacement des OSD, exemple avec ceux du journal :
  • ceph osd crush rm osd.0 pve-01
    ceph osd crush rm osd.1 pve-02
    ceph osd crush rm osd.2 pve-03
    
  • Supprimer les hosts inutiles créés par défaut :
  • ceph osd crush rm pve-01
    ceph osd crush rm pve-02 
    ceph osd crush rm pve-03
    

    Les OSD sont maintenant répartis de cette manière :

  • Configuration permanente du Crush MAP personnalisé :
    • Dans /etc/pve/ceph.conf ajouter dans la section [osd] :
    • osd crush update on start = false

Création des Pools

  • Calcul du pg_num :
    (OSDx100)/size -> choisir la puissance de 2 supérieur au résultat de l’opération.
    OSD : nombre total d’OSD choisi pour le pool
    size : nombre de réplication

    • Exemple pour mon pool de 300SAS :
      (6*100)/3 = 200

      • mon pg_num sera de une puissance de 2 supérieur à 200, c’est à dire dans mon cas : 256
    • Pour mon pool de 4ToSAS :
      (9*100)/3 = 300

      • Mon pg_num pour mon pool de 4To SAS est de 512
  • Un pool avec les disques 300Go :
  • pveceph createpool 300SAS -min_size 1 -pg_num 256 -size 3 -crush_ruleset 1
  • Un pool avec les disques 4To :
  • pveceph createpool 4ToSAS -min_size 1 -pg_num 512 -size 3 -crush_ruleset 2
  • Vérifier le statut de Ceph :
  • ceph -s
    cluster 154458fd-6c1b-4573-adfc-e87357ca13ca
         health HEALTH_OK
         monmap e3: 3 mons at {0=192.168.1.1:6789/0,1=192.168.1.2:6789/0,2=192.168.1.3:6789/0}
                election epoch 66, quorum 0,1,2 0,1,2
         osdmap e771: 18 osds: 18 up, 18 in
                flags sortbitwise,require_jewel_osds
          pgmap v27046: 768 pgs, 2 pools, 0 bytes data, 0 objects
                1008 MB used, 35930 GB / 35931 GB avail
                     768 active+clean
    

    ou via l’interface web de Proxmox :

Ajout du stockage Ceph pour les noeuds Proxmox

  • Menu Stockage, cliquer sur « Add » puis choisir RDB :
  • Renseigner les champs :
    • ID : donner un nom au nouveau stockage
    • Pool : choisir le bon pool
    • Monitor(s)s : renseigner les adresses Ip de chaque noeuds séparées d’un espace
    • User name : laisser admin
  • Les nouveaux stockages sont disponibles pour chaque nœud :
  • Pour avoir les autorisations d’accès, créer un fichier de clé pour chaque nouveau stokage RBD :
  • mkdir /etc/pve/priv/ceph
    cp /etc/ceph/ceph.client.admin.keyring /etc/pve/priv/ceph/SAS300.keyring
    cp /etc/ceph/ceph.client.admin.keyring /etc/pve/priv/ceph/SAS4To.keyring
    

Configuration du minuteur Watchdog matériel

Sous Proxmox 4.x il n’est plus nécessaire de configurer le fencing car il est pris en charge directement par Proxmox. Cependant, la gestion est au niveau logiciel et je souhaite qu’elle soit au niveau matériel. Dans ce cas, je vais utliser l’utilitaire de la carte iDRAC :

Vérification des valeurs actuelles

  • Installation de l’outil idracadm7 :
  • apt install srvadmin-idracadm7
  • Vérification des valeurs par défaut :
  • idracadm7 getsysinfo -w
    Watchdog Information:
    Recovery Action         = None
    Present countdown value = 479 seconds
    Initial countdown value = 480 seconds
    

    Les valeurs par défaut sont trop hautes et aucune action de définie.

Configuration du Watchdog à 10secondes

  • Editer le fichier /etc/default/pve-ha-manager pour activer watchdog :
  • nano /etc/default/pve-ha-manager
  • Supprimer le dièze pour activer :
  • # select watchdog module (default is softdog)
    WATCHDOG_MODULE=ipmi_watchdog
    
  • Modifier le grub pour désactiver nmi watchdog, si embarquer dans cpu apic :
    • Éditer /etc/default/grub :
    • nano /etc/default/grub
    • Modifier la ligne GRUB_CMDLINE_LINUX_DEFAULT :
    • GRUB_CMDLINE_LINUX_DEFAULT="quiet nmi_watchdog=0"
    • Recharger la configuration du grub :
    • update-grub
  • Désactiver dans iDRAC « Automated System Recovery Agent » :
  • Exécuter cette commande pour désactiver le watchdog d’Openmanage si installé :
  • /opt/dell/srvadmin/sbin/dcecfg command=removepopalias aliasname=dcifru
    
  • Redémarrer le serveur :
  • reboot
  • Une fois connecté au serveur, vérifier les nouvelles valeurs :
  • idracadm7 getsysinfo -w
    Watchdog Information:
    Recovery Action         = Reboot
    Present countdown value = 9 seconds
    Initial countdown value = 10 seconds
    

Un peu de tuning

Partager l'article :





fred

Administrateur Système autodidacte et utilisateur au quotidien de GNU/Linux (Debian, Ubuntu, Manjaro et un peu de CentOS).

4 Comments

  1. Impressionant et merci pour le partage, avez vous fait ensuite des batteries de tests en provoquant des pannes artificielles ?

  2. Pas encore mais c’est prévu dans les prochains jours… J’écrirais un article sur ce sujet…

  3. Bonjour, et bravo pour ce tuto des plus intéressant et formateur.

    Après l’avoir suivi je suis confronté à un problème(J’ai dû louper quelque chose.).
    J’ai bien mes OSD réparti mais Proxmox m’indique qu’il ne peu résoudre ceph1-300SAS ou ceph1-4ToSAS
    Pouvez vous ajouter le contenu du fichier /etc/pve/ceph.conf ?
    Avez vous ajouter des alias au niveau des hosts ?

    J’espère avoir clairement exposé mon problème.
    Encore bravo et merci d’avance de vous pencher sur ma question.

  4. Bonjour j.esnault,
    voici mon /etc/pve/ceph.conf

    [global]
    auth client required = cephx
    auth cluster required = cephx
    auth service required = cephx
    cluster network = 192.168.1.0/24
    filestore xattr use omap = true
    fsid = 154458fd-6c1b-4573-adfc-e87357ca13ca
    keyring = /etc/pve/priv/$cluster.$name.keyring
    osd journal size = 5120
    osd pool default min size = 1
    public network = 192.168.1.0/24

    [osd]
    keyring = /var/lib/ceph/osd/ceph-$id/keyring
    osd crush update on start = false
    [mon.2]
    host = pve-03
    mon addr = 192.168.1.3:6789

    [mon.1]
    host = pve-02
    mon addr = 192.168.1.2:6789

    [mon.0]
    host = pve-01
    mon addr = 192.168.1.1:6789

    J’avais rencontré ce problème de non résolution des hosts mais je n’ai plus souvenir du pourquoi et comment j’avais résolu ce problème…
    Alors attention, il y a plus simple pour Ceph, c’est d’avoir qu’un seul poole le tout géré par proxmox, mon architecture de Ceph est un peu complexe…

Laisser un commentaire

Votre adresse de messagerie ne sera pas publiée. Les champs obligatoires sont indiqués avec *