Կլաստերային պահեստավորում փոքր վեբ կլաստերների համար, որոնք հիմնված են drbd+ocfs2-ի վրա

Ինչի մասին կխոսենք.
Ինչպես արագ տեղակայել ընդհանուր պահեստը երկու սերվերի համար՝ հիմնված drbd+ocfs2 լուծումների վրա:

Ո՞ւմ համար սա օգտակար կլինի.
Ձեռնարկը օգտակար կլինի համակարգի ադմինիստրատորների և յուրաքանչյուրի համար, ով ընտրում է պահեստավորման իրականացման մեթոդ կամ ցանկանում է փորձել լուծումը:

Ի՞նչ որոշումներից ենք հրաժարվել և ինչո՞ւ։

Հաճախ մենք բախվում ենք մի իրավիճակի, երբ մենք պետք է ներդնենք ընդհանուր հիշողություն փոքր վեբ կլաստերի վրա կարդալու-գրելու լավ կատարմամբ: Մենք փորձեցինք տարբեր տարբերակներ մեր նախագծերի համար ընդհանուր պահեստի իրականացման համար, բայց քչերը կարողացան մեզ բավարարել միանգամից մի քանի ցուցանիշներով: Այժմ մենք ձեզ կասենք, թե ինչու:

  • Glusterfs-ը մեզ չբավարարեց կարդալու և գրելու կատարողականությամբ, մեծ թվով ֆայլերի միաժամանակյա ընթերցման հետ կապված խնդիրներ կային, և պրոցեսորի վրա մեծ ծանրաբեռնվածություն կար: Ֆայլերի ընթերցման հետ կապված խնդիրը կարող է լուծվել՝ անմիջապես աղյուսից մուտք գործելով դրանք, բայց դա միշտ չէ, որ կիրառելի է և, ընդհանուր առմամբ, սխալ է:

  • Ceph-ին դուր չի եկել չափազանց բարդությունը, որը կարող է վնասակար լինել 2-4 սերվեր ունեցող նախագծերի վրա, հատկապես, եթե նախագիծը հետագայում պահպանվի: Կրկին կան կատարողականի լուրջ սահմանափակումներ, որոնք ստիպում են մեզ ստեղծել առանձին պահեստային կլաստերներ, ինչպես glusterfs-ի դեպքում:

  • Մեկ NFS սերվերի օգտագործումը ընդհանուր պահեստավորումն իրականացնելու համար հարցեր է առաջացնում սխալների հանդուրժողականության առումով:

  • s3-ը հիանալի հանրաճանաչ լուծում է առաջադրանքների որոշակի շրջանակի համար, բայց դա ֆայլային համակարգ չէ, որը նեղացնում է դրա շրջանակը:

  • lsyncd. Եթե ​​մենք արդեն սկսել ենք խոսել «ոչ ֆայլային համակարգերի» մասին, ապա արժե անցնել այս հանրաճանաչ լուծմանը: Այն ոչ միայն հարմար չէ երկկողմանի փոխանակման համար (բայց եթե իսկապես ցանկանում եք, ապա կարող եք), այն նաև կայուն չի աշխատում մեծ թվով ֆայլերի վրա: Ամբողջ բանի հաճելի հավելումն այն է, որ այն մեկ թելերով է: Պատճառը ծրագրի ճարտարապետության մեջ է. այն օգտագործում է inotify՝ աշխատանքային օբյեկտները վերահսկելու համար, որոնք վերագրում է գործարկման և վերասկանավորման ժամանակ։ rsync-ն օգտագործվում է որպես փոխանցման միջոց:

Ձեռնարկ. ինչպես տեղակայել ընդհանուր պահեստը drbd+ocfs2-ի վրա

Մեզ համար ամենահարմար լուծումներից մեկը հղումն էր ocfs2+drbd. Այժմ մենք ձեզ կասենք, թե ինչպես կարող եք արագ տեղակայել ընդհանուր պահեստը երկու սերվերների համար՝ հիմնված լուծման տվյալների բազայի վրա: Բայց նախ, մի փոքր բաղադրիչների մասին.

