Ինչի մասին կխոսենք.
Ինչպես արագ տեղակայել ընդհանուր պահեստը երկու սերվերի համար՝ հիմնված 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
modprobe drbd
drbdadm up drbd0
cat /proc/drbd
Մենք ստանում ենք հետևյալը.
Դուք կարող եք սկսել համաժամացումը: Առաջին հանգույցում դուք պետք է կատարեք.
drbdadm primary --force drbd0
Դիտարկենք կարգավիճակը.
cat /proc/drbd
Հիանալի, համաժամացումը սկսվել է: Սպասում ենք մինչև վերջ և տեսնում ենք նկարը.
Քայլ 3. Սկսեք համաժամացումը երկրորդ հանգույցում.
drbdadm primary --force drbd0
Մենք ստանում ենք հետևյալը.
Այժմ մենք կարող ենք գրել 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 պիտակով ստեղծեցինք ֆայլային համակարգ՝ օգտագործելով լռելյայն պարամետրերը:
/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