Drbd+ocfs2'yi temel alan küçük web kümeleri için küme depolama

Ne hakkında konuşacağız:
Drbd+ocfs2 çözümlerine dayalı olarak iki sunucu için paylaşılan depolamanın hızlı bir şekilde nasıl dağıtılacağı.

Bu kimin işine yarayacak:
Eğitim, sistem yöneticileri ve depolama uygulama yöntemini seçen veya çözümü denemek isteyen herkes için faydalı olacaktır.

Hangi kararları reddettik ve neden?

Çoğu zaman, küçük bir web kümesinde iyi bir okuma-yazma performansına sahip paylaşılan depolamayı uygulamamız gereken bir durumla karşı karşıya kalırız. Projelerimiz için paylaşılan depolamayı uygulamaya yönelik çeşitli seçenekleri denedik ancak çok azı bizi aynı anda birden fazla gösterge açısından tatmin edebildi. Şimdi size nedenini anlatacağız.

  • Glusterf'ler okuma ve yazma performansı açısından bizi tatmin etmedi, çok sayıda dosyanın aynı anda okunmasında sorunlar yaşandı ve CPU'ya aşırı yük bindi. Dosyaları okuma sorunu, onlara doğrudan Brick'ten erişilerek çözülebilir, ancak bu her zaman geçerli değildir ve genellikle yanlıştır.

  • Ceph, 2-4 sunuculu projelerde, özellikle de projenin sonradan bakımının yapılması durumunda zararlı olabilecek aşırı karmaşıklıktan hoşlanmadı. Yine, glusterf'lerde olduğu gibi bizi ayrı depolama kümeleri oluşturmaya zorlayan ciddi performans sınırlamaları var.

  • Paylaşılan depolamayı uygulamak için bir NFS sunucusunun kullanılması, hata toleransı açısından soruları gündeme getiriyor.

  • s3 belirli bir dizi görev için mükemmel bir popüler çözümdür, ancak kapsamını daraltan bir dosya sistemi değildir.

  • lsyncd. Zaten "dosya dışı sistemler" hakkında konuşmaya başladıysak, bu popüler çözümün üzerinden geçmeye değer. Yalnızca iki yönlü değişim için uygun olmamakla kalmaz (ancak gerçekten istiyorsanız, o zaman yapabilirsiniz), aynı zamanda çok sayıda dosya üzerinde de istikrarlı bir şekilde çalışmaz. Her şeye güzel bir ek, tek iş parçacıklı olmasıdır. Bunun nedeni programın mimarisindedir: başlangıçta ve yeniden tarama sırasında atadığı çalışma nesnelerini izlemek için inotify'ı kullanır. Aktarım ortamı olarak rsync kullanılır.

Öğretici: drbd+ocfs2'ye dayalı olarak paylaşılan depolamanın nasıl dağıtılacağı

Bizim için en uygun çözümlerden biri bağlantıydı. ocfs2+drbd. Şimdi size bir çözüm veritabanına dayalı olarak iki sunucu için paylaşılan depolamayı hızlı bir şekilde nasıl dağıtabileceğinizi anlatacağız. Ama önce bileşenler hakkında biraz bilgi verelim:

DRBD - Verileri sunucular arasında bloklar halinde çoğaltmanıza olanak tanıyan standart Linux dağıtımından bir depolama sistemi. Ana uygulama, hataya dayanıklı depolama oluşturmaktır.

OCFS2 - aynı depolama alanının birden fazla sistem tarafından paylaşılmasını sağlayan bir dosya sistemi. Linux dağıtımına dahildir ve FS ile çalışmaya yönelik bir çekirdek modülü ve kullanıcı alanı araçlarıdır. OCFS2 yalnızca DRBD üzerinden değil, birden fazla bağlantıyla iSCSI üzerinden de kullanılabiliyor. Örneğimizde DRBD kullanıyoruz.

Tüm eylemler ubuntu sunucusu 18.04'te minimum yapılandırmada gerçekleştirilir.

Adım 1. DRBD'yi yapılandırın:

/etc/drbd.d/drbd0.res dosyasında sanal blok cihazımız /dev/drbd0'ı tanımlıyoruz:

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

