drbd+ocfs2 asosidagi kichik veb-klasterlar uchun klaster xotirasi

Biz nima haqida gaplashamiz:
drbd+ocfs2 yechimlari asosida ikkita server uchun umumiy xotirani qanday tezda joylashtirish mumkin.

Bu kim uchun foydali bo'ladi:
Qo'llanma tizim ma'murlari va saqlashni amalga oshirish usulini tanlagan yoki yechimni sinab ko'rmoqchi bo'lgan har bir kishi uchun foydali bo'ladi.

Biz qanday qarorlarni rad etdik va nima uchun?

Ko'pincha biz kichik veb-klasterda yaxshi o'qish va yozish ko'rsatkichlari bilan birgalikda saqlashni amalga oshirishimiz kerak bo'lgan vaziyatga duch kelamiz. Biz loyihalarimiz uchun umumiy saqlashni amalga oshirishning turli xil variantlarini sinab ko'rdik, ammo bir nechtasi bir vaqtning o'zida bir nechta ko'rsatkichlar bo'yicha bizni qoniqtira oldi. Endi biz sizga nima uchun ekanligini aytib beramiz.

  • Glusterfs bizni o'qish va yozish ko'rsatkichlari bilan qoniqtirmadi; bir vaqtning o'zida ko'p sonli fayllarni o'qish bilan bog'liq muammolar mavjud edi va protsessorda yuqori yuk bor edi. Fayllarni o'qish bilan bog'liq muammo ularga to'g'ridan-to'g'ri g'ishtdan kirish orqali hal qilinishi mumkin, ammo bu har doim ham qo'llanilmaydi va odatda noto'g'ri.

  • Ceph 2-4 serverli loyihalarda zararli bo'lishi mumkin bo'lgan haddan tashqari murakkablikni yoqtirmadi, ayniqsa loyiha keyinchalik saqlanib qolsa. Shunga qaramay, bizni glusterfs kabi alohida saqlash klasterlarini yaratishga majbur qiladigan jiddiy ishlash cheklovlari mavjud.

  • Birgalikda saqlashni amalga oshirish uchun bitta NFS serveridan foydalanish xatolarga chidamlilik nuqtai nazaridan savollar tug'diradi.

  • s3 - bu ma'lum bir qator vazifalar uchun juda mashhur echim, ammo bu fayl tizimi emas, bu uning doirasini toraytiradi.

  • lsyncd. Agar biz allaqachon "fayl bo'lmagan tizimlar" haqida gapira boshlagan bo'lsak, unda ushbu mashhur echimni ko'rib chiqishga arziydi. Bu nafaqat ikki tomonlama almashish uchun mos emas (lekin agar chindan ham xohlasangiz, unda mumkin), u ham ko'p sonli fayllarda barqaror ishlamaydi. Hamma narsaga yaxshi qo'shimcha - bu bitta ipli. Buning sababi dastur arxitekturasida: u ishga tushirish va qayta ko'rish paytida tayinlaydigan ish ob'ektlarini kuzatish uchun inotify-dan foydalanadi. rsync uzatish vositasi sifatida ishlatiladi.

Qo'llanma: drbd+ocfs2 asosida umumiy xotirani qanday o'rnatish

Biz uchun eng qulay echimlardan biri bu havola edi ocfs2+drbd. Endi biz sizga yechim ma'lumotlar bazasiga asoslangan ikkita server uchun umumiy xotirani qanday tezda joylashtirishingiz mumkinligini aytib beramiz. Lekin birinchi navbatda, komponentlar haqida bir oz:

DRBD - bloklardagi serverlar o'rtasida ma'lumotlarni takrorlash imkonini beruvchi standart Linux distributividan saqlash tizimi. Asosiy dastur xatoga chidamli saqlashni yaratishdir.

OCFS2 - bir xil xotiradan bir nechta tizimlar tomonidan birgalikda foydalanishni ta'minlaydigan fayl tizimi. Linux distributiviga kiritilgan va FS bilan ishlash uchun yadro moduli va foydalanuvchi maydoni vositalaridir. OCFS2 nafaqat DRBD orqali, balki bir nechta ulanishlar bilan iSCSI orqali ham ishlatilishi mumkin. Bizning misolimizda biz DRBD dan foydalanamiz.

Barcha harakatlar ubuntu server 18.04 da minimal konfiguratsiyada amalga oshiriladi.

1-qadam. DRBDni sozlang:

/etc/drbd.d/drbd0.res faylida biz virtual blok qurilmamiz /dev/drbd0 tasvirlangan:

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;
}
}

