Ceph iSCSI-n keresztül - vagy síelés függőágyban állva
Vannak közöttünk olyanok (cefovodov), akik nem szeretik a „professzionális szélsőséget”?
Valószínűtlen – különben nem bukdácsolnánk ezzel a rendkívül érdekes és vicces termékkel.
A Ceph működtetésében részt vevők közül sokan találkoztak egy nem túl gyakori (vagy inkább nagyon ritkán), de olykor igényes esettel - amely a Ceph-t iSCSI-n vagy FC-n keresztül köti össze. Miért? Nos, például küldjön be egy képet a Ceph-ről egy Windows vagy Solaris szerverre, amely valamiért még nem lett virtualizálva. Vagy egy virtualizált, de olyan hypervisor használatával, amely nem képes Ceph-re – és mint tudjuk, rengeteg van belőlük. Például? Nos, például a HyperV vagy az ESXi, amelyeket aktívan használnak. És ha felmerül az a feladat, hogy Ceph-ből egy képet tálaljunk egy vendéggépre, ez egy nagyon izgalmas feladattá válik.
Így adott:
egy már futó Ceph-fürt
egy már létező kép, amelyet iSCSI-n keresztül kell kiszolgálni
Medence neve mypool, kép neve az én képem
Kezdődik?
Először is, amikor FC-ről vagy iSCSI-ről beszélünk, olyan entitásaink vannak, mint a kezdeményező és a cél. A cél valójában egy szerver, a kezdeményező pedig egy kliens. A mi feladatunk, hogy a Ceph képet minimális ráfordítással beküldjük a kezdeményezőnek. Ez azt jelenti, hogy ki kell terjesztenünk a célt. De hol, milyen számítógépen?
Szerencsére egy Ceph-fürtben van legalább egy olyan összetevő, amelynek IP-címe rögzített, és amelyen a Ceph egyik legfontosabb összetevője van konfigurálva, és ez a komponens a monitor. Ennek megfelelően egy iSCSI-célt telepítünk a monitorra (és egyúttal kezdeményezőt is, legalábbis tesztekhez). Ezt CentOS-en csináltam, de a megoldás bármilyen más disztribúcióhoz is alkalmas - csak a csomagokat kell a disztribúciódban elfogadható módon telepíteni.
# yum -y install iscsi-initiator-utils targetcli
Mi a telepített csomagok célja?
targetcli — egy segédprogram a Linux kernelbe épített SCSI-cél kezelésére
iscsi-iniciátor-utils — a Linux kernelbe épített iSCSI-kezdeményező kezelésére szolgáló segédprogramokat tartalmazó csomag
Ahhoz, hogy egy képet iSCSI-n keresztül küldjön el a kezdeményezőnek, két lehetőség van az események fejlesztésére - használja a cél felhasználói felületének hátterét, vagy csatlakoztassa a képet az operációs rendszer számára látható blokkeszközként, és exportálja iSCSI-n keresztül. A második utat választjuk - a felhasználói tér háttérrendszere még mindig „kísérleti” állapotban van, és kissé nem áll készen a produktív használatra. Ráadásul vannak benne buktatók, amiről sokat lehet beszélni és (ó iszonyat!) vitatkozni.
Ha egy kissé stabil disztribúciót használunk, hosszú támogatási ciklussal, akkor a rendszermagunk valami ősi, ősi verzió. Például a CentOS7-ben 3.10.*, a CentOS8-ban 4.19. És minket egy legalább 5.3-as (vagy inkább 5.4-es) és újabb kernel érdekel. Miért? Mivel alapértelmezés szerint a Ceph-képek egy sor olyan beállítást engedélyeznek, amelyek nem kompatibilisek a régebbi kernelekkel. Ez azt jelenti, hogy csatlakoztatunk egy tárolót egy új kernellel a disztribúciónkhoz (például a CentOS esetében ez az elrepo), telepítjük az új kernelt, és újraindítjuk a rendszert, hogy az új kernellel működjön:
Csatlakoztassa a kísérlethez kiválasztott monitorhoz
Telepítse a kernelt: yum -y —enablerepo=elrepo-kernel install kernel-ml
Indítsa újra a szervert a monitorral (három monitorunk van, igaz?)
A kép csatlakoztatása blokkeszközként
# rbd map mypool/myimage
/dev/rbd0
Már csak a cél konfigurálása van hátra. Ebben a példában a célt az ún. demó mód - hitelesítés nélkül, mindenki számára látható és elérhető. Éles környezetben valószínűleg be kell állítania a hitelesítést – de ez egy kicsit túlterhelt a mai szórakozásból.
Hozzon létre egy disk1 nevű háttérprogramot a /dev/rbd/mypool/myimage fájlhoz társítva. A megadott fájl egy szimbolikus hivatkozás, amelyet az udev démon automatikusan létrehoz a /dev/rbd0 fájlhoz. Szimbolikus hivatkozást használunk, mert az rbd eszköz neve változhat attól függően, hogy a Ceph képek milyen sorrendben kapcsolódnak a gazdagéphez.
# 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
Mentse el a konfigurációt:
# targetcli saveconfig
A célpont jelenlétének ellenőrzése:
# iscsiadm -m discovery -t st -p 127.0.0.1:3260
127.0.0.1:3260,1 iqn.2020-01.demo.ceph:mypool
Összekapcsoljuk a célpontot:
# 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.
Ha mindent helyesen csinált, egy új lemez jelenik meg a szerveren, amely úgy néz ki, mint egy SCSI-eszköz, de valójában egy Ceph-kép, amely egy iSCSI-célponton keresztül érhető el. A rendszerindítási problémák elkerülése érdekében jobb, ha eltávolítja a csatlakoztatott lemezt és az észlelt célt a helyi kezdeményezőből:
Már csak a konfigurációt kell fenntartani, hogy a kép automatikusan csatlakozzon, és a csatlakozás után a cél rétegzett legyen. A célpont elindítása két lépésből áll - az RBD összekapcsolásából és a célpont tényleges kilövéséből.
Először is állítsuk be az RBD-képek automatikus csatlakozását a gazdagéphez. Ez úgy történik, hogy a következő sorokat adjuk hozzá az /etc/ceph/rbdmap fájlhoz:
Az utolsó teszt a monitor újraindítása (most már iSCSI-célpont). Meg kell jegyezni, hogy ha nem töröltük volna a kezdeményező adatbázisát a paranccsal iscsiadm -n discoverydb -o törlés... előfordulhat, hogy egy szerver nem töltődik be, vagy sokáig tart a betöltése.
Mi maradt?
Állítsa be a kezdeményezőt a kiszolgálón, ahová el akarjuk küldeni a célt.
Hogyan biztosítható a célunk hibatűrése?
Hasonlóképpen konfigurálhatja a célokat más monitorokon, és beállíthat több útvonalat (a vmware ezt megérti, sőt működik, a Hyper-V nem fogja megérteni - ehhez SCSI-zárak szükségesek). Mivel a kernelből származó Ceph kliens nem használ gyorsítótárat, ez teljesen működőképes. Vagy egy másik lehetőség egy három összetevőből álló fürterőforrás létrehozása - egy dedikált cél IP-címből, valamint rbdmap és scsi-target szolgáltatásokból, és ezt az erőforrást fürtöző eszközökön keresztül kezeli (ki mondta a pacemakert?)
Helyett utószó
Amint az világos, ez a cikk egy kis vicc - de igyekeztem "gyorsan és példákkal" több, meglehetősen népszerű témát egyszerre figyelembe venni - iSCSI target, amely nem feltétlenül exportál Ceph képeket - de pl. LVM-kötetek exportálása, az iSCSI-kezdeményezővel való munka alapjai (cél szkennelése, célponthoz való csatlakozás, leválasztás, célbejegyzés törlése az adatbázisból), saját egység írása systemd-hez és néhány más
Remélem, még ha nem is ismétli meg teljesen ezt a kísérletet, legalább valami ebből a cikkből hasznos lesz az Ön számára.