drbd+ocfs2 əsasında kiçik veb klasterlər üçün klaster yaddaşı

Nə danışacağıq:
drbd+ocfs2 həlləri əsasında iki server üçün paylaşılan yaddaşı necə tez yerləşdirmək olar.

Bu kimin üçün faydalı olacaq:
Dərslik sistem administratorları və yaddaşın tətbiqi metodunu seçən və ya həllini sınamaq istəyən hər kəs üçün faydalı olacaq.

Hansı qərarlardan imtina etdik və niyə?

Çox vaxt kiçik bir veb çoxluqda yaxşı oxuma-yazma performansı ilə ortaq yaddaş tətbiq etməli olduğumuz bir vəziyyətlə qarşılaşırıq. Layihələrimiz üçün paylaşılan yaddaşın tətbiqi üçün müxtəlif variantları sınadıq, lakin bir neçə nəfər bizi eyni anda bir neçə göstərici üzrə qane edə bildi. İndi bunun səbəbini sizə deyəcəyik.

  • Glusterfs bizi oxuma və yazma performansı ilə qane etmədi, çox sayda faylın eyni vaxtda oxunmasında problemlər var idi və CPU-da yüksək yük var idi. Faylların oxunması ilə bağlı problem onlara birbaşa kərpicdən daxil olmaqla həll edilə bilər, lakin bu, həmişə tətbiq olunmur və ümumiyyətlə düzgün deyil.

  • Ceph, 2-4 serverli layihələrdə zərərli ola biləcək həddindən artıq mürəkkəbliyi bəyənmədi, xüsusən də layihə sonradan saxlanılarsa. Yenə də bizi glusterflərdə olduğu kimi ayrıca saxlama klasterləri yaratmağa məcbur edən ciddi performans məhdudiyyətləri var.

  • Paylaşılan yaddaşı həyata keçirmək üçün bir NFS serverindən istifadə xətaya dözümlülük baxımından suallar doğurur.

  • s3 müəyyən bir sıra tapşırıqlar üçün əla məşhur həlldir, lakin onun əhatə dairəsini daraldan bir fayl sistemi deyil.

  • lsyncd. Əgər "qeyri-fayl sistemləri" haqqında artıq danışmağa başlamışıqsa, onda bu məşhur həlli nəzərdən keçirməyə dəyər. Yalnız ikitərəfli mübadilə üçün uyğun deyil (lakin həqiqətən istəyirsinizsə, onda edə bilərsiniz), o, həm də çox sayda faylda sabit işləmir. Bütün şeyə gözəl bir əlavə, tək yivli olmasıdır. Səbəb proqramın arxitekturasındadır: işə başlayanda və yenidən tarama zamanı təyin etdiyi iş obyektlərinə nəzarət etmək üçün inotify-dan istifadə edir. rsync ötürmə vasitəsi kimi istifadə olunur.

Dərslik: drbd+ocfs2 əsasında paylaşılan yaddaşı necə yerləşdirmək olar

Bizim üçün ən əlverişli həllərdən biri də link idi ocfs2+drbd. İndi sizə həll verilənlər bazası əsasında iki server üçün paylaşılan yaddaşı necə tez yerləşdirə biləcəyinizi söyləyəcəyik. Ancaq əvvəlcə komponentlər haqqında bir az:

DRBD - bloklardakı serverlər arasında məlumatları təkrarlamağa imkan verən standart Linux paylanmasından saxlama sistemi. Əsas tətbiq səhvlərə davamlı yaddaş qurmaqdır.

OCFS2 - bir neçə sistem tərəfindən eyni yaddaşdan birgə istifadəni təmin edən fayl sistemi. Linux paylanmasına daxildir və kernel modulu və FS ilə işləmək üçün istifadəçi sahəsi alətləridir. OCFS2 yalnız DRBD üzərində deyil, həm də çoxlu əlaqə ilə iSCSI üzərindən istifadə edilə bilər. Nümunəmizdə DRBD istifadə edirik.

Bütün hərəkətlər ubuntu server 18.04-də minimal konfiqurasiyada həyata keçirilir.

Addım 1. DRBD-ni konfiqurasiya edin:

/etc/drbd.d/drbd0.res faylında virtual blok cihazımızı /dev/drbd0 təsvir edirik:

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