ichki meta-disk — metamaʼlumotlarni saqlash uchun bir xil blokli qurilmalardan foydalaning
qurilma /dev/drbd0 — drbd hajmiga yo'l sifatida /dev/drbd0 dan foydalaning.
disk /dev/vdb1 - /dev/vdb1 dan foydalaning
sinxronlashtiruvchi {stavka 1000M; } — gigabit kanal o‘tkazish qobiliyatidan foydalaning
ruxsat-ikki-birlamchi - ikkita asosiy serverda o'zgarishlarni qabul qilish imkonini beruvchi muhim variant
keyin-sb-0pri, keyin-sb-1pri, keyin-sb-2pri — splitbrain aniqlanganda tugunning harakatlariga javob beradigan variantlar. Batafsil ma'lumotni hujjatlarda topishingiz mumkin.
ikkalasida-birlamchi-bo'lib — ikkala tugunni birlamchiga o'rnatadi.

Bizning holatda, bizda ikkita mutlaqo bir xil VM mavjud, ular 10 gigabit o'tkazish qobiliyatiga ega bo'lgan maxsus virtual tarmoqqa ega.

Bizning misolimizda ikkita klaster tugunining tarmoq nomlari drbd1 va drbd2. To'g'ri ishlashi uchun siz /etc/hosts-dagi xostlarning nomlari va IP-manzillariga mos kelishingiz kerak.

10.10.10.192 drbd1
10.10.10.193 drbd2

2-qadam. Tugunlarni sozlang:

Ikkala serverda ham ishlaymiz:

drbdadm create-md drbd0

drbd+ocfs2 asosidagi kichik veb-klasterlar uchun klaster xotirasi

modprobe drbd
drbdadm up drbd0
cat /proc/drbd

Biz quyidagilarni olamiz:

drbd+ocfs2 asosidagi kichik veb-klasterlar uchun klaster xotirasi

Siz sinxronlashni boshlashingiz mumkin. Birinchi tugunda siz quyidagilarni bajarishingiz kerak:

drbdadm primary --force drbd0

Keling, holatni ko'rib chiqaylik:

cat /proc/drbd

drbd+ocfs2 asosidagi kichik veb-klasterlar uchun klaster xotirasi

Ajoyib, sinxronizatsiya boshlandi. Biz oxirigacha kutamiz va rasmni ko'ramiz:

drbd+ocfs2 asosidagi kichik veb-klasterlar uchun klaster xotirasi

3-qadam. Ikkinchi tugunda sinxronlashni boshlang:

drbdadm primary --force drbd0

Biz quyidagilarni olamiz:

drbd+ocfs2 asosidagi kichik veb-klasterlar uchun klaster xotirasi

Endi biz drbd ga ikkita serverdan yozishimiz mumkin.

4-qadam. Ocfs2 ni o'rnating va sozlang.

Biz juda ahamiyatsiz konfiguratsiyadan foydalanamiz:

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

Uni yozib olish kerak /etc/ocfs2/cluster.conf ikkala tugunlarda.

Biz har qanday tugunda drbd0 da FS yaratamiz:

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

Bu yerda standart parametrlardan foydalangan holda drbd0 da testVol yorlig'i bilan fayl tizimini yaratdik.

drbd+ocfs2 asosidagi kichik veb-klasterlar uchun klaster xotirasi

/etc/default/o2cb-da siz sozlashingiz kerak (bizning konfiguratsiya faylimizdagi kabi)

O2CB_ENABLED=true 
O2CB_BOOTCLUSTER=ocfs2cluster 

va har bir tugunda bajaring:

o2cb register-cluster ocfs2cluster

Keyin biz avtomatik ishga tushirish uchun kerak bo'lgan barcha birliklarni yoqamiz va qo'shamiz:

systemctl enable drbd o2cb ocfs2
systemctl start drbd o2cb ocfs2

Ulardan ba'zilari o'rnatish jarayonida allaqachon ishlaydi.

5-qadam. Ikkala tugundagi fstab-ga o'rnatish nuqtalarini qo'shing:

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

Katalog /media/shared uni oldindan yaratish kerak.

Bu erda biz noauto opsiyalaridan foydalanamiz, ya'ni fayl ishga tushirilganda o'rnatilmaydi (men tarmoq fayllarini systemd orqali o'rnatishni afzal ko'raman) va heartbeat=local, ya'ni har bir tugunda yurak urishi xizmatidan foydalanish. Katta klasterlar uchun ko'proq mos keladigan global yurak urishi ham mavjud.

Keyinchalik siz o'rnatishingiz mumkin /media/shared va kontent sinxronizatsiyasini tekshiring.

Bajar! Natijada, biz ko'proq yoki kamroq nosozliklarga chidamli xotiraga ega bo'lamiz va miqyosi va yaxshi ishlashi bilan.

Manba: www.habr.com

a Izoh qo'shish