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 20:08] – bn8 | informatique:systeme:ha:ceph [2014/10/16 14:50] (Version actuelle) – [Configuration de libvirt pour utiliser le cluster Ceph] bn8 |
---|
===== 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 3 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 ==== |
{{ :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}} |
==== 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 |
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] |
* 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 |
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> |
| |
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 |
| |
==== Agrandir un volume utilisé comme disque d'une machine virtuelle ==== | ==== 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 | * Arrêter la VM |
* **[volume] :** le nom du //volume// | * **[volume] :** le nom du //volume// |
* Une fois le redimensionnement fait, relancer la VM | * 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//, cela passe par la commande //pvresize//. Pour plus d'informations sur cette étape consulter [[informatique:systeme:matos:lvm|la page du wiki à propos de LVM]]. | * 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 ==== | ==== 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//, il faudra : | * 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. |
* Réduire le //PV// avec la commande //pvresize//. Il est conseillé de réduire plus que nécessaire et de réagrandir ensuite le //PV// à la taille exact du disque après redimensionnement. | |
* Si le //PV// utilise une partition et nom pas un bloc device directement, il faudra également réduire la partition. Pour cela, il faudra simplement la supprimer avec la commande //fdisk// et la récréer à l'identique mise à part sa taille (type LVM //8e//, flag //boot// si nécessaire). Encore une fois il est conseillé de réduire la partition plus de nécessaire. Elle sera ensuite étendu à l'espace maximum une fois la réduction effective. | |
* Arrêter ensuite la VM | * Arrêter ensuite la VM |
| |
* **[pool] :** le nom du //pool// | * **[pool] :** le nom du //pool// |
* **[volume] :** le nom du //volume// | * **[volume] :** le nom du //volume// |
* Relancer ensuite la VM | * 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//. |
* Une fois rebootée, si vous utilisé LVM il faudra : | |
* Si le //PV// utilise une partition et nom pas un //bloc device// directement, il faut étendre au maximum la taille de la partition. Pour cela, il faudra a nouveau à la supprimer et la recréer avec //fdisk// puis redémarrer la VM à nouveau pour que la nouvelle taille soit prise en compte. | |
* Redimensionner le //PV// avec la commande <code>pvresize /dev/vdaX</code> | |
| |
==== Créer un snapshot d'un volume ==== | ==== Créer un snapshot d'un volume ==== |
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> |
| |
| |
<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 : |
</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> |