Penyimpanan cluster untuk cluster web kecil berdasarkan drbd+ocfs2

Apa yang akan kita bicarakan:
Cara cepat menyebarkan penyimpanan bersama untuk dua server berdasarkan solusi drbd+ocfs2.

Untuk siapa ini berguna:
Tutorial ini akan berguna bagi administrator sistem dan siapa saja yang memilih metode implementasi penyimpanan atau ingin mencoba solusinya.

Keputusan apa yang kami tolak dan mengapa?

Seringkali kita dihadapkan pada situasi di mana kita perlu mengimplementasikan penyimpanan bersama dengan kinerja baca-tulis yang baik pada cluster web kecil. Kami mencoba berbagai opsi untuk mengimplementasikan penyimpanan bersama untuk proyek kami, namun hanya sedikit yang mampu memuaskan kami dalam beberapa indikator sekaligus. Sekarang kami akan memberi tahu Anda alasannya.

  • Glusterfs tidak memuaskan kami dengan kinerja membaca dan menulis; ada masalah dengan membaca sejumlah besar file secara bersamaan, dan ada beban berat pada CPU. Masalah membaca file dapat diselesaikan dengan mengaksesnya langsung dari brick, tetapi hal ini tidak selalu dapat diterapkan dan umumnya salah.

  • Ceph tidak menyukai kompleksitas yang berlebihan, yang dapat merugikan proyek dengan 2-4 server, terutama jika proyek tersebut kemudian dipertahankan. Sekali lagi, ada keterbatasan kinerja serius yang memaksa kami untuk membangun cluster penyimpanan terpisah, seperti halnya glusterfs.

  • Menggunakan satu server NFS untuk mengimplementasikan penyimpanan bersama menimbulkan pertanyaan dalam hal toleransi kesalahan.

  • s3 adalah solusi populer yang sangat baik untuk serangkaian tugas tertentu, tetapi ini bukan sistem file, yang mempersempit cakupannya.

  • lsyncd. Jika kita sudah mulai berbicara tentang “sistem non-file”, maka ada baiknya kita membahas solusi populer ini. Tidak hanya tidak cocok untuk pertukaran dua arah (tetapi jika Anda benar-benar menginginkannya, Anda bisa), ini juga tidak berfungsi secara stabil pada file dalam jumlah besar. Tambahan yang bagus untuk semuanya adalah single-threaded. Alasannya ada pada arsitektur program: ia menggunakan inotify untuk memantau objek kerja, yang ditetapkan saat startup dan selama pemindaian ulang. rsync digunakan sebagai media transfer.

Tutorial: cara menyebarkan penyimpanan bersama berdasarkan drbd+ocfs2

Salah satu solusi paling nyaman bagi kami adalah tautannya ocfs2+drbd. Sekarang kami akan memberi tahu Anda bagaimana Anda dapat dengan cepat menyebarkan penyimpanan bersama untuk dua server berdasarkan database solusi. Tapi pertama-tama, sedikit tentang komponennya:

DRBD - sistem penyimpanan dari distribusi Linux standar yang memungkinkan Anda mereplikasi data antar server dalam blok. Aplikasi utamanya adalah membangun penyimpanan yang toleran terhadap kesalahan.

OCFS2 - sistem file yang menyediakan penggunaan bersama atas penyimpanan yang sama oleh beberapa sistem. Termasuk dalam distribusi Linux dan merupakan modul kernel dan alat ruang pengguna untuk bekerja dengan FS. OCFS2 dapat digunakan tidak hanya melalui DRBD, tetapi juga melalui iSCSI dengan banyak koneksi. Dalam contoh kami, kami menggunakan DRBD.

Semua tindakan dilakukan di server ubuntu 18.04 dalam konfigurasi minimal.

Langkah 1. Konfigurasikan DRBD:

Dalam file /etc/drbd.d/drbd0.res kami menjelaskan perangkat blok virtual kami /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;
}
}