daxili meta-disk — metadata saxlamaq üçün eyni blok cihazlarından istifadə edin
cihaz /dev/drbd0 — drbd həcminə gedən yol kimi /dev/drbd0 istifadə edin.
disk /dev/vdb1 - /dev/vdb1 istifadə edin
sinxronlaşdırıcı { dərəcəsi 1000M; } — gigabit kanal bant genişliyindən istifadə edin
icazə-iki əsas - iki əsas serverdə dəyişiklikləri qəbul etməyə imkan verən mühüm seçim
sonra-sb-0pri, sonra-sb-1pri, sonra-sb-2pri — splitbrain aşkar edildikdə nodeun hərəkətlərinə cavabdeh olan variantlar. Daha ətraflı məlumatı sənədlərdə tapa bilərsiniz.
hər ikisində əsas olmaq — hər iki qovşağı ilkin olaraq təyin edir.

Bizim vəziyyətimizdə, 10 giqabit bant genişliyi olan xüsusi virtual şəbəkəyə malik iki tamamilə eyni VM var.

Bizim nümunəmizdə iki klaster qovşağının şəbəkə adları drbd1 və drbd2-dir. Düzgün işləmək üçün siz /etc/hosts-da hostların adlarını və IP ünvanlarını uyğunlaşdırmalısınız.

10.10.10.192 drbd1
10.10.10.193 drbd2

Addım 2. Düyünləri quraşdırın:

Hər iki serverdə işlədirik:

drbdadm create-md drbd0

drbd+ocfs2 əsasında kiçik veb klasterlər üçün klaster yaddaşı

modprobe drbd
drbdadm up drbd0
cat /proc/drbd

Aşağıdakıları alırıq:

drbd+ocfs2 əsasında kiçik veb klasterlər üçün klaster yaddaşı

Sinxronizasiyaya başlaya bilərsiniz. Birinci nodeda yerinə yetirməlisiniz:

drbdadm primary --force drbd0

Vəziyyətə baxaq:

cat /proc/drbd

drbd+ocfs2 əsasında kiçik veb klasterlər üçün klaster yaddaşı

Əla, sinxronizasiya başladı. Sona qədər gözləyirik və şəkilə baxırıq:

drbd+ocfs2 əsasında kiçik veb klasterlər üçün klaster yaddaşı

Addım 3. İkinci qovşaqda sinxronizasiyaya başlayın:

drbdadm primary --force drbd0

Aşağıdakıları alırıq:

drbd+ocfs2 əsasında kiçik veb klasterlər üçün klaster yaddaşı

İndi iki serverdən drbd-yə yaza bilərik.

Addım 4. Ocfs2-ni quraşdırın və konfiqurasiya edin.

Biz kifayət qədər əhəmiyyətsiz bir konfiqurasiyadan istifadə edəcəyik:

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

Onu yazmaq lazımdır /etc/ocfs2/cluster.conf hər iki qovşaqda.

İstənilən qovşaqda drbd0-da FS yaradırıq:

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

Burada standart parametrlərdən istifadə edərək drbd0 üzərində testVol etiketi ilə fayl sistemi yaratdıq.

drbd+ocfs2 əsasında kiçik veb klasterlər üçün klaster yaddaşı

/etc/default/o2cb-də siz təyin etməlisiniz (konfiqurasiya faylımızda olduğu kimi)

O2CB_ENABLED=true 
O2CB_BOOTCLUSTER=ocfs2cluster 

və hər qovşaqda yerinə yetirin:

o2cb register-cluster ocfs2cluster

Sonra avtomatik işə salmaq üçün lazım olan bütün vahidləri yandırırıq və əlavə edirik:

systemctl enable drbd o2cb ocfs2
systemctl start drbd o2cb ocfs2

Bunların bəziləri quraşdırma prosesi zamanı artıq işləyəcək.

Addım 5. Hər iki qovşaqda fstab-a quraşdırma nöqtələri əlavə edin:

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

kataloq /media/paylaşıldı əvvəlcədən yaradılmalıdır.

Burada noauto seçimlərindən istifadə edirik, bu o deməkdir ki, fayl başlanğıcda quraşdırılmayacaq (mən sistemd vasitəsilə şəbəkə fayllarını quraşdırmağı üstün tuturam) və heartbeat=local, yəni hər bir qovşaqda ürək döyüntüsü xidmətindən istifadə etmək deməkdir. Böyük klasterlər üçün daha uyğun olan qlobal ürək döyüntüsü də var.

Sonra montaj edə bilərsiniz /media/paylaşıldı və məzmun sinxronizasiyasını yoxlayın.

Bitti! Nəticə etibarı ilə, miqyaslılığı və layiqli performansı ilə daha çox və ya daha az səhvlərə davamlı yaddaş əldə edirik.

Mənbə: www.habr.com

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