DRBD - Linux-ի ստանդարտ բաշխման պահեստավորման համակարգ, որը թույլ է տալիս վերարտադրել տվյալները սերվերների միջև բլոկներով: Հիմնական հավելվածը սխալների դիմացկուն պահեստի ստեղծումն է:

OCFS2 - ֆայլային համակարգ, որն ապահովում է միևնույն պահեստի ընդհանուր օգտագործումը մի քանի համակարգերի կողմից: Ներառված է Linux բաշխման մեջ և միջուկի մոդուլ է և օգտագործողների տարածքի գործիքներ՝ FS-ի հետ աշխատելու համար: OCFS2-ը կարող է օգտագործվել ոչ միայն DRBD-ի, այլև iSCSI-ի միջոցով՝ բազմաթիվ միացումներով: Մեր օրինակում մենք օգտագործում ենք DRBD:

Բոլոր գործողությունները կատարվում են ubuntu սերվերի 18.04-ում նվազագույն կոնֆիգուրացիայով:

Քայլ 1. Կարգավորել DRBD:

/etc/drbd.d/drbd0.res ֆայլում մենք նկարագրում ենք մեր վիրտուալ բլոկ սարքը /dev/drbd0:

resource drbd0 {
    syncer { rate 1000M; }
    net {
        allow-two-primaries;
        after-sb-0pri discard-zero-changes;
        after-sb-1pri discard-secondary;
        after-sb-2pri disconnect;
    }
    startup { become-primary-on both; }
    on drbd1 {
        meta-disk internal;
        device /dev/drbd0;
        disk /dev/vdb1;
        address 10.10.10.192:7789;
}
    on drbd2 {
        meta-disk internal;
        device /dev/drbd0;
        disk /dev/vdb1;
        address 10.10.10.193:7789;
}
}

մետա սկավառակ ներքին — օգտագործեք նույն բլոկային սարքերը՝ մետատվյալները պահելու համար
սարք /dev/drbd0 — օգտագործեք /dev/drbd0 որպես drbd ծավալի ուղի:
սկավառակ /dev/vdb1 - օգտագործեք /dev/vdb1
syncer { rate 1000M; } — օգտագործել գիգաբիթ ալիքի թողունակությունը
թույլատրել-երկու-փրայմերիզ - կարևոր տարբերակ, որը թույլ է տալիս փոփոխություններն ընդունել երկու հիմնական սերվերների վրա
after-sb-0pri, after-sb-1pri, after-sb-2pri - ընտրանքներ, որոնք պատասխանատու են հանգույցի գործողությունների համար, երբ հայտնաբերվում է պառակտված ուղեղ: Ավելի մանրամասն կարելի է գտնել փաստաթղթերում:
դառնալ-առաջնային-երկու վրա — երկու հանգույցներն էլ դնում է առաջնային:

Մեր դեպքում մենք ունենք երկու բացարձակապես նույնական VM-ներ՝ նվիրված վիրտուալ ցանցով՝ 10 գիգաբիթ թողունակությամբ:

Մեր օրինակում երկու կլաստերային հանգույցների ցանցի անվանումներն են drbd1 և drbd2: Ճիշտ աշխատանքի համար անհրաժեշտ է համընկնել հոսթների անուններն ու IP հասցեները /etc/hosts-ում:

10.10.10.192 drbd1
10.10.10.193 drbd2

Քայլ 2. Ստեղծեք հանգույցներ.

Երկու սերվերների վրա մենք աշխատում ենք.

drbdadm create-md drbd0

Կլաստերային պահեստավորում փոքր վեբ կլաստերների համար, որոնք հիմնված են drbd+ocfs2-ի վրա

modprobe drbd
drbdadm up drbd0
cat /proc/drbd

Մենք ստանում ենք հետևյալը.

Կլաստերային պահեստավորում փոքր վեբ կլաստերների համար, որոնք հիմնված են drbd+ocfs2-ի վրա

Դուք կարող եք սկսել համաժամացումը: Առաջին հանգույցում դուք պետք է կատարեք.