meta-disk internal — gunakan perangkat blok yang sama untuk menyimpan metadata
perangkat /dev/drbd0 — gunakan /dev/drbd0 sebagai jalur ke volume drbd.
disk /dev/vdb1 - gunakan /dev/vdb1
sinkronisasi { tarif 1000 juta; } — gunakan bandwidth saluran gigabit
izinkan dua pemilihan pendahuluan - opsi penting yang memungkinkan perubahan diterima di dua server utama
setelah-sb-0pri, setelah-sb-1pri, setelah-sb-2pri — opsi yang bertanggung jawab atas tindakan node ketika splitbrain terdeteksi. Detail lebih lanjut dapat ditemukan di dokumentasi.
menjadi-utama-pada keduanya — menyetel kedua node ke node utama.

Dalam kasus kami, kami memiliki dua VM yang benar-benar identik, dengan jaringan virtual khusus dengan bandwidth 10 gigabit.

Dalam contoh kita, nama jaringan dari dua node cluster adalah drbd1 dan drbd2. Untuk pengoperasian yang benar, Anda harus mencocokkan nama dan alamat IP host di /etc/hosts.

10.10.10.192 drbd1
10.10.10.193 drbd2

Langkah 2. Siapkan node:

Di kedua server kami menjalankan:

drbdadm create-md drbd0

Penyimpanan cluster untuk cluster web kecil berdasarkan drbd+ocfs2

modprobe drbd
drbdadm up drbd0
cat /proc/drbd

Kami mendapatkan yang berikut:

Penyimpanan cluster untuk cluster web kecil berdasarkan drbd+ocfs2

Anda dapat memulai sinkronisasi. Pada node pertama Anda perlu menjalankan:

drbdadm primary --force drbd0

Mari kita lihat statusnya:

cat /proc/drbd

Penyimpanan cluster untuk cluster web kecil berdasarkan drbd+ocfs2

Bagus, sinkronisasi telah dimulai. Kita tunggu sampai selesai dan lihat gambarnya:

Penyimpanan cluster untuk cluster web kecil berdasarkan drbd+ocfs2

Langkah 3. Mulai sinkronisasi pada node kedua:

drbdadm primary --force drbd0

Kami mendapatkan yang berikut:

Penyimpanan cluster untuk cluster web kecil berdasarkan drbd+ocfs2

Sekarang kita dapat menulis ke drbd dari dua server.

Langkah 4. Instal dan konfigurasikan ocfs2.

Kami akan menggunakan konfigurasi yang cukup sepele:

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

Itu perlu dituliskan /etc/ocfs2/cluster.conf pada kedua node.

Kami membuat FS di drbd0 pada node mana pun:

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

Di sini kami membuat sistem file dengan label testVol di drbd0, menggunakan parameter default.

Penyimpanan cluster untuk cluster web kecil berdasarkan drbd+ocfs2

Di /etc/default/o2cb Anda perlu mengaturnya (seperti pada file konfigurasi kami)

O2CB_ENABLED=true 
O2CB_BOOTCLUSTER=ocfs2cluster 

dan jalankan pada setiap node:

o2cb register-cluster ocfs2cluster

Kemudian kita nyalakan dan tambahkan semua unit yang kita perlukan untuk autorun:

systemctl enable drbd o2cb ocfs2
systemctl start drbd o2cb ocfs2

Beberapa di antaranya sudah berjalan selama proses penyiapan.

Langkah 5. Tambahkan titik pemasangan ke fstab di kedua node:

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

Direktori /media/dibagikan itu harus dibuat terlebih dahulu.

Di sini kita menggunakan opsi noauto, yang berarti file tidak akan di-mount saat startup (saya lebih suka me-mount file jaringan melalui systemd) dan detak jantung=lokal, yang berarti menggunakan layanan detak jantung di setiap node. Ada juga detak jantung global, yang lebih cocok untuk cluster besar.

Selanjutnya Anda dapat melakukan mount /media/dibagikan dan periksa sinkronisasi konten.

Selesai! Hasilnya, kami mendapatkan penyimpanan yang kurang lebih toleran terhadap kesalahan dengan skalabilitas dan kinerja yang layak.

Sumber: www.habr.com

Tambah komentar