iSCSI orqali Ceph - yoki gazakda turgan holda chang'i uchish

Oramizda (tsefovodov) "professional ekstremal" ni yoqtirmaydiganlar bormi?

Bu dargumon - aks holda biz bu juda qiziqarli va kulgili mahsulot bilan aylanib o'tirmagan bo'lardik.

Ceph operatsiyasida ishtirok etganlarning ko'pchiligi tez-tez bo'lmagan (aniqrog'i juda kamdan-kam), lekin ba'zida talab qilinadigan holatlarga duch kelishgan - Cephni iSCSI yoki FC orqali ulash. Nima uchun? Masalan, Ceph-dan Windows yoki Solaris serveriga biron sababga ko'ra virtualizatsiya qilinmagan rasmni yuboring. Yoki virtuallashtirilgan, ammo Cephni bajara olmaydigan gipervisordan foydalanish - va biz bilganimizdek, ular juda ko'p. Masalan? Xo'sh, masalan, faol foydalaniladigan HyperV yoki ESXi. Va agar vazifa Cephdan mehmon mashinasiga tasvirni taqdim etishdan kelib chiqsa, bu juda hayajonli vazifaga aylanadi.

Shunday qilib, berilgan:

  1. allaqachon ishlayotgan Ceph klasteri
  2. iSCSI orqali taqdim etilishi kerak bo'lgan allaqachon mavjud tasvir
  3. Hovuz nomi mypool, rasm nomi mening tasvirim

Boshlanishi?

Birinchidan, biz FC yoki iSCSI haqida gapirganda, bizda tashabbuskor va maqsad kabi ob'ektlar mavjud. Maqsad aslida server, tashabbuskor esa mijoz. Bizning vazifamiz Ceph tasvirini minimal harakat bilan tashabbuskorga topshirishdir. Bu biz maqsadni kengaytirishimiz kerakligini anglatadi. Lekin qayerda, qaysi kompyuterda?

Yaxshiyamki, Ceph klasterida bizda IP manzili aniqlangan va Ceph ning eng muhim komponentlaridan biri sozlangan kamida bitta komponent mavjud va bu komponent monitor hisoblanadi. Shunga ko'ra, biz monitorga iSCSI nishonini o'rnatamiz (va bir vaqtning o'zida hech bo'lmaganda testlar uchun tashabbuskor). Men buni CentOS-da qildim, lekin yechim boshqa har qanday tarqatish uchun ham mos keladi - siz paketlarni tarqatishda maqbul bo'lgan tarzda o'rnatishingiz kerak.

# yum -y install iscsi-initiator-utils targetcli

O'rnatilgan paketlarning maqsadi nima?

  • targetcli β€” Linux yadrosiga o'rnatilgan SCSI maqsadini boshqarish uchun yordamchi dastur
  • iscsi-initiator-utils β€” Linux yadrosiga o'rnatilgan iSCSI tashabbuskorini boshqarish uchun foydalaniladigan yordamchi dasturlarga ega paket

Tasvirni iSCSI orqali tashabbuskorga yuborish uchun hodisalarni ishlab chiqishning ikkita varianti mavjud - maqsadning foydalanuvchi maydoni orqa qismidan foydalaning yoki tasvirni operatsion tizimga ko'rinadigan blokli qurilma sifatida ulang va uni iSCSI orqali eksport qiling. Biz ikkinchi yo'ldan boramiz - foydalanuvchilar maydonining orqa qismi hali ham "eksperimental" holatda va unumli foydalanishga biroz tayyor emas. Bundan tashqari, u bilan tuzoqlar bor, ular haqida siz ko'p gapirishingiz va (oh dahshat!) bahslashishingiz mumkin.

Agar biz uzoq vaqt qo'llab-quvvatlash tsikliga ega bo'lgan biroz barqaror taqsimotdan foydalansak, bizda mavjud bo'lgan yadro qadimgi, qadimiy versiyadir. Masalan, CentOS7 da 3.10.*, CentOS8 da 4.19. Va bizni kamida 5.3 (aniqrog'i 5.4) va undan yangiroq yadro qiziqtiradi. Nega? Chunki sukut bo'yicha Ceph tasvirlarida eski yadrolar bilan mos kelmaydigan imkoniyatlar to'plami yoqilgan. Bu shuni anglatadiki, biz tarqatish uchun yangi yadro bilan omborni ulaymiz (masalan, CentOS uchun bu elrepo), yangi yadroni o'rnatamiz va yangi yadro bilan ishlash uchun tizimni qayta ishga tushiramiz:

  • Tajriba uchun tanlangan monitorga ulaning
  • Biz ko'rsatmalarga muvofiq elrepo omborlarini ulaymiz - elrepo.org/tiki/tiki-index.php
  • Yadroni o'rnating: yum -y β€”enablerepo=elrepo-kernel install kernel-ml
  • Monitor bilan serverni qayta ishga tushiring (bizda uchta monitor bor, shunday emasmi?)

Tasvirni blok qurilma sifatida ulash

# rbd map mypool/myimage
/dev/rbd0

Qolgan narsa - maqsadni sozlash. Ushbu misolda men maqsadni sozlab beraman. demo rejimi - autentifikatsiyasiz, ko'rinadigan va hamma uchun ochiq. Ishlab chiqarish muhitida siz autentifikatsiyani sozlashni xohlashingiz mumkin, ammo bu bugungi qiziqarli mashg'ulot uchun biroz imkonsizdir.

/dev/rbd/mypool/myimage fayli bilan bog'langan disk1 nomli backend yarating. Belgilangan fayl udev demoni tomonidan /dev/rbd0 ga avtomatik ravishda yaratilgan ramziy havoladir. Biz ramziy havoladan foydalanamiz, chunki rbd qurilmasining nomi Ceph tasvirlarining xostga ulangan tartibiga qarab o'zgarishi mumkin.

