Merhaba,

Öncelikle DRBD nedir bundan bahsetmek istiyorum. Distributed Replicated Block Device (DRBD); GNU/Linux ortamında dağıtıma sunulan, esnek ve genişleyebilen yapıları destekleyen depolama çözümüdür. SQL Always On’da, replike edilen veritabanı secondary sunucuda read-only modda ve nasıl ki primary veritabanın imajını içeriyorsa, DRBD’de GNU/Linux’da disklerin replike edilmesini sağlıyor. (RAID 1 gibi düşünülebilir.)

Replikasyon yapmayı, farklı zoneda yedeğinizi bulundurmayı ve 0 lisans maliyetiyle çözüm üretmeyi istiyorsanız bu yapıyı kullanabilirsiniz.

Bu dokümanda sadece DRBD kurulumunu anlatmış olsam da, bu doküman High Availability Web-DB (Corosync-Pacemaker ve DRBD) Kurulum ve Yapılandırması dokümanın parçasıdır. DRBD’yi veri merkezleri arası High Availability ve yedekli yapı kurarken kullandım.


DRBD Kurulum Hazırlığı:

Test ortamımda iki sunucu ve CentOS7 kullandım. İşlemlere başlamadan önce her iki sunucunun da hosts dosyasını ve hostnamelerini güncelledim. (/etc/hosts)

192.168.0.69 nginx1.vahap.net nginx1
192.168.0.72 nginx2.vahap.net nginx2

Daha sonra sunucularıma ikinci bir disk ekledim. VMWare kullandığım için Add Virtual Disk diyerek işlemi hızlıca gerçekleştirdim ve CentOS’a mount ettim.

CentOS-RHEL’e disk ekleme ve formatlama işlemini hatırlamak için
CentOS/RHEL – Disk Ekleme, Formatlama ve Mount İşlemi tıklayarak yazıma ulaşabilirsiniz.

Bu adımı gerçekleştirdikten sonra firewalld veya iptables üzerinden bu iki sunucunun birbirlerine tüm portlardan erişimesini sağlıyor ve Selinux’u disable ediyorum. Bu işlemleri tamamladıktan sonra DRBD paketlerini yüklüyorum ve sırasıyla aşağıdaki işlemleri uyguluyorum.

rpm --import https://www.elrepo.org/RPM-GPG-KEY-elrepo.org
rpm -Uvh http://www.elrepo.org/elrepo-release-7.0-3.el7.elrepo.noarch.rpm
yum install -y kmod-drbd84 drbd84-utils
Yukarıdaki işlemleri her iki sunucuda da uygulamalısınız.

Bir sonraki adımda oluşturduğumuz bu partition için block size oluşturacağız. Bunun için de dd kullanacağız. 10 GB oluşturuyorum.

dd if=/dev/zero of=/dev/sdb1 bs=10120k count=1024
Bu işlemle beraber her iki sunucumuzda da sdb1 tanımlama yaptık.

Sırada drbd config düzenlemesini gerçekleştirmemiz ve senkron protokolünü tanımlamamız gerekmektedir. Öncelikle yedeğini almalısınız.

mv /etc/drbd.d/global_common.conf /etc/drbd.d/global_common.conf_yedek
nano /etc/drbd.d/global_common.conf

Aşağıdaki satırları kopyalayın ve açtığınız config dosyasının içine yapıştırın.

global {
usage-count yes;
udev-always-use-vnr; # treat implicit the same as explicit volumes
}
common {
handlers {
}
startup {
# wfc-timeout degr-wfc-timeout outdated-wfc-timeout wait-after-sb
}
options {
# cpu-mask on-no-data-accessible
# quorum majority;
# on-no-quorum suspend-io | io-error;
}
disk {
# c-min-rate disk-timeout
}
net {
protocol C;
}
}

DRBD, üç farklı çoğaltma modunu (bu nedenle üç derece çoğaltma senkronizasyonunu) destekler:

Protocol A: Asenkron çoğaltma protokolü; en sık uzun mesafeli çoğaltma senaryolarında kullanılır.
Protocol B: Yarı senkron çoğaltma protokolü; ara bellek senkron protokolü.
Protocol C: Kısa mesafeli ağlarda bulunan düğümler için yaygın olarak kullanılır; DRBD kurulumlarında en yaygın kullanılan çoğaltma protokolüdür.
Önemli: Çoğaltma protokolünün seçimi dağıtımınızın iki faktörünü etkiler: Koruma ve gecikme. Buna karşın işlem hacmi, seçilen çoğaltma protokolünden büyük ölçüde bağımsızdır.

Diskleri sync edilecek kaynak makinaları tanımlayacağımız bir .res dosyası tanımlamalıyız. Burada sunucunun hostname ve IP adresini yazmalısınız.

