multipathd-მა Longhorn-ის ტომი მიითვისა: „mount point busy“, თუმცა არაფერია დამონტაჟებული
პოდი ხუთი დღე Init-ში იდგა, 2413 მონტაჟის მცდელობა, სრულმა რებუტმა არ უშველა. multipathd-მა Longhorn-ის iSCSI მოწყობილობაზე რუკა ააგო და ღიად ეჭირა.
ჩემს სახლის ლაბორატორიაში SonarQube-ის პოდი ხუთი დღე იდგა Init:0/2-ში და ერთსა და იმავე მონტაჟს 2413-ჯერ იმეორებდა:
mount: .../globalmount: /dev/longhorn/pvc-... already mounted or mount point busy.
აშკარა წაკითხვა — ბინძური რებუტის შემდეგ დარჩენილი გაჭედილი mount. ეს არასწორი იყო და მტკიცებულება მარტივია: შეცდომამ ყველა ნოდის სრული power cycle გადაიტანა, ზუსტად ის კი გაჭედილ მონტაჟებს ხსნის.
მიჰყევი მოწყობილობას და არა შეტყობინებას
შეტყობინება მონტაჟის წერტილზე საუბრობს, ამიტომ ჯერ მონტაჟები შევამოწმე:
mount | grep pvc-6e83 || echo "not mounted anywhere"
for f in /proc/[0-9]*/mounts; do grep -q pvc-6e83 "$f" && echo "$f"; done
ცარიელია, არც ერთ mount namespace-ში. ესე იგი, მონტაჟის წერტილი თავისუფალია. შეტყობინების მეორე ნახევარი — „busy“ — მოწყობილობაზეა. ძიება ერთმა ბრძანებამ დაასრულა:
lsof /dev/sdb
# multipath 429 root 10r BLK 8,16
ბლოკური მოწყობილობის vendor და model — IET / VIRTUAL-DISK, ეს Longhorn-ის iSCSI target-ია. multipath -ll-მა კი მის თავზე აგებული რუკა აჩვენა.
ძირეული მიზეზი
Longhorn v1 ძრავა ტომებს iSCSI-ით ჩვეულებრივ /dev/sdX მოწყობილობებად აწვდის. multipathd ოთხივე ვორკერზე ცარიელი blacklist-ით მუშაობდა, ტომი multipath-ის კანდიდატად ჩათვალა, მასზე რუკა ააგო და მოწყობილობა ღიად ეჭირა. mount(8) ამას „already mounted or mount point busy“-ად აცხადებს და არარსებული მონტაჟის საძებნელად გაგზავნის. ეს რებუტისადმი მდგრადობასაც ხსნის: multipathd ადრე ეშვება და ყოველ ჩატვირთვაზე მოწყობილობას თავიდან იჭერს.
მონაცემებს საფრთხე არ ემუქრებოდა: e2fsck -n-მა ცვლილებებამდე სუფთა ფაილური სისტემა აჩვენა.
შესწორება
Longhorn-ის მოწყობილობები blacklist-ში vendor-ითა და product-ით შევიტანე — არა devnode "^sd.*"-ით, რომელიც multipath-ს ყველაფრისთვის თიშავს, — შემდეგ რუკა წავშალე და დემონი გადავტვირთე:
blacklist {
device {
vendor "IET"
product "VIRTUAL-DISK"
}
}
მთავარი იყო ამის გაკეთება ყველა ნოდზე. ერთი ტომი დაიჭირეს, მაგრამ მდგომარეობა ოთხივე ვორკერზე ფარული იყო: Longhorn-ის ნებისმიერი ტომი შეიძლებოდა მიეთვისებინა პოდის შემდეგ რესტარტზე.
დასკვნები
- „already mounted or mount point busy“ ცარიელი
mount-ის დროს ნიშნავს, რომ მოწყობილობა უჭირავთ.lsofბლოკურ მოწყობილობაზე ძიებას ასრულებს. - თუ რებუტი „გაჭედილ“ მდგომარეობას ვერ ხსნის, ის გაჭედილი არ არის — რაღაც ჩატვირთვისას ხელახლა ქმნის.
- Longhorn v1-ისა და
multipath-tools-ის მქონე ყველა ნოდს vendor/product blacklist სჭირდება. დაამატე ნოდების bootstrap-ში. - შეაკეთე კლასი და არა ეგზემპლარი: ერთ ნოდზე ნაპოვნი პრობლემა ხშირად ყველაზეა.