informatique:systeme:ha:ceph

Différences

Ci-dessous, les différences entre deux révisions de la page.

Lien vers cette vue comparative

Les deux révisions précédentes Révision précédente
Prochaine révision
Révision précédente
informatique:systeme:ha:ceph [2013/11/26 19:37] bn8informatique:systeme:ha:ceph [2014/10/16 14:50] (Version actuelle) – [Configuration de libvirt pour utiliser le cluster Ceph] bn8
Ligne 3: Ligne 3:
 ===== Mise en place d'un cluster ===== ===== Mise en place d'un cluster =====
  
-Cette méthodologie décris la mise en place d'un cluster de serveurs.+Cette méthodologie décrie la mise en place d'un cluster composé de trois serveurs.
  
 ==== Schéma réseau ==== ==== Schéma réseau ====
Ligne 9: Ligne 9:
 {{ :informatique:systeme:ha:schema-reseau.png?direct&400 |Schéma réseau}} {{ :informatique:systeme:ha:schema-reseau.png?direct&400 |Schéma réseau}}
  
-==== Schéma cluster Ceph ====+==== Schéma du cluster Ceph ====
  
 {{ :informatique:systeme:ha:schema-ceph.png?direct&400 |Schéma cluster Ceph}} {{ :informatique:systeme:ha:schema-ceph.png?direct&400 |Schéma cluster Ceph}}
Ligne 16: Ligne 16:
 ==== Pré-requis ==== ==== Pré-requis ====
  
-  * Les 3 serveurs doivent posséder 2 disques SSD (64Mo minimum) en RAID1 pour le système et les journaux **Ceph** et deux autres disques (SATA 2To par exemple) pour les données du cluster+  * Les 3 serveurs doivent posséder 2 disques //SSD// (64Go minimum) en RAID1 pour le système et les journaux //Ceph// et deux autres disques (//SATA 2To// par exemple) pour les //OSD// (=les données du cluster)
   * L'OS des serveurs doit être installé sur un disque utilisant **LVM**. Partitionnement proposé :   * L'OS des serveurs doit être installé sur un disque utilisant **LVM**. Partitionnement proposé :
     * /dev/sda     * /dev/sda
Ligne 90: Ligne 90:
         osd journal size = 10000         osd journal size = 10000
         osd journal = /var/lib/ceph/journal/$cluster-$id         osd journal = /var/lib/ceph/journal/$cluster-$id
 +        osd recovery max active = 1        
  
 [osd.0] [osd.0]
Ligne 110: Ligne 111:
   * Sur //ceph1// : <code>mkdir -p /var/lib/ceph/mon/ceph-a   * Sur //ceph1// : <code>mkdir -p /var/lib/ceph/mon/ceph-a
 ceph-authtool --create-keyring  /etc/ceph/ceph.client.admin.keyring --gen-key -n client.admin ceph-authtool --create-keyring  /etc/ceph/ceph.client.admin.keyring --gen-key -n client.admin
 +chmod 600 /etc/ceph/ceph.client.admin.keyring
 ceph-authtool --create-keyring /var/lib/ceph/mon/ceph-a/keyring --gen-key -n mon. ceph-authtool --create-keyring /var/lib/ceph/mon/ceph-a/keyring --gen-key -n mon.
 cp -a /var/lib/ceph/mon/ceph-a/keyring /etc/ceph/ceph.mon.a.keyring cp -a /var/lib/ceph/mon/ceph-a/keyring /etc/ceph/ceph.mon.a.keyring
Ligne 120: Ligne 122:
 scp 192.168.0.1:/etc/ceph/ceph.mon.a.keyring /etc/ceph/ceph.mon.b.keyring scp 192.168.0.1:/etc/ceph/ceph.mon.a.keyring /etc/ceph/ceph.mon.b.keyring
 scp 192.168.0.1:/etc/ceph/ceph.client.admin.keyring /etc/ceph/ceph.client.admin.keyring scp 192.168.0.1:/etc/ceph/ceph.client.admin.keyring /etc/ceph/ceph.client.admin.keyring
 +chmod 600 /etc/ceph/ceph.client.admin.keyring
 ceph-mon -i b -f -c /etc/ceph/ceph.conf --mkfs</code> ceph-mon -i b -f -c /etc/ceph/ceph.conf --mkfs</code>
  
