Ceph sa pamamagitan ng iSCSI - o skiing habang nakatayo sa duyan

Mayroon bang mga kasama natin (tsefovodov) na hindi gusto ang "propesyonal na matinding"?

Ito ay malamang na hindi - kung hindi, hindi kami mabibigo sa sobrang kawili-wili at nakakatawang produktong ito.

Marami sa mga kasangkot sa operasyon ng Ceph ay nakatagpo ng isang hindi masyadong madalas (o mas madalang pa nga) ngunit minsan ay in demand case - ang pagkonekta sa Ceph sa pamamagitan ng iSCSI o FC. Para saan? Well, halimbawa, magsumite ng isang imahe mula sa Ceph sa isang Windows o Solaris server na hindi pa na-virtualize para sa ilang kadahilanan. O isang virtualized na isa, ngunit gumagamit ng isang hypervisor na hindi magagawa ang Ceph - at, tulad ng alam natin, marami sa kanila. Halimbawa? Well, halimbawa, HyperV o ESXi, na aktibong ginagamit. At kung ang gawain ay lumitaw sa paghahatid ng isang imahe mula kay Ceph sa isang guest machine, ito ay nagiging isang napaka-kapana-panabik na gawain.

Kaya, ibinigay:

  1. isang tumatakbo na Ceph cluster
  2. isang umiiral nang larawan na dapat ihatid sa pamamagitan ng iSCSI
  3. Pangalan ng pool mypool, pangalan ng larawan aking imahe

Magsimula?

Una sa lahat, kapag pinag-uusapan natin ang tungkol sa FC o iSCSI, mayroon tayong mga entity bilang initiator at target. Ang target ay talagang isang server, ang initiator ay isang kliyente. Ang aming gawain ay isumite ang imahe ng Ceph sa initiator na may kaunting pagsisikap. Nangangahulugan ito na dapat nating palawakin ang target. Ngunit saan, sa anong computer?

Sa kabutihang palad, sa isang cluster ng Ceph mayroon kaming hindi bababa sa isang bahagi na ang IP address ay naayos at kung saan ang isa sa pinakamahalagang bahagi ng Ceph ay na-configure, at ang bahaging iyon ay ang monitor. Alinsunod dito, nag-i-install kami ng target na iSCSI sa monitor (at sabay-sabay na nagpasimula, kahit para sa mga pagsubok). Ginawa ko ito sa CentOS, ngunit ang solusyon ay angkop din para sa anumang iba pang pamamahagi - kailangan mo lamang i-install ang mga pakete sa paraang katanggap-tanggap sa iyong pamamahagi.

# yum -y install iscsi-initiator-utils targetcli

Ano ang layunin ng mga naka-install na pakete?

  • targetcli β€” isang utility para sa pamamahala sa target ng SCSI na binuo sa Linux kernel
  • iscsi-initiator-utils - isang package na may mga utility na ginagamit upang pamahalaan ang iSCSI initiator na binuo sa Linux kernel

Upang magsumite ng larawan sa pamamagitan ng iSCSI sa initiator, mayroong dalawang opsyon para sa pagbuo ng mga kaganapan - gamitin ang userspace backend ng target o ikonekta ang larawan bilang block device na nakikita ng operating system at i-export ito sa pamamagitan ng iSCSI. Pupunta tayo sa pangalawang paraan - ang backend ng userspace ay nasa "pang-eksperimentong" estado pa rin at bahagyang hindi handa para sa produktibong paggamit. Bilang karagdagan, may mga pitfalls dito, tungkol sa kung saan maaari kang makipag-usap ng maraming at (oh horror!) Magtaltalan.

Kung gumagamit kami ng kahit na medyo matatag na pamamahagi na may mahabang ikot ng suporta, kung gayon ang kernel na mayroon kami ay ilang sinaunang, sinaunang bersyon. Halimbawa, sa CentOS7 ito ay 3.10.*, sa CentOS8 ito ay 4.19. At kami ay interesado sa isang kernel ng hindi bababa sa 5.3 (o sa halip 5.4) at mas bago. Bakit? Dahil sa default, ang mga imahe ng Ceph ay may naka-enable na hanay ng mga opsyon na hindi tugma sa mas lumang mga kernel. Nangangahulugan ito na ikinonekta namin ang isang repositoryo na may bagong kernel para sa aming pamamahagi (halimbawa, para sa CentOS ito ay elrepo), i-install ang bagong kernel at i-reboot ang system upang gumana sa bagong kernel:

  • Kumonekta sa monitor na pinili para sa eksperimento
  • Ikinonekta namin ang mga repositoryo ng elrepo ayon sa mga tagubilin - elrepo.org/tiki/tiki-index.php
  • I-install ang kernel: yum -y β€”enablerepo=elrepo-kernel install kernel-ml
  • I-reboot ang server gamit ang monitor (mayroon kaming tatlong monitor, tama ba?)

