Ceph միջոցով iSCSI - կամ դահուկներ, երբ կանգնած է ցանցաճոճ

Կա՞ն մեզանից (Ցեֆովոդով) որևէ մեկը, ում դուր չի գալիս «պրոֆեսիոնալ էքստրիմը»։

Դա անհավանական է, հակառակ դեպքում մենք չէինք թափառի այս չափազանց հետաքրքիր և զվարճալի ապրանքի շուրջ։

Ceph-ի շատ օգտատերեր հանդիպել են ավելի քիչ տարածված (կամ գուցե նույնիսկ շատ հազվագյուտ), բայց երբեմն օգտակար օգտագործման դեպքի՝ Ceph-ը միացնել iSCSI-ի կամ FC-ի միջոցով։ Ինչո՞ւ։ Օրինակ՝ Ceph պատկերը մատուցել դեռևս վիրտուալիզացված չլինող սերվերի։ Windows Կամ Solaris: Կամ վիրտուալացված, բայց օգտագործելով հիպերվիզոր, որը չի աջակցում Ceph-ին, և, ինչպես գիտենք, դրանցից շատերը կան: Օրինակ՞: Օրինակ՝ HyperV-ն կամ ESXi-ն, որոնք ակտիվորեն օգտագործվում են: Եվ եթե առաջանում է Ceph պատկերը հյուր մեքենային մատուցելու խնդիր, դա դառնում է շատ հետաքրքիր մարտահրավեր:

Այսպիսով, տրված՝

  1. արդեն աշխատող Ceph կլաստեր
  2. գոյություն ունեցող պատկեր, որը պետք է մատուցվի iSCSI-ի միջոցով
  3. Լողավազանի անվանումը իմփուլ, պատկերի անվանումը իմ պատկեր

Սկսե՞նք։