Backend yarating:

# targetcli /backstores/block create disk1 /dev/rbd/mypool/myimage

iSCSI maqsadini yarating:

# targetcli /iscsi create iqn.2020-01.demo.ceph:mypool

Biz backendni LUN sifatida nishonga ulaymiz:

# targetcli /iscsi/iqn.2020-01.demo.ceph:mypool/tpg1/luns create /backstores/block/disk1

Demo rejimi uchun maqsadni sozlaymiz:

# targetcli /iscsi/iqn.2020-01.demo.ceph:mypool/tpg1/ set
> attribute demo_mode_write_protect=0
# targetcli /iscsi/iqn.2020-01.demo.ceph:mypool/tpg1/ set
> attribute generate_node_acls=1
# targetcli /iscsi/iqn.2020-01.demo.ceph:mypool/tpg1/ set
> attribute cache_dynamic_acls=1

Konfiguratsiyani saqlang:

# targetcli saveconfig

Maqsad mavjudligini tekshirish:

# iscsiadm -m discovery -t st -p 127.0.0.1:3260
127.0.0.1:3260,1 iqn.2020-01.demo.ceph:mypool

Biz maqsadni bog'laymiz:

# iscsiadm -m node --login
Logging in to [iface: default, target: iqn.2020-01.demo.ceph:mypool, portal: 127.0.0.1,3260] (multiple)
Login to [iface: default, target: iqn.2020-01.demo.ceph:mypool, portal: 127.0.0.1,3260] successful.

Agar siz hamma narsani to'g'ri bajargan bo'lsangiz, serverda yangi disk paydo bo'ladi, u SCSI qurilmasiga o'xshaydi, lekin aslida Ceph-dan olingan tasvir bo'lib, iSCSI nishoni orqali kirish mumkin. Yuklash muammolariga yo'l qo'ymaslik uchun ulangan diskni va aniqlangan maqsadni mahalliy tashabbuskordan olib tashlash yaxshiroqdir:

# iscsiadm -m node --logout
# iscsiadm -m discoverydb -o delete -t st -p 127.0.0.1:3260

Tasvir avtomatik ravishda ulanishi va ulanishdan so'ng nishon qatlamli bo'lishi uchun konfiguratsiyani davom ettirish qoladi. Nishonni ishga tushirish ikki bosqichdan iborat - RBDni ulash va nishonni amalda ishga tushirish.

Birinchidan, RBD tasvirlarining xostga avtomatik ulanishini sozlaymiz. Bu /etc/ceph/rbdmap fayliga quyidagi qatorlarni qo'shish orqali amalga oshiriladi:

# cat /etc/ceph/rbdmap
# RbdDevice Parameters
mypool/myimage id=admin
# systemctl enable rbdmap

Maqsadli konfiguratsiyani tiklash biroz murakkabroq - biz konfiguratsiyani tiklaydigan systemd uchun blok yozishimiz kerak:

# cat /usr/lib/systemd/system/scsi-target.service
[Unit] Description=Start iSCSI target

After=network-online.target rbdmap.service
Before=remote-fs-pre.target
Wants=network-online.target remote-fs-pre.target

[Service] Type=oneshot
RemainAfterExit=yes
ExecStart=/bin/targetcli restoreconfig

[Install] WantedBy=multi-user.target

# systemctl daemon-reload
# systemctl enable scsi-target

Yakuniy sinov monitorimizni qayta ishga tushirishdir (endi u iSCSI maqsadi). Shuni ta'kidlash kerakki, agar biz tashabbuskorning ma'lumotlar bazasini buyruq bilan tozalamagan bo'lsak iscsiadm -n discoverydb -o o'chirish ... yuklamaydigan yoki yuklanishi uzoq vaqt talab qiladigan serverga duch kelishingiz mumkin.

Nima qoldi?

Biz maqsadni yubormoqchi bo'lgan serverda tashabbuskorni sozlang.

Maqsadimizning xatolarga chidamliligini qanday ta'minlash mumkin?

Xuddi shunday, siz boshqa monitorlarda maqsadlarni sozlashingiz va ko'p yo'nalishni tashkil qilishingiz mumkin (vmware buni tushunadi va hatto ishlaydi, Hyper-V tushunmaydi - bu SCSI qulflarini talab qiladi). Yadrodagi Ceph mijozi keshlashdan foydalanmaganligi sababli, bu juda foydali. Yoki yana bir variant - uchta komponentdan iborat klaster resursini yaratish - maxsus maqsadli IP-manzil va rbdmap va scsi-target xizmatlari va bu resursni klasterlash vositalari orqali boshqarish (kardiostimulyator deb kim aytdi?)

So'zning o'rniga

Ko'rinib turibdiki, bu maqola biroz hazil - lekin unda men "tez va misollar bilan" bir vaqtning o'zida bir nechta juda mashhur mavzularni ko'rib chiqishga harakat qildim - iSCSI maqsadi, bu Ceph tasvirlarini eksport qilish shart emas - lekin masalan, LVM hajmlarini eksport qilish, iSCSI tashabbuskori bilan ishlash asoslari (maqsadni qanday skanerlash, nishonga qanday ulanish, o'chirish, ma'lumotlar bazasidan maqsadli yozuvni o'chirish), systemd va boshqalar uchun o'z qurilmangizni yozish

Umid qilamanki, agar siz ushbu tajribani to'liq takrorlamasangiz ham, hech bo'lmaganda ushbu maqoladan biror narsa siz uchun foydali bo'ladi.

Manba: www.habr.com

a Izoh qo'shish