Projet

Général

Profil

Management Cluster Ceph » Historique » Version 56

Aymeric APLU, 23/07/2022 14:44

1 10 Mehdi Abaakouk
{{>toc}}
2 1 Mehdi Abaakouk
3 10 Mehdi Abaakouk
h1. Management Cluster Ceph
4 9 Mehdi Abaakouk
5 8 Mehdi Abaakouk
h2. Liens
6 8 Mehdi Abaakouk
7 45 Mehdi Abaakouk
* [[Cluster with libvirt]]
8 44 Mehdi Abaakouk
* [[HOWTO add a VM]]
9 44 Mehdi Abaakouk
* [[Management_Cluster_Ceph]]
10 44 Mehdi Abaakouk
* [[Ceph]]
11 8 Mehdi Abaakouk
* [[Ceph-Sharing-Disk]]
12 46 Mehdi Abaakouk
* [[Openstack Management TTNN]] (obsolete)
13 44 Mehdi Abaakouk
* [[Openstack Setup VM pas dans openstack]] (obsolete)
14 44 Mehdi Abaakouk
* [[Openstack Installation TTNN]] (obsolete)
15 44 Mehdi Abaakouk
* [[Openstack Installation nouvelle node du cluster]] (obsolete)
16 44 Mehdi Abaakouk
* "Openstack tools for ttnn":/projects/git-tetaneutral-net/repository/openstack-tools
17 8 Mehdi Abaakouk
18 2 Mehdi Abaakouk
h2. Ajout d'un OSD classique
19 2 Mehdi Abaakouk
20 56 Aymeric APLU
Si HDD remplace ssd par hdd
21 55 Aymeric APLU
<pre>
22 55 Aymeric APLU
$ ceph-volume lvm create --crush-device-class ssd --bluestore --data /dev/sde
23 1 Mehdi Abaakouk
## recuperer id osd nouveau ssd:
24 55 Aymeric APLU
</pre>
25 55 Aymeric APLU
26 56 Aymeric APLU
penser a faire reweight :
27 1 Mehdi Abaakouk
28 56 Aymeric APLU
Ensuite, autoriser Ceph à mettre des data dessus WEIGHT == 1 par 1To (ie: 4To -> 4)
29 1 Mehdi Abaakouk
30 56 Aymeric APLU
<pre>
31 56 Aymeric APLU
$ ceph osd crush reweight osd.<ID> <WEIGHT>
32 56 Aymeric APLU
</pre>
33 56 Aymeric APLU
34 56 Aymeric APLU
*ce qui est en dessous, jusqu'à la section suivante, est obsolète ne pas utiliser*
35 56 Aymeric APLU
<pre>
36 56 Aymeric APLU
$ ceph osd crush move osd.XY root=ssd host=gZZ-ssd
37 56 Aymeric APLU
## hdd:
38 56 Aymeric APLU
$ ceph osd crush move osd.XY root=default host=gZZ
39 56 Aymeric APLU
</pre>
40 52 Aymeric APLU
*voir les fonctions helper*
41 20 Mehdi Abaakouk
42 20 Mehdi Abaakouk
<pre>
43 1 Mehdi Abaakouk
$ ceph-disk prepare --zap-disk --cluster-uuid 1fe74663-8dfa-486c-bb80-3bd94c90c967 --fs-type=ext4 /dev/sdX
44 34 Laurent GUERBY
$ tune2fs -c 0 -i 0 -m 0 /dev/sdX1
45 1 Mehdi Abaakouk
$ smartctl --smart=on /dev/sdX  # Pour le monitoring.
46 1 Mehdi Abaakouk
</pre>
47 1 Mehdi Abaakouk
48 1 Mehdi Abaakouk
Récuperer l'id avec (c'est celui tout en bas pas accroché à l'arbre):
49 1 Mehdi Abaakouk
50 1 Mehdi Abaakouk
<pre>
51 1 Mehdi Abaakouk
ceph osd tree
52 1 Mehdi Abaakouk
</pre>
53 1 Mehdi Abaakouk
54 26 Mehdi Abaakouk
*DEBUT WORKAROUND BUG PREPARE*
55 26 Mehdi Abaakouk
56 26 Mehdi Abaakouk
Dans le cas ou l'osd est DOWN après le prepare c'est surement ce bug
57 26 Mehdi Abaakouk
58 26 Mehdi Abaakouk
ID est le premier numero libre d'osd en partant de zero (en bas du ceph osd tree)
59 26 Mehdi Abaakouk
60 26 Mehdi Abaakouk
<pre>
61 26 Mehdi Abaakouk
mkdir /var/lib/ceph/osd/ceph-<ID>
62 26 Mehdi Abaakouk
chown ceph:ceph /var/lib/ceph/osd/ceph-<ID>
63 26 Mehdi Abaakouk
ceph-disk activate /dev/sd<X>1
64 26 Mehdi Abaakouk
systemctl status ceph-osd@<ID>
65 26 Mehdi Abaakouk
</pre>
66 26 Mehdi Abaakouk
67 26 Mehdi Abaakouk
*FIN WORKAROUND BUG PREPARE*
68 26 Mehdi Abaakouk
69 17 Mehdi Abaakouk
Pour un HDD: 
70 2 Mehdi Abaakouk
<pre>
71 2 Mehdi Abaakouk
$ ceph osd crush add osd.<ID> 0 root=default host=<host>
72 1 Mehdi Abaakouk
</pre>
73 1 Mehdi Abaakouk
74 2 Mehdi Abaakouk
Pour un SSD:
75 17 Mehdi Abaakouk
<pre>
76 2 Mehdi Abaakouk
$ ceph osd crush add osd.<ID> 0 root=ssd host=<host>-ssd
77 2 Mehdi Abaakouk
</pre>
78 56 Aymeric APLU
79 2 Mehdi Abaakouk
80 42 Mehdi Abaakouk
Ensuite, autoriser Ceph à mettre des data dessus WEIGHT == 1 par 1To (ie: 4To -> 4)
81 2 Mehdi Abaakouk
82 2 Mehdi Abaakouk
<pre>
83 42 Mehdi Abaakouk
$ ceph osd crush reweight osd.<ID> <WEIGHT>
84 19 Mehdi Abaakouk
</pre>
85 19 Mehdi Abaakouk
86 35 Mehdi Abaakouk
h3. helper
87 35 Mehdi Abaakouk
88 36 Mehdi Abaakouk
<pre>
89 35 Mehdi Abaakouk
add_osd(){
90 35 Mehdi Abaakouk
  dev="$1"
91 35 Mehdi Abaakouk
  type="$2"
92 35 Mehdi Abaakouk
  host=$(hostname -s)
93 35 Mehdi Abaakouk
  [ "$type" == "ssd" ] && host="${host}-ssd"
94 39 Mehdi Abaakouk
95 39 Mehdi Abaakouk
  found=0 ; next=-1 ; for i in $(ceph osd ls); do next=$((next+1)) ; [ $(($i - $next)) -gt 0 ] && found=1 && break; done ; [ $found -eq 0 ] && next=$((next+1))
96 39 Mehdi Abaakouk
97 35 Mehdi Abaakouk
  mkdir /var/lib/ceph/osd/ceph-$next
98 35 Mehdi Abaakouk
  chown ceph:ceph /var/lib/ceph/osd/ceph-$next
99 35 Mehdi Abaakouk
100 41 Mehdi Abaakouk
  ceph-disk prepare --zap-disk --cluster-uuid 1fe74663-8dfa-486c-bb80-3bd94c90c967 --fs-type=ext4 $dev
101 37 Mehdi Abaakouk
  tune2fs -c 0 -i 0 -m 0 ${dev}1
102 1 Mehdi Abaakouk
  smartctl --smart=on $dev
103 37 Mehdi Abaakouk
104 37 Mehdi Abaakouk
  systemctl start ceph-osd@$next
105 35 Mehdi Abaakouk
  systemctl status ceph-osd@$next
106 35 Mehdi Abaakouk
107 38 Mehdi Abaakouk
  sleep 1
108 54 Mehdi Abaakouk
  ceph osd crush add osd.$next 0 root="${type}" host="${host}"
109 35 Mehdi Abaakouk
}
110 36 Mehdi Abaakouk
</pre>
111 35 Mehdi Abaakouk
112 47 Fabien ADAM
Exemple: @add_osd /dev/sdb default@ pour un HDD
113 47 Fabien ADAM
114 53 Aymeric APLU
Une fois un disk (ou ssd) ajouté le disque à un poid de 0. A reweight après (attention ça va lance le déplacement des données).
115 53 Aymeric APLU
116 19 Mehdi Abaakouk
h2. Vider un OSD:
117 19 Mehdi Abaakouk
118 1 Mehdi Abaakouk
<pre>
119 35 Mehdi Abaakouk
vider_osd(){
120 19 Mehdi Abaakouk
  name="$1"
121 19 Mehdi Abaakouk
  ceph osd out ${name}
122 19 Mehdi Abaakouk
  ceph osd crush reweight ${name} 0
123 19 Mehdi Abaakouk
  ceph osd reweight ${name} 0
124 19 Mehdi Abaakouk
}
125 19 Mehdi Abaakouk
</pre>
126 19 Mehdi Abaakouk
127 19 Mehdi Abaakouk
h2. Suppression d'un OSD:
128 19 Mehdi Abaakouk
129 51 Aymeric APLU
si la machine host est toujours présente lancer cette machine avce le numéro de l'osd sur la machine en question  
130 19 Mehdi Abaakouk
<pre>
131 19 Mehdi Abaakouk
remove_osd(){
132 19 Mehdi Abaakouk
 name="$1" 
133 19 Mehdi Abaakouk
 ceph osd out ${name}
134 19 Mehdi Abaakouk
 systemctl stop ceph-osd@${name#osd.}
135 19 Mehdi Abaakouk
 ceph osd crush remove ${name}
136 19 Mehdi Abaakouk
 ceph auth del ${name}
137 19 Mehdi Abaakouk
 ceph osd rm ${name}
138 19 Mehdi Abaakouk
 ceph osd tree
139 19 Mehdi Abaakouk
}
140 19 Mehdi Abaakouk
</pre>
141 47 Fabien ADAM
142 51 Aymeric APLU
si la machine n'est plus présente lancer cette commande avec le numéro de osd depuis n'importe quel machine.
143 50 Aymeric APLU
144 50 Aymeric APLU
<pre>
145 50 Aymeric APLU
remove_osd_without_system(){
146 50 Aymeric APLU
 name="$1" 
147 50 Aymeric APLU
 ceph osd out ${name}
148 50 Aymeric APLU
 ceph osd crush remove ${name}
149 50 Aymeric APLU
 ceph auth del ${name}
150 50 Aymeric APLU
 ceph osd rm ${name}
151 50 Aymeric APLU
 ceph osd tree
152 50 Aymeric APLU
}
153 50 Aymeric APLU
</pre>
154 50 Aymeric APLU
155 50 Aymeric APLU
156 19 Mehdi Abaakouk
Exemple : @remove_osd osd.21@
157 1 Mehdi Abaakouk
158 51 Aymeric APLU
Attention supprimer un osd va lancer le déplacement des données donc faire ça par lot. 
159 49 Aymeric APLU
160 19 Mehdi Abaakouk
h2. Arrêter les IO de recovery:
161 19 Mehdi Abaakouk
162 19 Mehdi Abaakouk
<pre>
163 19 Mehdi Abaakouk
ceph osd set nobackfill 
164 19 Mehdi Abaakouk
ceph osd set norebalance
165 19 Mehdi Abaakouk
ceph osd set norecover
166 19 Mehdi Abaakouk
</pre>
167 19 Mehdi Abaakouk
168 23 Mehdi Abaakouk
h2. Procédure d'upgrade
169 23 Mehdi Abaakouk
170 23 Mehdi Abaakouk
+
171 23 Mehdi Abaakouk
_*/!\Lire la release note (contient très très souvent des trucs à faire en plus) /!\*_+
172 23 Mehdi Abaakouk
173 23 Mehdi Abaakouk
174 23 Mehdi Abaakouk
h4. Upgrade des MONs:
175 23 Mehdi Abaakouk
176 23 Mehdi Abaakouk
Mettre le flags noout:
177 23 Mehdi Abaakouk
178 23 Mehdi Abaakouk
<pre>ceph osd set noout</pre>
179 23 Mehdi Abaakouk
180 23 Mehdi Abaakouk
Sur chaque MONs (g1/g2/g3)
181 23 Mehdi Abaakouk
<pre>
182 23 Mehdi Abaakouk
apt-get upgrade -y
183 23 Mehdi Abaakouk
systemctl restart ceph-mon@g*
184 23 Mehdi Abaakouk
ceph -s
185 23 Mehdi Abaakouk
</pre>
186 23 Mehdi Abaakouk
187 23 Mehdi Abaakouk
Note que seulement le node 'leader/master' va provoquer une micro/nano coupure, souvent c'est même invisible.
188 23 Mehdi Abaakouk
189 23 Mehdi Abaakouk
h4. Upgrade des OSDs:
190 23 Mehdi Abaakouk
191 23 Mehdi Abaakouk
Pour chaque machine
192 23 Mehdi Abaakouk
<pre>
193 23 Mehdi Abaakouk
apt-get upgrade -y
194 23 Mehdi Abaakouk
systemctl restart ceph-osd@*
195 23 Mehdi Abaakouk
</pre>
196 23 Mehdi Abaakouk
197 23 Mehdi Abaakouk
Puis attendre que le recovery termine avant de faire la suivante.
198 23 Mehdi Abaakouk
199 23 Mehdi Abaakouk
Une fois toutes les OSDs upgrader et relancer, faire:
200 23 Mehdi Abaakouk
201 23 Mehdi Abaakouk
<pre>ceph osd unset noout</pre>
202 23 Mehdi Abaakouk
203 19 Mehdi Abaakouk
h2. Remplacement à froid d'un tier cache:
204 19 Mehdi Abaakouk
205 19 Mehdi Abaakouk
upstream  doc: http://docs.ceph.com/docs/master/rados/operations/cache-tiering/
206 19 Mehdi Abaakouk
207 19 Mehdi Abaakouk
<pre>
208 19 Mehdi Abaakouk
ceph osd tier cache-mode ec8p2c forward
209 19 Mehdi Abaakouk
rados -p ec8p2c cache-flush-evict-all
210 19 Mehdi Abaakouk
ceph osd tier remove-overlay ec8p2
211 19 Mehdi Abaakouk
ceph osd tier remove ec8p2 ec8p2c
212 19 Mehdi Abaakouk
213 19 Mehdi Abaakouk
rados rmpool ec8p2c ec8p2c  --yes-i-really-really-mean-ita
214 19 Mehdi Abaakouk
ceph osd pool create ec8p2c 128 128 replicated
215 19 Mehdi Abaakouk
216 19 Mehdi Abaakouk
ceph osd tier add ec8p2 ec8p2c
217 19 Mehdi Abaakouk
ceph osd tier cache-mode ec8p2c writeback
218 19 Mehdi Abaakouk
ceph osd tier set-overlay ec8p2 ec8p2c
219 19 Mehdi Abaakouk
220 19 Mehdi Abaakouk
ceph osd pool set ec8p2c size 3
221 19 Mehdi Abaakouk
ceph osd pool set ec8p2c min_size 2
222 19 Mehdi Abaakouk
ceph osd pool set ec8p2c hit_set_type bloom
223 19 Mehdi Abaakouk
224 19 Mehdi Abaakouk
ceph osd pool set ec8p2c hit_set_count 1
225 19 Mehdi Abaakouk
ceph osd pool set ec8p2c hit_set_period 3600
226 19 Mehdi Abaakouk
ceph osd pool set ec8p2c target_max_bytes 200000000000
227 19 Mehdi Abaakouk
ceph osd pool set ec8p2c target_max_objects 10000000
228 19 Mehdi Abaakouk
ceph osd pool set ec8p2c cache_target_dirty_ratio 0.4
229 19 Mehdi Abaakouk
ceph osd pool set ec8p2c cache_target_full_ratio 0.8
230 19 Mehdi Abaakouk
</pre>
231 19 Mehdi Abaakouk
232 16 Mehdi Abaakouk
h2. Ajout d'un OSD qui partage le SSD avec l'OS (OBSOLETE PLUS COMPATIBLE AVEC LES FUTURES VERSION DE CEPH)
233 2 Mehdi Abaakouk
234 2 Mehdi Abaakouk
235 2 Mehdi Abaakouk
En général avec ceph, on donne un disque, ceph créé 2 partitions une pour le journal de l'OSD, l'autre pour les datas
236 2 Mehdi Abaakouk
mais pour le SSD de tetaneutral qui a aussi l'OS, voici la méthode
237 2 Mehdi Abaakouk
238 2 Mehdi Abaakouk
Création manuelle de la partition de data ceph /dev/sda2 ici
239 7 Mehdi Abaakouk
240 7 Mehdi Abaakouk
Debian (MBR format):
241 2 Mehdi Abaakouk
<pre>
242 5 Mehdi Abaakouk
apt-get install partprobe
243 5 Mehdi Abaakouk
fdisk /dev/sda
244 5 Mehdi Abaakouk
245 2 Mehdi Abaakouk
n
246 14 Mehdi Abaakouk
p
247 14 Mehdi Abaakouk
<enter>
248 14 Mehdi Abaakouk
<enter>
249 14 Mehdi Abaakouk
<enter>
250 14 Mehdi Abaakouk
<enter>
251 14 Mehdi Abaakouk
w
252 14 Mehdi Abaakouk
253 14 Mehdi Abaakouk
$ partprobe
254 14 Mehdi Abaakouk
</pre>
255 14 Mehdi Abaakouk
256 14 Mehdi Abaakouk
Ubuntu (GPT format):
257 2 Mehdi Abaakouk
<pre>
258 2 Mehdi Abaakouk
# parted /dev/sdb
259 2 Mehdi Abaakouk
GNU Parted 2.3
260 13 Mehdi Abaakouk
Using /dev/sdb
261 13 Mehdi Abaakouk
Welcome to GNU Parted! Type 'help' to view a list of commands.
262 13 Mehdi Abaakouk
(parted) print                                                            
263 18 Mehdi Abaakouk
Model: ATA SAMSUNG MZ7KM480 (scsi)
264 13 Mehdi Abaakouk
Disk /dev/sdb: 480GB
265 13 Mehdi Abaakouk
Sector size (logical/physical): 512B/512B
266 13 Mehdi Abaakouk
Partition Table: msdos
267 13 Mehdi Abaakouk
268 13 Mehdi Abaakouk
Number  Start   End     Size    Type     File system     Flags
269 2 Mehdi Abaakouk
 1      1049kB  20.0GB  20.0GB  primary  ext4            boot
270 2 Mehdi Abaakouk
 2      20.0GB  36.0GB  16.0GB  primary  linux-swap(v1)
271 15 Mehdi Abaakouk
272 15 Mehdi Abaakouk
(parted) mkpart                                                           
273 15 Mehdi Abaakouk
Partition type?  primary/extended?                                        
274 15 Mehdi Abaakouk
Partition type?  primary/extended? primary
275 15 Mehdi Abaakouk
File system type?  [ext2]? xfs                                            
276 15 Mehdi Abaakouk
Start?                                                                    
277 15 Mehdi Abaakouk
Start? 36.0GB                                                             
278 15 Mehdi Abaakouk
End? 100%                                                                 
279 1 Mehdi Abaakouk
(parted) print                                                            
280 1 Mehdi Abaakouk
Model: ATA SAMSUNG MZ7KM480 (scsi)
281 1 Mehdi Abaakouk
Disk /dev/sdb: 480GB
282 1 Mehdi Abaakouk
Sector size (logical/physical): 512B/512B
283 1 Mehdi Abaakouk
Partition Table: msdos
284 1 Mehdi Abaakouk
285 1 Mehdi Abaakouk
Number  Start   End     Size    Type     File system     Flags
286 1 Mehdi Abaakouk
 1      1049kB  20.0GB  20.0GB  primary  ext4            boot
287 1 Mehdi Abaakouk
 2      20.0GB  36.0GB  16.0GB  primary  linux-swap(v1)
288 1 Mehdi Abaakouk
 3      36.0GB  480GB   444GB   primary
289 1 Mehdi Abaakouk
290 1 Mehdi Abaakouk
(parted) quit                                                             
291 1 Mehdi Abaakouk
Information: You may need to update /etc/fstab.
292 1 Mehdi Abaakouk
</pre>
293 1 Mehdi Abaakouk
294 1 Mehdi Abaakouk
On prepare le disk comme normalement
295 1 Mehdi Abaakouk
296 1 Mehdi Abaakouk
<pre>
297 1 Mehdi Abaakouk
ceph-disk prepare --fs-type=ext4 --cluster-uuid 1fe74663-8dfa-486c-bb80-3bd94c90c967 /dev/sda2
298 1 Mehdi Abaakouk
ceph-disk activate /dev/sda2
299 1 Mehdi Abaakouk
ceph osd crush add osd.<ID> 0 root=ssd host=g3-ssd
300 1 Mehdi Abaakouk
</pre>
301 1 Mehdi Abaakouk
302 1 Mehdi Abaakouk
Ensuite, autoriser Ceph à mettre des data dessus:
303 1 Mehdi Abaakouk
304 1 Mehdi Abaakouk
<pre>
305 1 Mehdi Abaakouk
$ /root/tools/ceph-reweight-osds.sh osd.<ID>
306 1 Mehdi Abaakouk
</pre>
307 28 Laurent GUERBY
308 48 Fabien ADAM
h2. Remplacement des disques et des OSD correspondants
309 48 Fabien ADAM
310 48 Fabien ADAM
Régulièrement les disques tombent en panne, particulièrement au sein de l'asso où la température des différentes salles est élevée.
311 48 Fabien ADAM
312 48 Fabien ADAM
Voici la procédure générale à suivre pour maintenir le cluster Ceph :
313 48 Fabien ADAM
314 48 Fabien ADAM
+Partie 1+ : opérations matérielles
315 48 Fabien ADAM
316 48 Fabien ADAM
# Migrer les VMs sur un autre hôte (cf partie Openstack/Libvirt) *OU* prévoir l'arrêt des VM suivi d'un remplacement du/des disque(s) rapide
317 48 Fabien ADAM
# Identifier le(s) disque(s) à remplacer
318 48 Fabien ADAM
## Récupérer le(s) OSD down de la machine @ceph osd tree@
319 48 Fabien ADAM
## Trouver le(s) modèle(s) ainsi que sa taille. @lsblk -S@
320 48 Fabien ADAM
# Éteindre la machine, remplacer le(s) disque(s) défectueu(x), et la redémarrer
321 48 Fabien ADAM
## En cas de problème, brancher l'écran pour valider éventuellement un changement dans le bios, ou comprendre tout autre problème
322 48 Fabien ADAM
# Rédémarrer les VM si nécessaire
323 48 Fabien ADAM
324 48 Fabien ADAM
+Partie 2+ : modification du cluster Ceph
325 48 Fabien ADAM
326 48 Fabien ADAM
Cette partie peut se faire à distance tranquillement.
327 48 Fabien ADAM
328 48 Fabien ADAM
+Important+ : prévoir de faire d'abord _toutes les opérations sur les SSD_, puis ensuite _toutes les opérations sur les HDD_. L'intérêt est de réduire la RAM (et le CPU) utilisé par les OSD pendant la récupération, qui peut ralentir fortement le fonctionnement du cluster Ceph, et donc des VM qui l'exploite, avec des load qui explosent
329 48 Fabien ADAM
330 48 Fabien ADAM
# Bloquer les opérations de réparation (cf paragraphe dédié)
331 48 Fabien ADAM
# Supprimer les OSD correspondants aux anciens disques, sur chaque machine concernée
332 48 Fabien ADAM
## Repérer les OSD down dans @ceph osd tree@
333 48 Fabien ADAM
## Copier-coller la fonction _remove_osd_ (cf paragraphe dédié), et l'appeler
334 48 Fabien ADAM
# Ajouter les nouveaux OSD, sur chaque machine concernée
335 48 Fabien ADAM
## Repérer les disques inutilisé dans @lsblk -S@
336 48 Fabien ADAM
## Copier-coller la fonction _add_osd_ (cf paragraphe dédié), et l'appeler
337 48 Fabien ADAM
## Ajouter un poids à chaque nouvel OSD, correspondant à la taille du disque en To (exemple : @ceph osd crush reweight osd.21 0.5@)
338 48 Fabien ADAM
# Une fois tous les OSD d'un type ajouté, débloquer les opérations de réparation, en utilisant la commande _unset_ à la place de _set_
339 48 Fabien ADAM
# Suivre l'avancement, avec le pourcentage d'_objects misplaced_ qui va progressivement revenir à 0 : @ceph -s@
340 48 Fabien ADAM
341 48 Fabien ADAM
Une fois que le cluster est rétabli pour un type de disque, faire de même avec l'autre type.
342 48 Fabien ADAM
343 28 Laurent GUERBY
h2. inconsistent pg
344 28 Laurent GUERBY
345 32 Laurent GUERBY
* Analyse d'une erreur de coherence detectee par ceph
346 32 Laurent GUERBY
** https://lists.tetaneutral.net/pipermail/technique/2017-August/002859.html
347 32 Laurent GUERBY
348 28 Laurent GUERBY
<pre>
349 28 Laurent GUERBY
root@g1:~# ceph health detail
350 28 Laurent GUERBY
HEALTH_ERR 1 pgs inconsistent; 2 scrub errors
351 28 Laurent GUERBY
pg 58.22d is active+clean+inconsistent, acting [9,47,37]
352 28 Laurent GUERBY
2 scrub errors
353 28 Laurent GUERBY
root@g1:~# rados list-inconsistent-obj 58.22d  --format=json-pretty
354 28 Laurent GUERBY
{
355 28 Laurent GUERBY
    "epoch": 269000,
356 28 Laurent GUERBY
    "inconsistents": [
357 28 Laurent GUERBY
        {
358 28 Laurent GUERBY
            "object": {
359 28 Laurent GUERBY
                "name": "rbd_data.11f20f75aac8266.00000000000f79f9",
360 28 Laurent GUERBY
                "nspace": "",
361 28 Laurent GUERBY
                "locator": "",
362 28 Laurent GUERBY
                "snap": "head",
363 28 Laurent GUERBY
                "version": 9894452
364 28 Laurent GUERBY
            },
365 28 Laurent GUERBY
            "errors": [
366 28 Laurent GUERBY
                "data_digest_mismatch"
367 28 Laurent GUERBY
            ],
368 28 Laurent GUERBY
            "union_shard_errors": [
369 28 Laurent GUERBY
                "data_digest_mismatch_oi"
370 28 Laurent GUERBY
            ],
371 31 Laurent GUERBY
            "selected_object_info": 
372 31 Laurent GUERBY
"58:b453643a:::rbd_data.11f20f75aac8266.00000000000f79f9:head(261163'9281748 osd.9.0:6221608 dirty|data_digest|omap_digest s 4194304 uv 9894452 dd 2193d055 od ffffffff alloc_hint [0 0])",
373 28 Laurent GUERBY
            "shards": [
374 28 Laurent GUERBY
                {
375 28 Laurent GUERBY
                    "osd": 9,
376 28 Laurent GUERBY
                    "errors": [],
377 28 Laurent GUERBY
                    "size": 4194304,
378 28 Laurent GUERBY
                    "omap_digest": "0xffffffff",
379 28 Laurent GUERBY
                    "data_digest": "0x2193d055"
380 28 Laurent GUERBY
                },
381 28 Laurent GUERBY
                {
382 28 Laurent GUERBY
                    "osd": 37,
383 28 Laurent GUERBY
                    "errors": [
384 28 Laurent GUERBY
                        "data_digest_mismatch_oi"
385 28 Laurent GUERBY
                    ],
386 28 Laurent GUERBY
                    "size": 4194304,
387 28 Laurent GUERBY
                    "omap_digest": "0xffffffff",
388 28 Laurent GUERBY
                    "data_digest": "0x05891fb4"
389 28 Laurent GUERBY
                },
390 28 Laurent GUERBY
                {
391 28 Laurent GUERBY
                    "osd": 47,
392 28 Laurent GUERBY
                    "errors": [],
393 28 Laurent GUERBY
                    "size": 4194304,
394 28 Laurent GUERBY
                    "omap_digest": "0xffffffff",
395 28 Laurent GUERBY
                    "data_digest": "0x2193d055"
396 28 Laurent GUERBY
                }
397 28 Laurent GUERBY
            ]
398 28 Laurent GUERBY
        }
399 28 Laurent GUERBY
    ]
400 28 Laurent GUERBY
}
401 29 Laurent GUERBY
root@g1:~# ceph osd map disks rbd_data.11f20f75aac8266.00000000000f79f9
402 29 Laurent GUERBY
osdmap e269110 pool 'disks' (58) object 'rbd_data.11f20f75aac8266.00000000000f79f9' -> pg 58.5c26ca2d (58.22d) -> up ([9,47,37], p9) acting ([9,47,37], p9)
403 29 Laurent GUERBY
404 30 Laurent GUERBY
405 30 Laurent GUERBY
root@g8:/var/lib/ceph/osd/ceph-9/current/58.22d_head# find . -name '*11f20f75aac8266.00000000000f79f9*'
406 30 Laurent GUERBY
./DIR_D/DIR_2/DIR_A/DIR_C/rbd\udata.11f20f75aac8266.00000000000f79f9__head_5C26CA2D__3a
407 30 Laurent GUERBY
408 30 Laurent GUERBY
root@g10:/var/lib/ceph/osd/ceph-37/current/58.22d_head# find . -name '*11f20f75aac8266.00000000000f79f9*'
409 30 Laurent GUERBY
./DIR_D/DIR_2/DIR_A/DIR_C/rbd\udata.11f20f75aac8266.00000000000f79f9__head_5C26CA2D__3a
410 30 Laurent GUERBY
411 30 Laurent GUERBY
$ scp g8:/var/lib/ceph/osd/ceph-9/current/58.22d_head/DIR_D/DIR_2/DIR_A/DIR_C/rbd*data.11f20f75aac8266.00000000000f79f9__head_5C26CA2D__3a g8data
412 30 Laurent GUERBY
$ scp g10:/var/lib/ceph/osd/ceph-37/current/58.22d_head/DIR_D/DIR_2/DIR_A/DIR_C/rbd*data.11f20f75aac8266.00000000000f79f9__head_5C26CA2D__3a g10data
413 30 Laurent GUERBY
414 30 Laurent GUERBY
$ md5sum *
415 30 Laurent GUERBY
bd85c0ef1f30829ce07e5f9152ac2d2f  g10data
416 30 Laurent GUERBY
4297d0bc373e6603e0ad842702e0ecaa  g8data
417 30 Laurent GUERBY
$ $ diff -u <(od -x g10data) <(od -x g8data)
418 30 Laurent GUERBY
--- /dev/fd/63	2017-08-13 10:43:52.837097740 +0200
419 30 Laurent GUERBY
+++ /dev/fd/62	2017-08-13 10:43:52.833097808 +0200
420 30 Laurent GUERBY
@@ -2617,7 +2617,7 @@
421 30 Laurent GUERBY
 0121600 439b 14f4 bb4c 5f14 6ff7 4393 9ff8 a9a9
422 30 Laurent GUERBY
 0121620 29a8 56a4 1133 b6a8 2206 4821 2f42 4b2c
423 30 Laurent GUERBY
 0121640 3d86 41a2 785f 9785 8b48 4243 e7b9 f0aa
424 30 Laurent GUERBY
-0121660 29b6 be0c 0455 bf97 1c0d 49e5 75dd e1ed
425 30 Laurent GUERBY
+0121660 29a6 be0c 0455 bf97 1c0d 49e5 75dd e1ed
426 30 Laurent GUERBY
 0121700 2519 d6ac 1047 1111 0344 38be 27a1 db07
427 30 Laurent GUERBY
 0121720 dff6 c002 75d8 4396 6154 eba9 3abd 5d20
428 30 Laurent GUERBY
 0121740 8ae4 e63a 298b d754 0208 9705 1bb8 3685
429 30 Laurent GUERBY
</pre>
430 30 Laurent GUERBY
431 30 Laurent GUERBY
Donc un seul bit flip 29b6 vs 29a6  
432 30 Laurent GUERBY
433 30 Laurent GUERBY
<pre>
434 30 Laurent GUERBY
>>> bin(0xa)
435 30 Laurent GUERBY
'0b1010'
436 30 Laurent GUERBY
>>> bin(0xb)
437 30 Laurent GUERBY
'0b1011'
438 28 Laurent GUERBY
</pre>
439 29 Laurent GUERBY
440 29 Laurent GUERBY
* http://cephnotes.ksperis.com/blog/2013/08/20/ceph-osd-where-is-my-data
441 33 Laurent GUERBY
* https://superuser.com/questions/969889/what-is-the-granularity-of-a-hard-disk-ure-unrecoverable-read-error