Ligne 126: Ligne 129:
 scp 192.168.0.1:/etc/ceph/ceph.mon.a.keyring /etc/ceph/ceph.mon.c.keyring scp 192.168.0.1:/etc/ceph/ceph.mon.a.keyring /etc/ceph/ceph.mon.c.keyring
 scp 192.168.0.1:/etc/ceph/ceph.client.admin.keyring /etc/ceph/ceph.client.admin.keyring scp 192.168.0.1:/etc/ceph/ceph.client.admin.keyring /etc/ceph/ceph.client.admin.keyring
 +chmod 600 /etc/ceph/ceph.client.admin.keyring
 ceph-mon -i c -f -c /etc/ceph/ceph.conf --mkfs ceph-mon -i c -f -c /etc/ceph/ceph.conf --mkfs
 /etc/init.d/ceph -a start mon.c /etc/init.d/ceph -a start mon.c
Ligne 171: Ligne 175:
 service ceph -a start osd.5 service ceph -a start osd.5
 ceph osd crush set 5 2.0 root=default host=ceph3</code> ceph osd crush set 5 2.0 root=default host=ceph3</code>
 +
 +===== Gestion des volumes Ceph =====
 +
 +==== Lister les volumes d'un pool ====
 +
 +<code>rbd list --pool=[pool]</code>
 +
 +**Avec :**
 +  * **[pool] :** le nom du //pool//
 +
 +==== Afficher les détails d'un volume ====
 +
 +<code>rbd info [pool]/[volume]</code>
 +
 +**Avec :**
 +
 +  * **[pool] :** le nom du //pool//
 +  * **[volume :** le nom du //volume//
 +
 +==== Supprimer un volume ====
 +
 +<code>rbd rm [pool]/[volume]</code>
 +
 +**Avec :**
 +
 +  * **[pool] :** le nom du //pool//
 +  * **[volume :** le nom du //volume//
 +
 +==== Agrandir un volume utilisé comme disque d'une machine virtuelle ====
 +
 +=== Sans arrêter la VM ===
 +
 +Utiliser la commande virsh suivante : <code>virsh blockresize --domain [mavm] --path "[volume]" --size [newsize]</code>
 +
 +**Avec : **
 +
 +  * **[mavm] : ** le nom libvirt de la VM
 +  * **[volume] : ** le nom du volume telque vue par la VM. Exemple : //vdc//
 +  * **[newsize] : ** la nouvelle taille du volume. Exemple : //40G//
 +
 +La modification est normalement propagé jusqu'au système d'exploitation de la VM. Il faut ensuite faire en sorte que la VM utilise ce nouvelle espace. Par exemple, si le volume est utilisé directement comme un volume physique LVM, vous pouvez suivre la procédure décrite [[informatique:systeme:matos:lvm#augmenter_un_pv|ici]].
 +
 +=== Avec arrêt de la VM ===
 +
 +  * Arrêter la VM
 +  * Une fois la VM arrêtée, agrandir l'image disque : <code>rbd resize --size=[taille en Mb] [pool]/[volume]</code>
 +
 +  * **Avec :**
 +    * **[taille en Mb] :** la nouvelle taille du //volume// en Mo (exemple : 20480 pour 20G)
 +    * **[pool] :** le nom du //pool//
 +    * **[volume] :** le nom du //volume//
 +  * Une fois le redimensionnement fait, relancer la VM
 +  * Une fois la VM rebootée, il faut faire en sorte d'utiliser cette espace disque supplémentaire. Si vous utilisez //LVM//, vous pouvez suivre la procédure décrite [[informatique:systeme:matos:lvm#augmenter_un_pv|ici]].
 +==== Réduire un volume utilisé comme un disque d'une machine virtuelle ====
 +
 +  * Il faut commencer par réduire la taille disque utiliser sur la VM. Si vous utilisez //LVM//, vous pouvez suivre la procédure décrite [[informatique:systeme:matos:lvm#reduire_un_pv|ici]] jusqu'à l'arrêt pour réduction du disque de la VM.
 +  * Arrêter ensuite la VM
 +
 +<note>Cette procédure étant potentiellement risqué, vous pouvez par précaution effectuer maintenant un //snapshot// du volume de la VM. Si la procédure ne se déroule pas correctement, pour pourrez toujours revenir en arrière et sinon vous pourrez la supprimer.</note>
 +
 +  * Redimensionner ensuite le volume avec la commande suivante : <code>rbd resize --size=[taille en Mb] [pool]/[volume] --allow-shrink</code>
 +  * **Avec :**
 +    * **[taille en Mb] :** la nouvelle taille do //volume// en Mo (exemple : 20480 pour 20G)
 +    * **[pool] :** le nom du //pool//
 +    * **[volume] :** le nom du //volume//
 +  * Relancer ensuite la VM. Si vous utilisé //LVM//, il faudra finir la procédure de redimensionnement décrite [[informatique:systeme:matos:lvm#reduire_un_pv|ici]], à savoir agrandir la partition et le //PV//.
 +
 +
 +==== Créer un snapshot d'un volume ====
 +
 +<code>rbd snap create [pool]/[volume]@[snap]</code>
 +
 +**Avec :**
 +  * **[pool] :** le nom du //pool//
 +  * **[volume] :** le nom du //volume//
 +  * **[snap] :** le nom que vous voulez nommer votre //snapshot//. Ce nom doit être court, ne comporter que des caractères ASCII et sans espace ni caractère //"compliqué"//.
 +
 +==== Lister les snapshot d'un volume ====
 +
 +<code>rbd snap list [pool]/[nom-vm]</code>
 +
 +**Avec :**
 +  * **[pool] :** le nom du //pool//
 +  * **[volume] :** le nom du //volume//
 +
 +==== Remettre un volume à l'état d'un snapshot précédent ====
 +
 +Cette opération consite a écraser toutes les modifications faites depuis un //snapshot//. Cette modification est **irréversible**. Il est cependant possible de faire un nouveau snapshot avant la restauration afin de pouvoir revenir à l'état précédent si nécessaire.
 +
 +<code>rbd snap rollback [pool]/[volume]@[snap]</code>
 +
 +**Avec :**
 +  * **[pool] :** le nom du //pool//
 +  * **[volume] :** le nom du //volume//
 +  * **[snap] :** le nom du //snapshot//
 +
 +<note important>Cette opération peut prendre pas mal de temps. Cette durée augmente en fonction de la taille du //snapshot// et de la quantité de modifications faitent depuis la création du //snapshot//.</note>
 +
 +==== Supprimer un snapshot d'un volume ====
 +
 +<code>rbd snap rm [pool]/[volume]@[snap]</code>
 +
 +**Avec :**
 +  * **[pool] :** le nom du //pool//
 +  * **[volume] :** le nom du //volume//
 +  * **[snap] :** le nom du //snapshot//
  
 ===== Utilisation du cluster Ceph dans Libvirt ===== ===== Utilisation du cluster Ceph dans Libvirt =====
Ligne 182: Ligne 292:
 mount -a</code> mount -a</code>
  
 +  * Déclaration du dépôt [[http://www.easter-eggs.com|Easter-eggs]] proposant des paquets Debian de Livbirt et KVM avec le support de //ceph// : <code>echo "deb http://debian.easter-eggs.org/debian wheezy main libvirt kvm" > /etc/apt/sources.list.d/libvirt.list
 +apt-get update</code>
   * Installation de libvirt et ses dépendances : <code>apt-get install libvirt-bin qemu-kvm netcat-openbsd qemu-utils</code>   * Installation de libvirt et ses dépendances : <code>apt-get install libvirt-bin qemu-kvm netcat-openbsd qemu-utils</code>
  
Ligne 210: Ligne 322:
  
 <note>Le nombre //200// utilisé lors de la création du pool libvirt correspond aux nombres de //Placement Group// calculé selon la méthode officielle expliqué [[http://ceph.com/docs/master/rados/operations/placement-groups/|ici]].</note>  <note>Le nombre //200// utilisé lors de la création du pool libvirt correspond aux nombres de //Placement Group// calculé selon la méthode officielle expliqué [[http://ceph.com/docs/master/rados/operations/placement-groups/|ici]].</note> 
- 
-  * On créé un fichier //XML /tmp/rbd-pool.xml// qui nous permettra de définir le pool au niveau de libvirt : <code><pool type="rbd"> 
-      <name>rbd</name> 
-      <source> 
-        <name>libvirt</name> 
-          <host name='192.168.0.1' port='6789'/> 
-          <host name='192.168.0.2' port='6789'/> 
-          <host name='192.168.0.3' port='6789'/> 
-          <auth username='libvirt' type='ceph'> 
-            <secret uuid='9b*******************************27e'/> 
-          </auth> 
-      </source> 
-</pool></code> 
- 
-  * On créé le pool dans libvirt à partir du fichier *XML* : <code>virsh pool-define /tmp/rbd-pool.xml 
-scp /tmp/rbd-pool.xml 192.168.0.2:/tmp/ 
-ssh 192.168.0.2 "virsh pool-define /tmp/rbd-pool.xml" 
-scp /tmp/rbd-pool.xml 192.168.0.3:/tmp/ 
-ssh 192.168.0.3 "virsh pool-define /tmp/rbd-pool.xml"</code> 
- 
  
 On peut désormais utiliser un volume //ceph// en tant que disque d'une machine virtuelle. Pour cela, voila un exemple de configuration d'un disque //ceph// d'une machine virtuelle : On peut désormais utiliser un volume //ceph// en tant que disque d'une machine virtuelle. Pour cela, voila un exemple de configuration d'un disque //ceph// d'une machine virtuelle :
Ligne 248: Ligne 340:
     </disk></code>     </disk></code>
  
-  +<note>Pour attacher un disque ceph à une VM en cours d'exectution, créé un fichier xml contenant juste la déclaration du disque (juste la balise //<disk/>//) et ajouter le disque ensuite avec la commande suivante : <code>virsh attach-device [nom-vm] [/chemin/fichier.xml] --persistent</code>L'option //--persitent// permet que ce disque soit systématiquement attaché à la VM au moment de son démarrage.</note> 
 +===== Supervision de Ceph avec Nagios ===== 
 + 
 +On va mette ici en place trois checks différent : 
 + 
 +  * //check_ceph_health// : ce plugin vérifie simplement l'état général du cluster avec la commande //ceph health// 
 +  * //check_ceph_status// : ce plugin vérifie l'état général du cluster (//health//, nombre d'OSDs UP, nombre de MONs UP et l'état des PGs) avec la commande //ceph status// 
 +  * //check_ceph_usage// : ce plugin vérifie l'espace disque utilisé dans le cluster via la commande //ceph status// 
 + 
 +Mise en place : 
 + 
 +  * Création d'une clé //authx// pour Nagios (à faire sur //ceph1//) : <code>ceph auth get-or-create client.nagios mon 'allow r' > /etc/ceph/ceph.client.nagios.keyring 
 +scp /etc/ceph/ceph.client.nagios.keyring 192.168.0.2:/etc/ceph/ 
 +ssh root@192.168.0.2 'chown nagios: /etc/ceph/ceph.client.nagios.keyring' 
 +scp /etc/ceph/ceph.client.nagios.keyring 192.168.0.3:/etc/ceph/ 
 +ssh root@192.168.0.3 'chown nagios: /etc/ceph/ceph.client.nagios.keyring'</code> 
 + 
 +  * Installation du plugin : <code>git clone https://github.com/valerytschopp/ceph-nagios-plugins.git /usr/local/src/ceph-nagios-plugins 
 +mkdir -p /usr/local/lib/nagios/plugins 
 +ln -s /usr/local/src/ceph-nagios-plugins/src/check_ceph_health /usr/local/lib/nagios/plugins/check_ceph_health 
 + 
 +git clone http://git.zionetrix.net/git/check_ceph_usage /usr/local/src/check_ceph_usage 
 +ln -s /usr/local/src/check_ceph_usage/check_ceph_usage /usr/local/lib/nagios/plugins/check_ceph_usage 
 + 
 +git clone http://git.zionetrix.net/git/check_ceph_status /usr/local/src/check_ceph_status 
 +ln -s /usr/local/src/check_ceph_status/check_ceph_status /usr/local/lib/nagios/plugins/check_ceph_status</code> 
 + 
 +  * Définition de la configuration du //check// d'//NRPE// (à mettre dans le fichier ///etc/ceph/ceph.client.nagios.keyring// par exemple) : <code>command[check_ceph_health]=/usr/local/lib/nagios/plugins/check_ceph_health -d -i nagios -k /etc/ceph/ceph.client.nagios.keyring 
 +command[check_ceph_usage]=/usr/local/lib/nagios/plugins/check_ceph_usage -i nagios -k /etc/ceph/ceph.client.nagios.keyring --warning-data 50 --critical-data 60 --warning-allocated 80 --critical-allocated 90 
 +command[check_ceph_status]=/usr/local/lib/nagios/plugins/check_ceph_status -i nagios -k /etc/ceph/ceph.client.nagios.keyring</code> 
 + 
 +  * Rechargement de la configuration d'NRPE pour appliquer la modification : <code>service nagios-nrpe-server reload</code> 
 + 
 +<note>La supervision de l'état du cluster peut normalement être fait sur un seul des nœuds du cluster. Vous pouvez par exemple configurer une //VIP// (avec [[informatique:systeme:ha:pacemaker]] par exemple) sur le cluster pour faire la supervision sur celle-ci uniquement.</note>
  • informatique/systeme/ha/ceph.1385494677.txt.gz
  • Dernière modification : 2013/11/26 19:37
  • de bn8