Pagkonekta sa larawan bilang block device

# rbd map mypool/myimage
/dev/rbd0

Ang natitira na lang ay i-configure ang target. Sa halimbawang ito, i-configure ko ang target sa tinatawag na. demo mode - walang authentication, nakikita at naa-access ng lahat. Sa isang kapaligiran sa produksyon, malamang na gusto mong i-configure ang pagpapatotoo - ngunit iyon ay medyo out-of-scope para sa just-for-fun exercise ngayon.

Gumawa ng backend na pinangalanang disk1 na nauugnay sa file /dev/rbd/mypool/myimage. Ang tinukoy na file ay isang simbolikong link na awtomatikong nilikha ng udev daemon sa /dev/rbd0. Gumagamit kami ng simbolikong link dahil maaaring magbago ang pangalan ng rbd device depende sa pagkakasunud-sunod kung saan nakakonekta ang mga larawan ng Ceph sa host.

Gumawa ng backend:

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

Lumikha ng target na iSCSI:

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

Ikinonekta namin ang backend bilang isang LUN sa target:

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

I-configure natin ang target para sa demo mode:

# 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

I-save ang configuration:

# targetcli saveconfig

Sinusuri ang presensya ng target:

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

Ikinonekta namin ang target:

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

Kung ginawa mo nang tama ang lahat, may lalabas na bagong disk sa server, na mukhang isang SCSI device, ngunit talagang isang imahe mula kay Ceph, na na-access sa pamamagitan ng target na iSCSI. Upang maiwasan ang mga problema sa boot, mas mahusay na alisin ang konektadong disk at ang nakitang target mula sa lokal na initiator:

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

Ang natitira na lang ay ipagpatuloy ang pagsasaayos upang ang imahe ay awtomatikong konektado at, pagkatapos ng koneksyon, ang target ay stratified. Ang paglulunsad ng target ay binubuo ng dalawang hakbang - pagkonekta sa RBD at aktwal na paglulunsad ng target.

Una, i-configure natin ang awtomatikong koneksyon ng mga RBD na imahe sa host. Ginagawa ito sa pamamagitan ng pagdaragdag ng mga sumusunod na linya sa /etc/ceph/rbdmap file:

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

Ang pagpapanumbalik ng target na pagsasaayos ay medyo mas kumplikado - kailangan naming magsulat ng isang yunit para sa systemd na ibabalik ang pagsasaayos:

# 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

Ang huling pagsubok ay i-reboot muli ang aming monitor (ito ay isang target na iSCSI). Dapat tandaan na kung hindi namin na-clear ang database ng initiator gamit ang command iscsiadm -n discoverydb -o tanggalin ... maaari kang magkaroon ng isang server na hindi naglo-load o tumatagal ng mahabang oras upang mag-load.

Anong natira?

I-configure ang initiator sa server kung saan namin gustong ipadala ang target.

Paano masisiguro ang fault tolerance ng ating target?

Maaari mo ring i-configure ang mga target sa iba pang mga monitor at mag-set up ng multipath (maiintindihan ito ng vmware at kahit na gagana, hindi mauunawaan ng Hyper-V - nangangailangan ito ng mga lock ng SCSI). Dahil ang kliyente ng Ceph mula sa kernel ay hindi gumagamit ng caching, ito ay lubos na magagawa. O isa pang opsyon ay ang gumawa ng cluster resource ng tatlong bahagi - isang dedikadong target na IP address at rbdmap at scsi-target na serbisyo, at pamahalaan ang resource na ito sa pamamagitan ng clustering tools (sino ang nagsabing pacemaker?)

sa halip ng isang epilogo

Tulad ng malinaw, ang artikulong ito ay medyo biro - ngunit sa loob nito sinubukan kong "mabilis at may mga halimbawa" isaalang-alang ang ilang medyo sikat na mga paksa sa parehong oras - target ng iSCSI, na maaaring hindi kinakailangang mag-export ng mga imahe ng Ceph - ngunit halimbawa, i-export ang mga volume ng LVM, ang mga pangunahing kaalaman sa pagtatrabaho sa isang iSCSI initiator ( kung paano i-scan ang isang target, kung paano kumonekta sa isang target, idiskonekta, tanggalin ang isang target na entry mula sa database), pagsulat ng iyong sariling unit para sa systemd at ilang iba pa

Umaasa ako na kahit na hindi mo ulitin ang buong eksperimentong ito nang buo, kahit isang bagay mula sa artikulong ito ay magiging kapaki-pakinabang sa iyo.

Pinagmulan: www.habr.com

Magdagdag ng komento