Ceph via iSCSI - эсвэл гамак дээр зогсож байхдаа цанаар гулгах

Бидний дунд (цефоводов) "мэргэжлийн хэт туйлшралд" дургүй хүмүүс байдаг уу?

Энэ нь магадлал багатай - тэгэхгүй бол бид энэ маш сонирхолтой, инээдтэй бүтээгдэхүүнтэй эргэлзэхгүй байх байсан.

Цефийг ажиллуулахад оролцсон хүмүүсийн ихэнх нь тийм ч олон биш (эсвэл бүр маш ховор), гэхдээ заримдаа эрэлт хэрэгцээтэй байдаг - Ceph-ийг iSCSI эсвэл FC-ээр холбодог нэгэнтэй тааралддаг. Юуны төлөө? Жишээлбэл, Ceph-ээс ямар нэг шалтгааны улмаас виртуалчлаагүй байгаа Windows эсвэл Solaris серверт зургийг оруулаарай. Эсвэл виртуалчлагдсан, гэхдээ Ceph хийж чаддаггүй гипервизор ашигладаг - бидний мэдэж байгаагаар эдгээр нь маш олон байдаг. Жишээлбэл? Жишээлбэл, идэвхтэй ашиглагддаг HyperV эсвэл ESXi. Хэрэв Сефээс зочны машинд дүрс үзүүлэх даалгавар гарч ирвэл энэ нь маш сэтгэл хөдөлгөм ажил болж хувирна.

Тиймээс, өгсөн:

  1. аль хэдийн ажиллаж байгаа Ceph кластер
  2. iSCSI-ээр үйлчлэх ёстой аль хэдийн байгаа зураг
  3. Усан сангийн нэр mypool, зургийн нэр миний зураг

Эхлэх?

Юуны өмнө, бид FC эсвэл iSCSI-ийн талаар ярихад санаачлагч, зорилтот байгууллагуудтай байдаг. Зорилтот нь сервер, санаачлагч нь үйлчлүүлэгч юм. Бидний даалгавар бол хамгийн бага хүчин чармайлтаар Ceph дүрсийг санаачлагч руу илгээх явдал юм. Энэ нь бид зорилтоо өргөжүүлэх ёстой гэсэн үг юм. Гэхдээ хаана, ямар компьютер дээр?

Аз болоход, Ceph кластерт бид дор хаяж нэг бүрэлдэхүүн хэсэгтэй бөгөөд IP хаяг нь тогтмол бөгөөд Ceph-ийн хамгийн чухал бүрэлдэхүүн хэсгүүдийн нэг нь тохируулагдсан байдаг бөгөөд энэ бүрэлдэхүүн хэсэг нь дэлгэц юм. Үүний дагуу бид монитор дээр iSCSI зорилтот програмыг суулгадаг (мөн нэгэн зэрэг санаачлагч, ядаж туршилтын хувьд). Би үүнийг CentOS дээр хийсэн, гэхдээ энэ шийдэл нь бусад түгээлтэд тохиромжтой - та зүгээр л багцуудыг өөрийн түгээлтэд хүлээн зөвшөөрөгдсөн байдлаар суулгах хэрэгтэй.

# yum -y install iscsi-initiator-utils targetcli

Суулгасан багцуудын зорилго юу вэ?

  • targetcli — Линукс цөмд суулгасан SCSI зорилтыг удирдах хэрэгсэл
  • iscsi-initiator-utils — Линукс цөмд суулгасан iSCSI санаачлагчийг удирдахад ашигладаг хэрэгслүүд бүхий багц

Санаачлагч руу iSCSI-ээр дамжуулан зураг оруулахын тулд үйл явдлыг хөгжүүлэх хоёр сонголт байдаг - зорилтот хэрэглэгчийн зайны арын хэсгийг ашиглах эсвэл зургийг үйлдлийн системд харагдах блок төхөөрөмж болгон холбож, iSCSI-ээр экспортлох. Бид хоёр дахь замаар явах болно - хэрэглэгчийн талбарын арын хэсэг нь "туршилтын" төлөвт байгаа бөгөөд бүтээмжтэй ашиглахад бага зэрэг бэлэн биш байна. Нэмж дурдахад, та маш их ярьж, (өө аймшиг!) маргаж болох бэрхшээлүүд байдаг.

Хэрэв бид удаан хугацааны дэмжлэгийн мөчлөгтэй бага зэрэг тогтвортой тархалтыг ашигладаг бол бидний цөм нь эртний, эртний хувилбар юм. Жишээлбэл, CentOS7-д 3.10.*, CentOS8-д 4.19 байна. Мөн бид дор хаяж 5.3 (эсвэл 5.4) ба түүнээс дээш тооны цөмийг сонирхож байна. Яагаад? Учир нь анхдагчаар Ceph зургууд нь хуучин цөмтэй тохирохгүй олон сонголтуудыг идэвхжүүлсэн байдаг. Энэ нь бид репозиторыг түгээлтийн шинэ цөмтэй холбож (жишээлбэл, CentOS-ийн хувьд энэ нь elrepo), шинэ цөм суулгаж, шинэ цөмтэй ажиллахын тулд системийг дахин ачаална гэсэн үг юм.

  • Туршилтанд сонгосон монитортой холбогдоно уу
  • Бид зааврын дагуу elrepo агуулахуудыг холбодог - elrepo.org/tiki/tiki-index.php
  • Цөмийг суулгана: yum -y —enablerepo=elrepo-kernel суулгана kernel-ml
  • Монитороор серверээ дахин ачаална уу (бид гурван дэлгэцтэй, тийм үү?)