drbdadm primary --force drbd0

Դիտարկենք կարգավիճակը.

cat /proc/drbd

Կլաստերային պահեստավորում փոքր վեբ կլաստերների համար, որոնք հիմնված են drbd+ocfs2-ի վրա

Հիանալի, համաժամացումը սկսվել է: Սպասում ենք մինչև վերջ և տեսնում ենք նկարը.

Կլաստերային պահեստավորում փոքր վեբ կլաստերների համար, որոնք հիմնված են drbd+ocfs2-ի վրա

Քայլ 3. Սկսեք համաժամացումը երկրորդ հանգույցում.

drbdadm primary --force drbd0

Մենք ստանում ենք հետևյալը.

Կլաստերային պահեստավորում փոքր վեբ կլաստերների համար, որոնք հիմնված են drbd+ocfs2-ի վրա

Այժմ մենք կարող ենք գրել drbd-ին երկու սերվերից:

Քայլ 4. Տեղադրեք և կարգավորեք ocfs2-ը:

Մենք կօգտագործենք բավականին չնչին կոնֆիգուրացիա.

cluster:
     node_count = 2
     name = ocfs2cluster

node:
     number = 1
     cluster = ocfs2cluster
     ip_port = 7777
     ip_address = 10.10.10.192
     name = drbd1

node:
     number = 2
     cluster = ocfs2cluster
     ip_port = 7777
     ip_address = 10.10.10.193
     name = drbd2

Այն պետք է գրվի /etc/ocfs2/cluster.conf երկու հանգույցների վրա:

Մենք ստեղծում ենք FS drbd0-ի վրա ցանկացած հանգույցի վրա.

mkfs.ocfs2 -L "testVol" /dev/drbd0

Այստեղ մենք drbd0-ի վրա testVol պիտակով ստեղծեցինք ֆայլային համակարգ՝ օգտագործելով լռելյայն պարամետրերը:

Կլաստերային պահեստավորում փոքր վեբ կլաստերների համար, որոնք հիմնված են drbd+ocfs2-ի վրա

/etc/default/o2cb-ում դուք պետք է սահմանեք (ինչպես մեր կազմաձևման ֆայլում)

O2CB_ENABLED=true 
O2CB_BOOTCLUSTER=ocfs2cluster 

և յուրաքանչյուր հանգույցի վրա կատարեք.

o2cb register-cluster ocfs2cluster

Այնուհետև մենք միացնում ենք և ավելացնում բոլոր այն միավորները, որոնք մեզ անհրաժեշտ են՝ ավտոմատ գործարկելու համար.

systemctl enable drbd o2cb ocfs2
systemctl start drbd o2cb ocfs2

Դրանցից մի քանիսն արդեն կաշխատեն կարգավորման գործընթացում:

Քայլ 5. Երկու հանգույցների վրա էլ միացման կետեր ավելացրեք fstab-ին.

/dev/drbd0 /media/shared ocfs2 defaults,noauto,heartbeat=local 0 0

տեղեկատու /մեդիա/համօգտագործվող այն պետք է նախապես ստեղծվի։

Այստեղ մենք օգտագործում ենք noauto տարբերակները, ինչը նշանակում է, որ ֆայլը չի ​​տեղադրվի գործարկման ժամանակ (ես նախընտրում եմ ցանցային ֆայլերը տեղադրել systemd-ի միջոցով) և heartbeat=local, ինչը նշանակում է օգտագործել սրտի բաբախման ծառայությունը յուրաքանչյուր հանգույցի վրա։ Կա նաև գլոբալ սրտի բաբախյուն, որն ավելի հարմար է մեծ կլաստերների համար։

Հաջորդը կարող եք մոնտաժել /մեդիա/համօգտագործվող և ստուգեք բովանդակության համաժամացումը:

Կատարված! Արդյունքում, մենք ստանում ենք քիչ թե շատ սխալ հանդուրժող պահեստավորում՝ մասշտաբայնությամբ և պատշաճ կատարողականությամբ:

Source: www.habr.com

Добавить комментарий