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 |