Зургийг блок төхөөрөмж болгон холбож байна

# rbd map mypool/myimage
/dev/rbd0

Үлдсэн зүйл бол зорилгоо тохируулах явдал юм. Энэ жишээнд би зорилтот гэж нэрлэгддэг зүйлд тохируулах болно. Демо горим - гэрчлэлгүй, харагдахуйц, хүн бүрт хүртээмжтэй. Үйлдвэрлэлийн орчинд та нэвтрэлт танилтыг тохируулахыг хүсэх байх, гэхдээ энэ нь өнөөдрийн зугаа цэнгэлийн дасгалын хувьд арай гадуур юм.

/dev/rbd/mypool/myimage файлтай холбоотой disk1 нэртэй backend үүсгэнэ үү. Заасан файл нь udev демоноор /dev/rbd0 руу автоматаар үүсгэсэн симбол холбоос юм. Ceph зургуудыг хосттой холбосон дарааллаас хамааран rbd төхөөрөмжийн нэр өөрчлөгдөж болох тул бид симбол холбоосыг ашигладаг.

Backend үүсгэх:

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

iSCSI зорилтот үүсгэх:

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

Бид арын хэсгийг LUN болгон зорилтот хэсэгт холбодог:

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

Демо горимын зорилтот тохиргоог хийцгээе:

# 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

Тохиргоог хадгалах:

# targetcli saveconfig

Зорилтот байгаа эсэхийг шалгах:

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

Бид зорилгоо холбодог:

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

Хэрэв та бүх зүйлийг зөв хийсэн бол сервер дээр шинэ диск гарч ирэх бөгөөд энэ нь SCSI төхөөрөмж шиг харагдах боловч үнэндээ Ceph-ээс авсан зураг бөгөөд iSCSI зорилтот төхөөрөмжөөр ханддаг. Ачаалах асуудлаас зайлсхийхийн тулд холбогдсон диск болон илэрсэн зорилтыг локал санаачлагчаас устгах нь дээр.

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

Үлдсэн зүйл бол тохиргоог үргэлжлүүлэх бөгөөд ингэснээр зураг автоматаар холбогдож, холболт хийсний дараа зорилтот давхаргад хуваагдана. Байгаа хөөргөх нь RBD-г холбох ба байг бодитоор хөөргөх гэсэн хоёр үе шатаас бүрдэнэ.

Эхлээд RBD дүрсийг хосттой автоматаар холбох тохиргоог хийцгээе. Энэ нь /etc/ceph/rbdmap файлд дараах мөрүүдийг нэмэх замаар хийгддэг.

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

Зорилтот тохиргоог сэргээх нь арай илүү төвөгтэй байдаг - бид тохиргоог сэргээх системд нэгж бичих хэрэгтэй:

# 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

Эцсийн туршилт бол монитороо дахин асаах явдал юм (энэ нь одоо iSCSI зорилтот болсон). Хэрэв бид санаачлагчийн мэдээллийн санг тушаалаар цэвэрлээгүй бол гэдгийг тэмдэглэх нь зүйтэй iscsiadm -n discoverydb -o устгах ... Та ачаалагдахгүй эсвэл ачаалахад удаан хугацаа шаардагддаг сервертэй болж магадгүй юм.

Юу үлдсэн бэ?

Зорилтот илгээхийг хүссэн сервер дээрх санаачлагчийг тохируулна уу.

Бидний зорилтот алдааг хэрхэн тэсвэрлэх вэ?

Үүнтэй адилаар та бусад мониторууд дээрх зорилтуудыг тохируулж, олон замд тохируулж болно (vmware үүнийг ойлгож, бүр ажиллах болно, Hyper-V ойлгохгүй - энэ нь SCSI түгжээ шаарддаг). Цөмийн Ceph клиент нь кэш ашигладаггүй тул энэ нь нэлээд боломжтой юм. Эсвэл өөр нэг сонголт бол зориулалтын зорилтот IP хаяг, rbdmap болон scsi-target үйлчилгээ гэсэн гурван бүрэлдэхүүн хэсгээс бүрдсэн кластерын нөөцийг үүсгэж, кластерын хэрэгслээр дамжуулан энэ нөөцийг удирдах явдал юм (хэрэв зүрхний аппарат гэж хэн хэлсэн бэ?)

Үл алдахын оронд

Мэдээжийн хэрэг, энэ нийтлэл нь бага зэрэг хошигнол юм, гэхдээ би үүнд "хурдан бөгөөд жишээгээр" хэд хэдэн нэлээд алдартай сэдвүүдийг нэг дор авч үзэхийг оролдсон - iSCSI зорилт нь Ceph зургийг заавал экспортлох албагүй байж болох ч жишээ нь, LVM-ийн эзлэхүүнийг экспортлох, iSCSI санаачлагчтай ажиллах үндсэн зарчмууд (зорилтотыг хэрхэн сканнердах, зорилтот руу хэрхэн холбогдох, салгах, мэдээллийн сангаас зорилтот оруулгыг устгах), systemd болон бусад зүйлд зориулж өөрийн нэгжийг бичих

Хэдийгээр та энэ туршилтыг бүрэн эхээр нь давтаагүй ч гэсэн энэ нийтлэлээс ямар нэг зүйл танд хэрэг болно гэж найдаж байна.

Эх сурвалж: www.habr.com

сэтгэгдэл нэмэх