Ceph přes iSCSI - nebo lyžování ve stoje v houpací síti

Jsou mezi námi tací (tsefovodov), kteří nemají rádi „profesionální extrém“?

Je to nepravděpodobné – jinak bychom se s tímto extrémně zajímavým a zábavným produktem netahali.

Mnozí z těch, kteří se na provozu Cephu podíleli, se setkali s jedním nepříliš častým (nebo spíše i velmi vzácným), ale občas žádaným případem - připojením Ceph přes iSCSI nebo FC. Proč? Například odešlete obraz z Ceph na server Windows nebo Solaris, který ještě z nějakého důvodu nebyl virtualizován. Nebo virtualizovaný, ale s použitím hypervizoru, který Ceph neumí – a jak víme, je jich spousta. Například? No, například HyperV nebo ESXi, které se aktivně používají. A pokud se objeví úkol naservírovat obrázek z Ceph hostujícímu stroji, změní se to ve velmi vzrušující úkol.

Tedy dané:

  1. již běžící cluster Ceph
  2. již existující obraz, který musí být poskytován prostřednictvím iSCSI
  3. Název bazénu mypool, název obrázku můj obrázek

Začít?

Za prvé, když mluvíme o FC nebo iSCSI, máme takové entity jako iniciátor a cíl. Cíl je vlastně server, iniciátor je klient. Naším úkolem je předat snímek Ceph iniciátorovi s minimálním úsilím. To znamená, že musíme rozšířit cíl. Ale kde, na jakém počítači?

Naštěstí v clusteru Ceph máme alespoň jednu komponentu, jejíž IP adresa je pevná a na které je nakonfigurována jedna z nejdůležitějších komponent Ceph, a tou komponentou je monitor. Podle toho na monitor nainstalujeme cíl iSCSI (a zároveň iniciátor, alespoň pro testy). Udělal jsem to na CentOS, ale řešení je vhodné i pro jakoukoli jinou distribuci – stačí nainstalovat balíčky tak, jak je to ve vaší distribuci přijatelné.

# yum -y install iscsi-initiator-utils targetcli

Jaký je účel nainstalovaných balíčků?

  • targetcli — nástroj pro správu cíle SCSI zabudovaný do jádra Linuxu
  • iscsi-initiator-utils — balíček s nástroji používanými ke správě iniciátoru iSCSI zabudovaného do jádra Linuxu

Aby bylo možné odeslat obrázek přes iSCSI iniciátorovi, existují dvě možnosti pro vývoj událostí – použít backend uživatelského prostoru cíle nebo připojit obrázek jako blokové zařízení viditelné pro operační systém a exportovat jej přes iSCSI. Půjdeme druhou cestou – backend uživatelského prostoru je stále v „experimentálním“ stavu a trochu není připraven k produktivnímu použití. Navíc jsou s tím úskalí, o kterých se dá hodně mluvit a (och hrůza!) polemizovat.

Pokud použijeme i trochu stabilní distribuci s dlouhým cyklem podpory, pak jádro, které máme, je nějaká prastará, prastará verze. Například v CentOS7 je to 3.10.*, v CentOS8 je to 4.19. A nás zajímá jádro minimálně 5.3 (nebo spíše 5.4) a novější. Proč? Protože obrazy Ceph mají ve výchozím nastavení povolenou sadu voleb, které nejsou kompatibilní se staršími jádry. To znamená, že připojíme úložiště s novým jádrem pro naši distribuci (například pro CentOS je to elrepo), nainstalujeme nové jádro a restartujeme systém, aby pracoval s novým jádrem:

  • Připojte se k monitoru vybranému pro experiment
  • Repozitáře elrepo připojíme podle návodu - elrepo.org/tiki/tiki-index.php
  • Nainstalujte jádro: yum -y —enablerepo=elrepo-kernel install kernel-ml
  • Restartujte server s monitorem (máme tři monitory, že?)

Připojení obrazu jako blokového zařízení

# rbd map mypool/myimage
/dev/rbd0

Zbývá pouze nakonfigurovat cíl. V tomto příkladu nakonfiguruji cíl v tzv. demo režim – bez autentizace, viditelné a přístupné všem. V produkčním prostředí budete pravděpodobně chtít nakonfigurovat ověřování – ale to je pro dnešní cvičení jen pro zábavu trochu mimo rozsah.

Vytvořte backend s názvem disk1 přidružený k souboru /dev/rbd/mypool/myimage. Zadaný soubor je symbolický odkaz automaticky vytvořený démonem udev na /dev/rbd0. Používáme symbolický odkaz, protože název zařízení rbd se může měnit v závislosti na pořadí, ve kterém jsou obrázky Ceph připojeny k hostiteli.

Vytvořte backend:

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

Vytvořte cíl iSCSI:

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

Připojíme backend jako LUN k cíli:

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

Pojďme nakonfigurovat cíl pro demo režim:

# 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

Uložte konfiguraci:

# targetcli saveconfig

Kontrola přítomnosti cíle:

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

Připojíme cíl:

# 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.

Pokud jste vše udělali správně, na serveru se objeví nový disk, který vypadá jako zařízení SCSI, ale ve skutečnosti je to obraz z Ceph, ke kterému se přistupuje přes cíl iSCSI. Abyste předešli problémům se zaváděním, je lepší odebrat připojený disk a detekovaný cíl z místního iniciátoru:

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

Nezbývá než ponechat konfiguraci, aby se obraz automaticky připojil a po připojení se rozvrstvil cíl. Vypuštění cíle se skládá ze dvou kroků – připojení RBD a vlastně vypuštění cíle.

Nejprve nakonfigurujeme automatické připojení obrazů RBD k hostiteli. To se provede přidáním následujících řádků do souboru /etc/ceph/rbdmap:

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

Obnova cílové konfigurace je trochu složitější – musíme napsat jednotku pro systemd, která konfiguraci obnoví:

# 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

Posledním testem je opětovné restartování našeho monitoru (nyní je to cíl iSCSI). Je třeba poznamenat, že pokud bychom pomocí příkazu nevymazali databázi iniciátoru iscsiadm -n discoverydb -o delete ... můžete skončit se serverem, který se nenačte nebo se načte dlouho.

Co zbývá?

Nakonfigurujte iniciátor na serveru, kam chceme poslat cíl.

Jak zajistit odolnost našeho cíle proti chybám?

Podobně můžete nakonfigurovat cíle na jiných monitorech a nastavit multipath (vmware to pochopí a dokonce bude fungovat, Hyper-V nebude rozumět - vyžaduje SCSI zámky). Vzhledem k tomu, že klient Ceph z jádra nepoužívá ukládání do mezipaměti, je to docela funkční. Nebo další možností je vytvořit klastrový prostředek ze tří komponent – ​​vyhrazenou cílovou IP adresu a rbdmap a scsi-target služby a spravovat tento zdroj pomocí klastrovacích nástrojů (kdo řekl pacemaker?)

Namísto následného slova

Jak je jasné, tento článek je trochu vtip - ale snažil jsem se v něm "rychle a s příklady" zvážit několik poměrně oblíbených témat současně - iSCSI cíl, který nemusí nutně exportovat obrázky Ceph - ale např. export svazků LVM, základy práce s iniciátorem iSCSI (jak skenovat cíl, jak se připojit k cíli, odpojovat, mazat cílový záznam z databáze), psaní vlastní jednotky pro systemd a některé další

Doufám, že i když celý tento experiment nezopakujete v plném rozsahu, alespoň něco z tohoto článku se vám bude hodit.

Zdroj: www.habr.com

Přidat komentář