meta disk dahili — meta verileri depolamak için aynı blok cihazlarını kullanın
cihaz /dev/drbd0 — drbd biriminin yolu olarak /dev/drbd0'ı kullanın.
disk /dev/vdb1 - /dev/vdb1'i kullanın
senkronize edici { oran 1000M; } — gigabit kanal bant genişliğini kullanın
izin-iki-birinciller - Değişikliklerin iki ana sunucuda kabul edilmesine olanak tanıyan önemli bir seçenek
sb-0pri'den sonra, sb-1pri'den sonra, sb-2pri'den sonra — bölünmüş beyin tespit edildiğinde düğümün eylemlerinden sorumlu olan seçenekler. Daha fazla ayrıntıyı belgelerde bulabilirsiniz.
her ikisinde de birincil olun — her iki düğümü de birincil olarak ayarlar.

Bizim durumumuzda, 10 gigabit bant genişliğine sahip özel bir sanal ağa sahip, tamamen aynı iki VM'miz var.

Örneğimizde iki küme düğümünün ağ adları drbd1 ve drbd2'dir. Düzgün çalışma için /etc/hosts dosyasındaki ana bilgisayarların adlarını ve IP adreslerini eşleştirmeniz gerekir.

10.10.10.192 drbd1
10.10.10.193 drbd2

Adım 2. Düğümleri ayarlayın:

Her iki sunucuda da çalıştırıyoruz:

drbdadm create-md drbd0

Drbd+ocfs2'yi temel alan küçük web kümeleri için küme depolama

modprobe drbd
drbdadm up drbd0
cat /proc/drbd

Aşağıdakileri alıyoruz:

Drbd+ocfs2'yi temel alan küçük web kümeleri için küme depolama

Senkronizasyonu başlatabilirsiniz. İlk düğümde şunları yürütmeniz gerekir:

drbdadm primary --force drbd0

Gelin duruma bakalım:

cat /proc/drbd

Drbd+ocfs2'yi temel alan küçük web kümeleri için küme depolama

Harika, senkronizasyon başladı. Sonuna kadar bekleyip resmi görüyoruz:

Drbd+ocfs2'yi temel alan küçük web kümeleri için küme depolama

3. Adım. İkinci düğümde senkronizasyonu başlatın:

drbdadm primary --force drbd0

Aşağıdakileri alıyoruz:

Drbd+ocfs2'yi temel alan küçük web kümeleri için küme depolama

Artık iki sunucudan drbd'ye yazabiliriz.

Adım 4. Ocfs2'yi kurun ve yapılandırın.

Oldukça önemsiz bir konfigürasyon kullanacağız:

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

İçinde yazılması gerekiyor /etc/ocfs2/cluster.conf her iki düğümde.

Herhangi bir düğümde drbd0 üzerinde bir FS oluşturuyoruz:

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

Burada varsayılan parametreleri kullanarak drbd0 üzerinde testVol etiketli bir dosya sistemi oluşturduk.

Drbd+ocfs2'yi temel alan küçük web kümeleri için küme depolama

/etc/default/o2cb dosyasında ayarlamanız gerekir (yapılandırma dosyamızda olduğu gibi)

O2CB_ENABLED=true 
O2CB_BOOTCLUSTER=ocfs2cluster 

ve her düğümde yürütün:

o2cb register-cluster ocfs2cluster

Ardından otomatik çalıştırma için ihtiyacımız olan tüm birimleri açıp ekliyoruz:

systemctl enable drbd o2cb ocfs2
systemctl start drbd o2cb ocfs2

Bunlardan bazıları kurulum işlemi sırasında zaten çalışıyor olacak.

Adım 5. Her iki düğümde de fstab'a bağlama noktaları ekleyin:

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

Rehber /medya/paylaşılan önceden oluşturulması gerekir.

Burada noauto seçeneklerini kullanıyoruz, bu da dosyanın başlangıçta bağlanmayacağı anlamına geliyor (ağ dosyalarını systemd aracılığıyla bağlamayı tercih ediyorum) ve heartbeat=local, yani her düğümde kalp atışı servisini kullanmak anlamına geliyor. Büyük kümeler için daha uygun olan küresel kalp atışı da vardır.

Daha sonra monte edebilirsiniz /medya/paylaşılan ve içerik senkronizasyonunu kontrol edin.

Bitti! Sonuç olarak, ölçeklenebilirlik ve iyi performans ile az çok hataya dayanıklı depolama elde ediyoruz.

Kaynak: habr.com

Yorum ekle