Նախևառաջ, երբ մենք խոսում ենք FC-ի կամ iSCSI-ի մասին, մենք ունենք այնպիսի էնթիթներ, ինչպիսիք են նախաձեռնողը և թիրախը: Target-ը իրականում սերվեր է, նախաձեռնողը` հաճախորդ: Մեր խնդիրն է Ceph պատկերը նվազագույն ջանքերով մատուցել նախաձեռնողին: Սա նշանակում է, որ մենք պետք է տեղակայենք թիրախը: Բայց որտե՞ղ, որ համակարգչի վրա:

Բարեբախտաբար, Ceph կլաստերում մենք ունենք առնվազն մեկ բաղադրիչ՝ ֆիքսված IP հասցեով և դրա վրա կարգավորված ամենակարևոր Ceph բաղադրիչներից մեկը՝ մոնիտորը։ Համապատասխանաբար, մենք մոնիտորի վրա ստեղծեցինք iSCSI թիրախ (և նախաձեռնող, առնվազն փորձարկման նպատակներով)։ Ես սա արեցի CentOS, սակայն լուծումը կաշխատի նաև ցանկացած այլ բաշխման համար՝ պարզապես տեղադրեք փաթեթները այնպես, ինչպես ընդունելի է ձեր բաշխման համար։

# yum -y install iscsi-initiator-utils targetcli

Ի՞նչ նպատակի համար են տեղադրված փաթեթները։

  • թիրախային կլիշե — ներկառուցված միջուկը կառավարելու գործիք Linux SCSI թիրախ
  • iscsi-նախաձեռնող-օգտակար գործիքներ — կառավարման համար օգտագործվող օգտակար ծրագրերով փաթեթ, որը կրկին ներկառուցված է միջուկի մեջ Linux iSCSI նախաձեռնող

iSCSI-ի միջոցով պատկերը նախաձեռնողին մատուցելու համար իրադարձությունների զարգացման երկու տարբերակ կա՝ օգտագործել թիրախի օգտագործողի տարածքի backend-ը կամ միացնել պատկերը որպես օպերացիոն համակարգի համար տեսանելի բլոկային սարք և արտահանել այն iSCSI-ի միջոցով: Մենք կգնանք երկրորդ ճանապարհով՝ օգտագործողի տարածքի backend-ը դեռևս «փորձարարական» վիճակում է և լիովին պատրաստ չէ արդյունավետ օգտագործման: Բացի այդ, այն ունի նաև թերություններ, որոնց մասին կարելի է շատ քննարկել և (սարսափելի է!) վիճել:

Եթե ​​մենք օգտագործում ենք ցանկացած կայուն բաշխում երկար աջակցության ցիկլով, ապա մեր միջուկը որևէ հնագույն-հին տարբերակ է։ Օրինակ՝ 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 install kernel-ml
  • Վերագործարկեք սերվերը մոնիտորի միջոցով (մենք ունենք երեք մոնիտոր, չէ՞):

Պատկերը տեղադրել որպես բլոկային սարք

# rbd map mypool/myimage
/dev/rbd0

Մնում է միայն կարգավորել թիրախը։ Այս օրինակում ես այն կկարգավորեմ այսպես կոչված ցուցադրական ռեժիմով՝ առանց նույնականացման, տեսանելի և հասանելի բոլորի համար։ Արտադրական միջավայրում դուք, հավանաբար, կցանկանաք կարգավորել նույնականացումը, բայց դա մի փոքր դուրս է այսօրվա պարզապես զվարճանքի վարժության շրջանակներից։

Մենք ստեղծում ենք disk1 անունով backend, որը կապակցված է /dev/rbd/mypool/myimage ֆայլի հետ։ Նշված ֆայլը /dev/rbd0-ի խորհրդանշական հղում է, որը ավտոմատ կերպով ստեղծվում է udev daemon-ի կողմից։ Մենք օգտագործում ենք խորհրդանշական հղում, քանի որ rbd սարքի անունը կարող է փոխվել՝ կախված նրանից, թե ինչպես են Ceph պատկերները միացված հոսթին։

Եկեք ստեղծենք backend՝

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

Ստեղծեք iSCSI թիրախ՝

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

Մենք backend-ը որպես 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

Նպատակային կոնֆիգուրացիայի վերականգնումը մի փոքր ավելի բարդ է. մենք պետք է գրենք systemd-ի համար մի միավոր, որը կվերականգնի կոնֆիգուրացիան։

# cat /usr/lib/systemd/system/scsi-target.service
[Unit]
Description=Start iSCSI target

After=network-online.target rbdmap.service
Մինչև=remote-fs-pre.target
Ցանկանում է=network-online.target remote-fs-pre.target

[Ծառայություն]
Տեսակ=մեկ կրակոց
RemainAfterExit=այո
ExecStart=/bin/targetcli restoreconfig

[Տեղադրեք]
WantedBy = multi-user.target

# systemctl daemon- վերբեռնել
# systemctl-ը միացնում է scsi-target-ը

Վերջնական թեստը մեր մոնիտորը կրկին վերագործարկելն է (այն այժմ iSCSI թիրախն է): Պետք է նշել, որ եթե մենք չմաքրեինք նախաձեռնողի տվյալների բազան հրամանով iscsiadm -n discoverydb -o ջնջել ... ապա կարող եք ստանալ սերվեր, որը չի բեռնվում կամ երկար ժամանակ է պահանջում բեռնվելու համար։

Ի՞նչ է մնացել։

Կարգավորեք նախաձեռնողը սերվերի վրա, որտեղ մենք ուզում ենք ուղարկել թիրախը։

Ինչպե՞ս ապահովել մեր թիրախի սխալների նկատմամբ հանդուրժողականությունը։

Դուք կարող եք նմանապես կարգավորել թիրախները այլ մոնիտորների վրա և կարգավորել բազմաուղիների անցումը (VMware-ը կհասկանա սա և նույնիսկ կաշխատի, բայց Hyper-V-ն՝ ոչ, քանի որ այն պահանջում է SCSI կողպեքներ): Քանի որ միջուկի Ceph հաճախորդը չի օգտագործում քեշավորում, սա լիովին իրագործելի է: Մեկ այլ տարբերակ է կլաստերային ռեսուրս ստեղծել երեք բաղադրիչներից՝ նվիրված IP հասցեներ target-ը և rbdmap-ը և scsi-target-ը սպասարկում են, և կառավարում են այս ռեսուրսը կլաստերացման գործիքների միջոցով (ո՞վ ասաց pacemaker-ը):

Կատարված բառի փոխարեն

Ինչպես տեսնում եք, այս հոդվածը մի փոքր կատակ է, բայց դրանում ես փորձեցի «արագ և օրինակներով» միաժամանակ քննարկել մի քանի բավականին տարածված թեմաներ՝ iSCSI թիրախը, որը կարող է պարտադիր չէ, որ արտահանի Ceph պատկերներ, բայց, օրինակ, արտահանի LVM հատորներ, iSCSI նախաձեռնողի հետ աշխատելու հիմունքները (ինչպես սկանավորել թիրախը, ինչպես միանալ թիրախին, անջատել, ջնջել թիրախի մասին գրառումը տվյալների բազայից), գրել ձեր սեփական միավորը systemd-ի համար և մի քանի այլ բաներ։

Հուսով եմ, որ նույնիսկ եթե դուք ամբողջությամբ չկրկնեք այս ամբողջ փորձը, այս հոդվածից գոնե ինչ-որ բան օգտակար կլինի ձեզ համար։

Source: www.habr.com

Գնեք հուսալի հոստինգ DDoS պաշտպանությամբ կայքերի, VPS VDS սերվերների համար 🔥 Գնեք հուսալի կայքերի հոսթինգ՝ DDoS պաշտպանությամբ, VPS VDS սերվերներով | ProHoster