Ceph միջոցով iSCSI - կամ դահուկներ, երբ կանգնած է ցանցաճոճ
Կա՞ն մեր մեջ (ցեֆովոդով), ովքեր չեն սիրում «պրոֆեսիոնալ էքստրիմը»։
Քիչ հավանական է, հակառակ դեպքում մենք չէինք շրջվի այս չափազանց հետաքրքիր և զվարճալի արտադրանքով:
Նրանցից շատերը, ովքեր ներգրավված են եղել Ceph-ի շահագործման մեջ, հանդիպել են ոչ շատ հաճախակի (ավելի ճիշտ, նույնիսկ շատ հազվադեպ), բայց երբեմն պահանջարկ ունեցող դեպքի` Ceph-ին միացնելը iSCSI-ի կամ FC-ի միջոցով: Ինչի համար? Դե, օրինակ, ներկայացրեք պատկերը Ceph-ից Windows կամ Solaris սերվերին, որը դեռևս չի վիրտուալացվել ինչ-ինչ պատճառներով: Կամ վիրտուալացված, բայց օգտագործելով հիպերվիզոր, որը չի կարող անել Ceph-ը, և, ինչպես գիտենք, դրանք շատ են: Օրինակ? Դե, օրինակ, HyperV կամ ESXi, որոնք ակտիվորեն օգտագործվում են: Եվ եթե առաջադրանք է առաջանում Ceph-ից պատկերը հյուրի մեքենային մատուցելը, դա վերածվում է շատ հետաքրքիր առաջադրանքի:
Այսպիսով, հաշվի առնելով.
արդեն գործող Ceph կլաստերը
արդեն գոյություն ունեցող պատկեր, որը պետք է սպասարկվի iSCSI-ի միջոցով
Լողավազանի անվանումը mypool, պատկերի անվանումը իմ պատկեր
Սկսե՞լ
Առաջին հերթին, երբ մենք խոսում ենք FC-ի կամ iSCSI-ի մասին, մենք ունենք այնպիսի սուբյեկտներ, ինչպիսիք են նախաձեռնողը և թիրախը: Թիրախը իրականում սերվեր է, նախաձեռնողը հաճախորդ է: Մեր խնդիրն է նվազագույն ջանքերով Ceph-ի կերպարը ներկայացնել նախաձեռնողին: Սա նշանակում է, որ մենք պետք է ընդլայնենք թիրախը։ Բայց որտե՞ղ, ի՞նչ համակարգչի վրա:
Բարեբախտաբար, Ceph կլաստերում մենք ունենք առնվազն մեկ բաղադրիչ, որի IP հասցեն ամրագրված է և որի վրա կազմաձևված է Ceph-ի ամենակարևոր բաղադրիչներից մեկը, և այդ բաղադրիչը մոնիտորն է: Համապատասխանաբար, մենք տեղադրում ենք iSCSI թիրախ մոնիտորի վրա (և միաժամանակ նախաձեռնող, գոնե թեստերի համար): Ես դա արեցի CentOS-ում, բայց լուծումը հարմար է նաև ցանկացած այլ բաշխման համար. պարզապես անհրաժեշտ է փաթեթները տեղադրել այնպես, ինչպես ընդունելի է ձեր բաշխման մեջ:
# yum -y install iscsi-initiator-utils targetcli
Ո՞րն է տեղադրված փաթեթների նպատակը:
targetcli — Linux միջուկում ներկառուցված SCSI թիրախը կառավարելու օգտակար ծրագիր
iscsi-initiator-utils — փաթեթ՝ կոմունալ ծառայություններով, որոնք օգտագործվում են Linux միջուկում ներկառուցված iSCSI նախաձեռնիչը կառավարելու համար
Պատկերը iSCSI-ի միջոցով նախաձեռնողին ներկայացնելու համար կա իրադարձությունների զարգացման երկու տարբերակ՝ օգտագործեք թիրախի օգտագործողների տարածքը կամ միացրեք պատկերը որպես օպերացիոն համակարգին տեսանելի բլոկային սարք և արտահանեք այն iSCSI-ի միջոցով: Մենք կգնանք երկրորդ ճանապարհով. userspace backend-ը դեռ գտնվում է «փորձնական» վիճակում և փոքր-ինչ պատրաստ չէ արդյունավետ օգտագործման համար: Բացի այդ, դրա հետ կապված որոգայթներ կան, որոնց մասին կարելի է շատ խոսել և (օ՜ սարսափ!) վիճել։
Եթե մենք օգտագործում ենք նույնիսկ որոշակիորեն կայուն բաշխում երկար աջակցության ցիկլով, ապա մեր ունեցած միջուկը հնագույն, հնագույն տարբերակ է: Օրինակ, CentOS7-ում այն 3.10.* է, CentOS8-ում՝ 4.19։ Իսկ մեզ հետաքրքրում է առնվազն 5.3 (ավելի ճիշտ՝ 5.4) և ավելի նոր միջուկ։ Ինչո՞ւ։ Քանի որ լռելյայնորեն Ceph պատկերները միացված են ընտրանքների մի շարք, որոնք համատեղելի չեն հին միջուկների հետ: Սա նշանակում է, որ մենք միացնում ենք պահեստը նոր միջուկի հետ մեր բաշխման համար (օրինակ, CentOS-ի համար սա elrepo-ն է), տեղադրում ենք նոր միջուկը և վերագործարկում համակարգը՝ նոր միջուկի հետ աշխատելու համար.
Վերագործարկեք սերվերը մոնիտորով (մենք ունենք երեք մոնիտոր, այնպես չէ՞):
Պատկերը որպես բլոկ սարքի միացում
# rbd map mypool/myimage
/dev/rbd0
Մնում է միայն կարգավորել թիրախը: Այս օրինակում ես կկարգավորեմ թիրախը այսպես կոչված. Դեմո ռեժիմ՝ առանց նույնականացման, տեսանելի և հասանելի բոլորի համար: Արտադրական միջավայրում, հավանաբար, կցանկանաք կարգավորել նույնականացումը, բայց դա մի փոքր դուրս է շրջանակից այսօրվա պարզապես զվարճանքի համար:
Ստեղծեք disk1 անունով backend՝ կապված /dev/rbd/mypool/myimage ֆայլի հետ: Նշված ֆայլը udev daemon-ի կողմից ավտոմատ կերպով ստեղծված սիմվոլիկ հղում է դեպի /dev/rbd0: Մենք օգտագործում ենք խորհրդանշական հղում, քանի որ rbd սարքի անվանումը կարող է փոխվել՝ կախված այն հաջորդականությունից, որով Ceph պատկերները միացված են հոսթին:
# 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 թիրախի միջոցով: Բեռնման հետ կապված խնդիրներից խուսափելու համար ավելի լավ է հեռացնել միացված սկավառակը և հայտնաբերված թիրախը տեղական նախաձեռնողից.
Մնում է միայն պահպանել կոնֆիգուրացիան, որպեսզի պատկերն ավտոմատ կերպով միանա, իսկ միացումից հետո թիրախը շերտավորվի: Թիրախի արձակումը բաղկացած է երկու քայլից՝ RBD-ի միացում և թիրախի իրական արձակում:
Նախ, եկեք կարգավորենք RBD պատկերների ավտոմատ միացումը հյուրընկալողին: Դա արվում է՝ ավելացնելով հետևյալ տողերը /etc/ceph/rbdmap ֆայլին.
Վերջնական թեստը մեր մոնիտորը նորից վերագործարկելն է (այն այժմ iSCSI թիրախ է): Հարկ է նշել, որ եթե մենք չմաքրեինք նախաձեռնողի տվյալների բազան հրամանով iscsiadm -n discoverydb -o ջնջել ... դուք կարող եք հայտնվել սերվերի հետ, որը չի բեռնվում կամ երկար ժամանակ է պահանջում բեռնման համար:
Ի՞նչ է մնացել։
Կազմաձևեք նախաձեռնողը սերվերի վրա, որտեղ մենք ցանկանում ենք ուղարկել թիրախը:
Ինչպե՞ս ապահովել մեր թիրախի սխալ հանդուրժողականությունը:
Դուք կարող եք նմանապես կարգավորել թիրախները այլ մոնիտորների վրա և կարգավորել բազմուղի (vmware-ը դա կհասկանա և նույնիսկ կաշխատի, Hyper-V-ն չի հասկանա. դրա համար պահանջվում են SCSI կողպեքներ): Քանի որ միջուկից Ceph հաճախորդը չի օգտագործում քեշավորում, սա բավականին գործունակ է: Կամ մեկ այլ տարբերակ երեք բաղադրիչներից բաղկացած կլաստերային ռեսուրս ստեղծելն է՝ հատուկ թիրախային IP հասցե և rbdmap և scsi-target ծառայություններ, և կառավարել այս ռեսուրսը կլաստերավորման գործիքների միջոցով (ո՞վ ասաց սրտի ռիթմավարը):
Կատարված բառի փոխարեն
Ինչպես պարզ է, այս հոդվածը մի քիչ կատակ է, բայց դրանում ես փորձեցի «արագ և օրինակներով» դիտարկել մի քանի բավականին հայտնի թեմաներ միաժամանակ՝ iSCSI թիրախ, որը կարող է պարտադիր կերպով չարտահանել Ceph պատկերներ, բայց օրինակ. արտահանել LVM ծավալներ, iSCSI նախաձեռնողի հետ աշխատելու հիմունքներ (ինչպես սկանավորել թիրախը, ինչպես միանալ թիրախին, անջատել, ջնջել թիրախային մուտքը տվյալների բազայից), գրել ձեր սեփական միավորը systemd-ի համար և մի քանի այլ
Հուսով եմ, որ նույնիսկ եթե այս ամբողջ փորձը ամբողջությամբ չկրկնեք, գոնե այս հոդվածից ինչ-որ բան օգտակար կլինի ձեզ համար: