Ceph via iSCSI - o sciendu mentre stava in un hammock

Ci sò quelli trà noi (tsefovodov) chì ùn piace micca "estremu prufessiunale"?

Hè improbabile - altrimenti ùn sariamu micca tumbatu cù stu pruduttu estremamente interessante è divertente.

Parechji di quelli chì eranu implicati in l'operazione di Ceph anu scontru un casu pocu frequente (o piuttostu pocu frequente) ma qualchì volta populari - cunnessu Ceph via iSCSI o FC. Perchè? Ebbè, per esempiu, sottumette una maghjina da Ceph à un servitore Windows o Solaris chì ùn hè micca statu virtualizatu per qualchì mutivu. O un virtualizatu, ma cù un ipervisore chì ùn sustene micca Ceph - è, cum'è sapemu, ci sò assai. Per esempiu? Eppo, per esempiu, HyperV o ESXi, chì sò attivamente utilizati. È se u compitu nasce di serve una maghjina da Ceph à una macchina invitata, questu diventa un compitu assai eccitante.

Dunque, datu:

  1. un cluster Ceph già in esecuzione
  2. una maghjina digià esistente chì deve esse servuta via iSCSI
  3. U nome di a piscina mypool, nome di l'imagine a mo imagine

Cumincià ?

Prima di tuttu, quandu parlemu di FC o iSCSI, avemu tali entità cum'è iniziatore è target. Target hè in realtà un servitore, l'iniziatore hè un cliente. U nostru compitu hè di mandà l'imaghjini Ceph à l'iniziatore cù u minimu sforzu. Questu significa chì duvemu espansione u target. Ma induve, in quale computer?

Fortunatamente, in un cluster Ceph avemu almenu un cumpunente chì l'indirizzu IP hè fissatu è nantu à quale unu di i cumpunenti più impurtanti di Ceph hè cunfiguratu, è quellu cumpunente hè u monitor. In cunsiquenza, installemu un target iSCSI nantu à u monitor (è un initatore à u stessu tempu, almenu per teste). Aghju fattu questu nantu à CentOS, ma a suluzione hè ancu adattata per qualsiasi altra distribuzione - basta à stallà i pacchetti in a manera chì hè accettata in a vostra distribuzione.

# yum -y install iscsi-initiator-utils targetcli

Chì ghjè u scopu di i pacchetti installati?

  • targetcli - una utilità per gestisce a destinazione SCSI integrata in u kernel Linux
  • iscsi-initiator-utils - un pacchettu cù utilità utilizati per gestisce l'iniziatore iSCSI integratu in u kernel Linux

Per mandà una maghjina via iSCSI à l'iniziatore, ci sò duie opzioni per u sviluppu di l'avvenimenti - utilizate u backend di u spaziu di l'usu di u destinazione o cunnette l'imaghjini cum'è un dispositivu di bloccu visibile à u sistema operatore è l'esporta via iSCSI. Andemu in a seconda strada - u backend di u spaziu di l'utilizatori hè sempre in un statu "sperimentale" è ùn hè pocu prontu per l'usu pruduttivu. Inoltre, ci sò trappule cun ellu, nantu à quale pudete parlà assai è (oh horror!) argumentate.

Se usemu ancu una distribuzione un pocu stabile cù un ciculu di supportu longu, allora u kernel chì avemu hè una versione antica, antica. Per esempiu, in CentOS7 hè 3.10.*, in CentOS8 hè 4.19. È avemu interessatu in un kernel di almenu 5.3 (o piuttostu 5.4) è più novu. Perchè? Perchè per difettu l'imaghjini Ceph anu un inseme di opzioni attivate chì ùn sò micca cumpatibili cù i kernels più vechji. Questu significa chì cunnettamu un repository cù un novu kernel per a nostra distribuzione (per esempiu, per CentOS questu hè elrepo), installate u novu kernel è reboot u sistema per travaglià cù u novu kernel:

  • Cunnettete à u monitoru sceltu per l'esperimentu
  • Cunnettemu i repositori elrepo secondu l'istruzzioni - elrepo.org/tiki/tiki-index.php
  • Installa u kernel: yum -y —enablerepo=elrepo-kernel install kernel-ml
  • Reboot u servitore cù u monitor (avemu trè monitori, nò?)