resource vahap {
on nginx1.vahap.net {
device /dev/drbd0;
disk /dev/sdb1;
meta-disk internal;
address 192.168.0.69:7789;
}
on nginx2.vahap.net {
device /dev/drbd0;
disk /dev/sdb1;
meta-disk internal;
address 192.168.0.72:7789;
}
}
  • on hostname: Yapılandırma ifadelerinin hangi ana bilgisayarlara uygulanacağını belirtir.
  • Vahap: Kaynağın adı.
  • device/dev/drbd0: DRBD tarafından yönetilen sanal blok cihazını belirtir.
  • disk/dev/sdb1: DRBD aygıtı için destek aygıtı olan blok aygıtı bölümüdür.
  • meta-disk: DRBD’nin meta verilerini nerede sakladığını tanımlar. Dahili kullanımı, DRBD’nin meta verilerini gerçek üretim verisiyle aynı fiziksel alt düzey cihazda depoladığı anlamına gelir.
  • address: İlgili nodeların IP adresini ve port numarasını belirtir.

Bir sonraki adımdaysa kaynağı başlatıp aktifleştirmeliyiz. Bunun için de drbdadm komutundan faydalanacağınız.

  • drbdadm: DRBD’nin üst düzey bir yönetim aracı.
  • drbdsetup: DRBD cihazlarını arka blok cihazlarına bağlamak, DRBD cihaz çiftlerini arka blok cihazlarını yansıtmak üzere ayarlamak ve DRBD cihazlarının çalışmasını yapılandırmak için alt seviye yönetim aracı.
  • Drbdmeta: Meta veri yönetimi aracıdır.

Daha sonra her iki node üzerinde kaynağı oluşturup aktif ediyoruz.

drbdadm create-md vahap
drbdadm up vahap

İşlem sonunda lsblk komutunun çıktısında aşağıdaki sonucu görmelisiniz.

Daha sonra oluşturduğumuz alanın durumunu ve istatistiklerini kontrol edelim. Bunun için aşağıdaki iki komutu kullanabilirsiniz.

drbdadm status vahap
drbdsetup status vahap --verbose --statistics
Her iki node üzerinde de bu şekilde uyarılar görebilirsiniz, normaldir. Şimdi bir node primary yapacağız.

Şimdi bu nodelardan birini Primary yapacağız.

drbdadm primary --force vahap
drbdadm status vahap
Bu işlem sonunda status çıktısı Primary node üzerinde bu şekilde olacaktır.

Şimdi sisteme eklediğimiz diski formatlayarak sisteme mount etmeliyiz. (ext4 kullandım. Siz dilerseniz ext3 ve xfs formatında formatlayabilirsiniz.)

Alanı formatladıktan sonra Primary ve Secondary node üzerinde /data isminde bir klasörü oluşturdum ve öncelikle Primary node üzerinde bu klasöre mount ettim. Daha sonra vahap adında klasör oluşturdum.

Secondary makinada işlem yapmadan önce /data’yı unmound ettim ve Primary node Secondary çektim.

Önemli: Yukarıdaki son iki işlemi yapmamanız halinde, Secondary makinaya /dev/drbd0 diskini sisteme mount etmeyi denediğinizde write proctection, read-only mounted hatası alabilirsiniz. Bu nedenle Primary node üzerinde diski unmount edip, node Secondary çekmeniz ve sonrasında aynı işlemleri Secondary makinada yapmanız gerekiyor. Bu detay önemli.

Bu hatayı almamak için üstteki işlemi yapıp, Secondary Node Primary çekip sonrasında mount etmelisiniz.
drbdadm primary vahap
mount /dev/drbd0 /data
Secondary node üzerinde üstteki komutları uygulayın.

Bu işlem sonunda Primary makinada oluşturduğum vahap klasörünün Secondary sunucuda da olduğunu görebilirsiniz. Sizin sonucunuz da bu şekildeyse işlem başarılı diyebiliriz.

Secondary makina üzerinde de vahap çıktısı görülebiliyor ve şimdi son bir test yaparak vahap klasörünün içinde bir dosya oluşturacağım. Daha sonra Primary makinayı cluster yapıda Primary node yapacağım.

Aşağıdaki çıktıda yaptığım işlemlerin özeti şu şekilde:

Öncelikle Secondary sunucu üzerinde umount /data diyerek untmount ettim. Daha sonra Secondary sunucuyu yapı üzerinde drbadm secondary vahap diyerek slave mode çektim. Daha sonra Primary makinada mount /dev/drbd0 /data diyerek mount edip, drbadm primary vahap diyerek de master makina haline getirdim. Secondary makina üzerinde vahap klasörünün içine deneme1 diye dosya açmıştım. Primary makinada da olduğu görülebilir. Testler başarılı.

drbd ile ilgili daha detaylı bilgilere ulaşmak için aşağıdaki komutları kullanabilirsiniz.

man drbdadm
man drbdsetup
man drbdmeta

İçeriği oluştururken kullandığım kaynak:
https://docs.linbit.com/docs/users-guide-8.4/

Umarım zamandan kazanmanızı sağlar.