WikiMiNET

La documentation technique et administrative

Outils pour utilisateurs

Outils du site


wiki:cluster:ceph:remplacement_disque

Différences

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

Lien vers cette vue comparative

wiki:cluster:ceph:remplacement_disque [2018/07/21 17:41]
sowarks
wiki:cluster:ceph:remplacement_disque [2020/06/27 18:16]
Ligne 1: Ligne 1:
-====== Remplacer un disque sur le cluster Ceph ====== 
  
-<WRAP center round info 60%> 
-Sur phobos, il n'est pas possible de changer un disque à chaud, il faut donc reboot et aller sur le contrôleur SATA du serveur (F10 au démarrage), ajouter un nouveau disque virtuel. Et voilà!! 
-</WRAP> 
- 
-<WRAP center round todo 60%> 
-disque signe de défaillances.... explications, etc 
-</WRAP> 
- 
-Pour des erreurs de lecture sur le disque vous allez probablement avoir des erreurs sur les placements groups, du type : ''scrub errors; Possible data damage: X pg inconsistent'', que vous pourrez observer grâce à ''ceph status'' 
- 
-Vous avez la documentation officielle de ceph sur le [[http://docs.ceph.com/docs/master/rados/troubleshooting/troubleshooting-pg/|troubleshooting des pgs]] pour vous aider. 
- 
-Normalement ce type d'erreur met votre cluster dans l'état ''HEALTH_ERR'', donc vous êtes prévenus. 
- 
-Pour connaître exactement le problème, vous pouvez utiliser ''ceph health status'' ou ''rados list-inconsistent-pg POOL_NAME''. Je vous conseille le premier qui va vous montrer directement tous les placements groups affectés. 
- 
-On regarde donc pour chaque pg quel est le problème grâce à <code>rados list-inconsistent-obj PG_ID --format=json-pretty</code> 
- 
- 
-Si dans les champs errors vous voyiez //read_errors//, cela veut sans doute dire que l'un (ou plusieurs) des disques sur lesquels se trouve le placement group, commence à donner des signes de faiblesse. 
- 
-===== Identifier le disque ===== 
- 
-Grâce à la commande qui liste les objets affectés vous remarquez sans doute qu'un seul (j'espère pour vous) des OSD est affectés. 
- 
-Bon donc on a l'ID de l'OSD, maintenant il nous faut récupérer le disque correspondant, pour pouvoir tester le disque pour savoir si on le remplace ou non. Mais ce n'est pas avec un simple ''lsblk'' que vous allez pouvoir connaître le disque associé.  
-On identifie la machine qui possède l'OSD avec un simple ''ceph osd tree'', puis on identifie le volume lvm associé grâce à ''ceph-volume lvm list'' (sur l'hôte concerné bien sur). 
-On a donc l'identifiant du volume logique grâce au champ ''block device''. 
-Un petit ''lsblk'' avec l'aide de ''grep'' et le tour et joué. Attention vous remarquerez que les tirets sont doublés dans la sortie de ''lsblk'' pour identifier les volumes (sauf celui qui sépare le vg du lv dans le nom), donc vous aurez probablement à doubler les tirets dans le nom du volume logique, remplacer le / par un simple tiret. 
- 
-Parce qu'on aime les one-liners (pas sur qu'il fonctionne encore dans quelques années), en voici un qui à partir de l'OSD vous donne le disque associé (<color #ed1c24>remplacer **X** par l'ID de l'OSD</color>): 
-<code> 
-lsblk | grep -B1 $(ceph-volume lvm list | grep -A14 osd.X | tail -n1 \ 
- | cut -d'/' -f3,4 | sed 's/\-/\-\-/g' | tr '/' '-') 
-</code> 
- 
-===== Tests sur le disque ===== 
- 
-Maintenant que le disque est identifié, il nous reste plus qu'à le tester et prendre une décision. 
-Pour ça on utilise l'outil de référence : [[https://www.smartmontools.org/|smartmontools]]. 
-On peut déjà regarder l'état de santé du disque avec :<code> smartctl -H /dev/sdX</code> 
- 
-Puis tester le disque grâce à l'option ''-t''. Je vous invite à regarder le manuel pour voir les différences entre les types de tests. 
- 
- 
-<WRAP center round important 60%> 
-Le test de santé peut être **PASS**, bien que le disque cause des erreurs, et **PASS** ne veut pas forcément dire garder le disque. 
-</WRAP> 
- 
-===== Remplacer le disque ===== 
- 
- 
-C'est bon, vous avez décidé de remplacer le disque. 
- 
-Pour vous aider il y a la documentation officielle de ceph : [[http://docs.ceph.com/docs/master/rados/operations/add-or-rm-osds/|ajouter/enlever des OSDs]], et [[https://ceph.com/geen-categorie/admin-guide-replacing-a-failed-disk-in-a-ceph-cluster/|une page sur leur blog]], qui vous montre d'ailleurs que dans certains cas, Ceph lui-même va éteindre l'OSD quand le disque est défaillant. 
- 
- 
- 
-==== Si vous vous fichez des données sur le(s) disque(s) (grâce à votre politique de réplication) ==== 
- 
-Vous pouvez directement suivre l'extrait de documentation ci-dessous mais en n'oubliant pas que si vous utilisez le cache de bluestore il faut préciser ''--block.db'' dans le ''prepare'': 
-<code> 
-ceph-volume lvm  prepare --osd-id {id} --data /dev/sdX --block.db /dev/sdY 
-</code> 
- 
-[[http://docs.ceph.com/docs/master/rados/operations/add-or-rm-osds/#replacing-an-osd|Extrait de la documentation]] 
- 
-==== Si vous avez absolument besoin de récupérer des données sur le(s) disque(s) ==== 
- 
- 
-<WRAP center round important 60%> 
-Je répète : Si vous avez absolument besoin de récupérer des données sur le(s) disque(s) 
-</WRAP> 
- 
- 
-On commence par sortir l'OSD du cluster : 
-<code>ceph osd out osd.X</code> 
- 
-Il ne vous reste plus qu'à attendre que Ceph déplace les données dont il ne peut pas se passer si l'OSD est down : les PGs qui sont présents uniquement sur le disque vont être déplacés ailleurs. C'est ce qui arrive si vous n'avez pas de réplication ni de correction d'erreur (erasure code qui est l'équivalent du RAID5), vos données qui ne pourront être lues sur le disque seront perdues, il faudra alors évaluer les conséquences (refaire des machines virtuelles, re-télécharger du contenu,...) 
- 
-Vous pouvez observez le déplacement des PGs avec 
-<code> ceph -w </code> 
-qui de manière générale vous affiche ce que fait le cluster lorsqu'il n'est pas dans l'état HEALTH_OK. 
- 
-Dans le cas où des données sont introuvables, je vous conseille de vous référez à la documentation officielle :  [[http://docs.ceph.com/docs/master/rados/troubleshooting/troubleshooting-pg/|troubleshooting des pgs]] 
- 
-Une fois que vous avez réussi à revenir dans un état correct, on stoppe l'OSD grâce à : 
-<code>ceph osd down OSD_ID</code> 
- 
-On vérifie que le service est bien down :  
-<code> 
-ceph osd tree 
-systemctl status ceph-osd@OSD_ID.service 
-</code> 
- 
-Si ce n'est pas le cas, éteignez l'OSD avec systemd : 
-<code>systemctl stop ceph-osd@OSD_ID.service</code> 
- 
-Ensuite on enlève l'OSD de la crushmap, pour que ceph déplace les objets qui étaient présents sur l'OSD ailleurs, grâce à la politique de réplication : les PGs présents sur le disque sont déplacés grâce aux réplicas. 
-<code>ceph osd crush remove osd.OSD_ID</code> 
- 
-Encore une fois vous allez devoir attendre. Une fois que l'étape de récupération des données est terminée, vous pouvez supprimer les clés de l'OSD: 
-<code>ceph auth del osd.OSD_ID</code> 
-Puis le supprimer: 
-<code>ceph osd rm osd.OSD_ID</code> 
- 
- 
-Pour identifier le disque dans le serveur vous pouvez essayer de trouver le disque dont la LED reste éteinte, pour confirmer votre supposition vous pouvez utiliser : 
-Attention à bien effectuer cette commande sur le disque que vous allez remplacer, sinon vous allez perdre des données. 
-<code>dd if=/dev/zero of=/dev/sdX bs=1M</code> 
-La LED devrait s'allumer en continu, et rester allumé après un ''Control-C'', à cause du délai entre écriture demandée et écriture effectuée. 
- 
-Vous pouvez maintenant retirer le disque et le remplacer. 
- 
-Vous pouvez donc identifier le nouveau disque et recréer un OSD. Bien penser à spécifier la partition de cache si vous utiliser bluestore avec du cache. Vous pouvez l'identifier en cherchant celle qui manque dans : 
-<code>ceph-volume lvm list</code> 
- 
-Si vous utilisez **ceph-deploy** merci de vous réferer au blog cité plus haut. 
- 
-Vous pouvez donc lancer un : 
-<code>ceph osd create</code> 
-Cela va vous donner l'ID de l'OSD qui devrait, si vous avez bien supprimé le précédent, être égal à ce dernier, et donc créer l'osd. 
- 
-/dev/sdX : votre nouveau disque 
- 
-/dev/sdY : votre cache utilisé pour cet OSD 
-<code> 
-ceph-volume lvm zap /dev/sdX 
-ceph-volume lvm prepare --osd-id OSD_ID --data /dev/sdX --block.db /dev/sdY 
-</code> 
- 
-Avec ''ceph-volume lvm list'' récupérer le FSID de l'OSD (osd fsid), et : 
-<code>ceph-volume lvm activate ID FSID</code> 
- 
-Et voilà ! 
- 
- --- //[[varens@minet.net|Romain Cherré]] 2018/06/16 21:56// 
wiki/cluster/ceph/remplacement_disque.txt · Dernière modification: 2020/06/27 18:16 (modification externe)