Cunnettendu l'imaghjini cum'è un dispositivu di bloccu

# rbd map mypool/myimage
/dev/rbd0

Tuttu ciò chì resta hè di cunfigurà u mira. In questu esempiu, vi cunfigurà u mira in u cusì chjamatu. Modu demo - senza autentificazione, visibile è accessibile à tutti. In un ambiente di produzzione, probabilmente vulete cunfigurà l'autentificazione - ma questu hè un pocu fora di u scopu per l'eserciziu ghjustu per u divertimentu d'oghje.

Crea un backend chjamatu disk1 assuciatu cù u schedariu /dev/rbd/mypool/myimage. U schedariu specificatu hè un ligame simbolicu creatu automaticamente da u daemon udev à /dev/rbd0. Avemu aduprà un ligame simbolicu perchè u nome di u dispusitivu rbd pò cambià sicondu l'ordine in quale l'imaghjini Ceph sò cunnessi à l'ospiti.

Crea un backend:

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

Crea un target iSCSI:

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

Cunnetteremu u backend cum'è LUN à u target:

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

Cunfiguremu u target per u modu demo:

# 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

Salvà a cunfigurazione:

# targetcli saveconfig

Verificate a presenza di u mira:

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

Cunnetteremu u mira:

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

Se avete fattu tuttu bè, un novu discu appariscerà nantu à u servitore, chì s'assumiglia à un dispositivu SCSI, ma hè in realtà una maghjina da Ceph, accede à un destinazione iSCSI. Per evità i prublemi di boot, hè megliu caccià u discu cunnessu è u mira rilevatu da l'iniziatore lucale:

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

Tuttu ciò chì resta hè di persiste a cunfigurazione per chì l'imaghjini hè cunnessu automaticamente è, dopu a cunnessione, u mira hè stratificata. U lanciamentu di un scopu hè custituitu da dui passi - cunnette u RBD è in realtà lancià u mira.

Prima, cunfiguremu a cunnessione automatica di l'imaghjini RBD à l'ospite. Questu hè fattu aghjunghjendu e seguenti linee à u schedariu /etc/ceph/rbdmap:

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

Risturà a cunfigurazione di destinazione hè un pocu più cumplicata - avemu bisognu di scrive una unità per systemd chì restaurà a cunfigurazione:

# 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

A prova finale hè di riavvià u nostru monitoru di novu (hè avà un scopu iSCSI). Semu devi esse nutatu chì s'ellu ùn avemu micca sbulicatu a basa di dati di l'iniziatore cù u cumandamentu iscsiadm -n discoverydb -o delete... pudete finisce cù un servitore chì ùn carica micca o piglia assai tempu per carica.

Chì ne resta ?

Configurate l'iniziatore in u servitore induve vulemu mandà u mira.

Cumu assicurà a tolleranza di difetti di u nostru scopu?

Pudete ancu cunfigurà miri in altri monitori è cunfigurà multipath (vmware capisce questu è ancu travaglià, Hyper-V ùn capisce micca - hè bisognu di serratura SCSI). Siccomu u cliente Ceph da u kernel ùn usa micca caching, questu hè abbastanza praticabile. O una altra opzione hè di creà una risorsa di cluster di trè cumpunenti - un indirizzu IP di destinazione dedicatu è servizii rbdmap è scsi-target, è gestisce sta risorsa per mezu di strumenti di clustering (quale hà dettu pacemaker?)

Invece di un cappellucciu

Comu hè chjaru, questu articulu hè un pocu di scherzu - ma in questu aghju pruvatu à "rapidamente è cù esempi" cunsiderà parechji temi abbastanza populari à u stessu tempu - iSCSI target, chì ùn pò micca necessariamente esportà l'imaghjini Ceph - ma per esempiu, esportà volumi LVM, i principii di travaglià cù un iniziatore iSCSI (cumu scansà un mira, cumu cunnette à un mira, disconnette, sguassate una entrata di destinazione da a basa di dati), scrive a vostra propria unità per systemd è altri.

Spergu chì ancu s'ellu ùn ripetite micca tuttu stu esperimentu in tuttu, almenu qualcosa di questu articulu vi serà utile.

Source: www.habr.com

Add a comment