Thank you for reading this post, don't forget to subscribe!
Замена поврежденного OSD
Если у нас по каким-то причинам один из osd ушел в down - в данном примере это osd 0
ceph osd tree
ID CLASS WEIGHT TYPE NAME STATUS REWEIGHT PRI-AFF
-1 0.05878 root default
-3 0.01959 host tst-vsrv-ceph1
0 hdd 0.00980 osd.0 down 1.00000 1.00000
3 hdd 0.00980 osd.3 up 1.00000 1.00000
-5 0.01959 host tst-vsrv-ceph2
1 hdd 0.00980 osd.1 up 0.90002 1.00000
4 hdd 0.00980 osd.4 up 1.00000 1.00000
-7 0.01959 host tst-vsrv-ceph3
2 hdd 0.00980 osd.2 up 0.90002 1.00000
5 hdd 0.00980 osd.5 up 1.00000 1.00000
И при этом при перезапуске osd.0 он через время падает
systemctl restart ceph-osd@0.service
В этом случае мы можем просто вывести неработающий osd из кластера, пересоздать его и вернуть в кластер
ceph osd out osd.0
ceph osd crush remove osd.0
ceph auth del osd.0
ceph osd rm osd.0
ceph osd tree здесь увидим что наш osd выведен из кластера
umount /var/lib/ceph/osd/ceph-0
lvremove /dev/vg-ceph/ceph важно!!!! Необходимо удалить logical volume, который использовался под osd.0 только после этого получиться создать его и вернуть обратно в кластер
lvcreate -L14G -n ceph vg-ceph
ceph-deploy osd create --data vg-ceph/ceph tst-vsrv-ceph1 (из под сepha, из нужной директории)
ceph osd tree видим что osd 0 появился
Ждем минут 5 пока пройдет ребалансировка Ceph и он возвращается в состояние HEALTH_OK
ceph health detail узнать детально какая osd забилась
ceph osd tree
ceph osd df
!!! Данную процедуру замены можно так же применить, если кластер перешел в состояние HEALTH_ERROR. Так как в данном состоянии расширение Logical Volume нам не поможет, мы можем вывести заполнившийся OSD (увидим мы ее командой ceph health detail), так же удалить LVM и пересоздать ее с нужным размером. В этот момент на кластере происходит ребалансирока по OSD, !!! Дожидаемся её окончания и вводим новый OSD в кластер. Происходит последующая ребалансировка и спустя некоторое время кластер должен вернуться в рабочее состояние.
Удаляем RBD, если она заблокирована и не удаляется
Если мы проверили везде, что rbd, которую удаляем не примонтирована и не входит в map, то один из способов удалить ее следующий:
rbd rm rbd_name
2019-09-19 18:00:45.834 7f0777fff700 -1 librbd::image::RemoveRequest: 0x5600042e5ad0 check_image_watchers: image has watchers - not removing
Removing image: 0% complete…failed.
rbd: error: image still has watchers
This means the image is still open or the client using it crashed. Try again after closing/unmapping it or waiting 30s for the crashed client to timeout.
rbd status rbd_name
Watchers:
watcher=10.242.146.15:0/231140603 client.27127586 cookie=18446462598732840965
ceph osd blacklist add 10.10.10.15:0/231140603
blacklisting 10.10.10.15:0/231140603 until 2019-09-19 19:03:11.057368 (3600 sec)
rbd rm rbd_name
Removing image: 100% complete…done.
ceph osd blacklist rm 10.10.10.15:0/231140603
un-blacklisting 10.10.10.15:0/231140603