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 akan bermanfaat:
Tutorial akan bermanfaat bagi administrator sistem dan siapa pun yang memilih metode implementasi penyimpanan atau ingin mencoba solusi.

Keputusan apa yang telah kami tolak dan mengapa


Seringkali kita dihadapkan dengan situasi di mana kita perlu menerapkan penyimpanan umum pada web-cluster kecil dengan kinerja baca-tulis yang baik. Kami mencoba berbagai opsi untuk menerapkan repositori bersama untuk proyek kami, tetapi hanya sedikit yang bisa memuaskan kami segera untuk beberapa indikator. Sekarang mari kita jelaskan mengapa.

  • Glusterfs tidak sesuai dengan kita dengan kinerja membaca dan menulis, ada masalah dengan pembacaan simultan dari sejumlah besar file, ada beban CPU yang tinggi. Masalah dengan membaca file dapat diatasi dengan mendaftar langsung di bata, tetapi ini tidak selalu berlaku dan umumnya tidak benar.

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

  • Menggunakan satu server nfs untuk menerapkan penyimpanan bersama menimbulkan masalah toleransi kesalahan.

  • s3 adalah solusi populer yang sangat baik untuk berbagai tugas tertentu, tetapi itu bukan sistem file, yang mempersempit ruang lingkup.

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

Tutorial: cara menggunakan penyimpanan bersama berdasarkan drbd + ocfs2


Salah satu solusi paling nyaman bagi kami adalah sekelompok ocfs2 + drbd . Sekarang kami akan menunjukkan kepada Anda cara menyebarkan penyimpanan bersama untuk dua server berdasarkan pada basis data solusi. Tetapi pertama-tama, sedikit tentang komponen:

DRBD adalah sistem penyimpanan Linux standar yang memungkinkan data untuk direplikasi antar blok server. Aplikasi utama adalah membangun penyimpanan yang tahan terhadap kesalahan.

OCFS2 adalah sistem file yang menyediakan penggunaan bersama dari penyimpanan yang sama oleh banyak sistem. Termasuk dalam distribusi Linux dan merupakan modul kernel dan alat userspace untuk bekerja dengan FS. OCFS2 dapat digunakan tidak hanya di atas DRBD, tetapi juga di atas iSCSI dengan beberapa 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 kita menggambarkan perangkat blok virtual kita / 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
device / dev / drbd0 - gunakan / dev / drbd0 sebagai jalur untuk volume drbd.
disk / dev / vdb1 - gunakan / dev / vdb1
syncer {rate 1000M; } - gunakan bandwidth saluran gigabit
allow-two-primary - opsi penting untuk memungkinkan penerimaan perubahan pada dua server utama
after-sb-0pri, after-sb-1pri, after-sb-2pri - opsi yang bertanggung jawab atas aksi-aksi node ketika splitbrain terdeteksi. Lihat dokumentasi untuk lebih jelasnya.
menjadi-primer-pada keduanya - mengatur kedua node ke primer.

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

Dalam contoh kami, nama jaringan dari dua node cluster adalah drbd1 dan drbd2. Untuk operasi yang tepat, Anda harus memetakan nama dan alamat ip dari node di / etc / hosts.

 10.10.10.192 drbd1 10.10.10.193 drbd2 

Langkah 2. Konfigurasikan simpul:

Di kedua server kami menjalankan:
 drbdadm create-md drbd0 

gambar

 modprobe drbd drbdadm up drbd0 cat /proc/drbd 

Kami mendapatkan yang berikut ini:

gambar

Anda dapat memulai sinkronisasi. Pada node pertama yang perlu Anda lakukan:
 drbdadm primary --force drbd0 

Kami melihat statusnya:
 cat /proc/drbd 

gambar

Hebat, sinkronisasi sudah dimulai. Kami menunggu akhir dan melihat gambar:

gambar

Langkah 3. Kami memulai sinkronisasi pada catatan kedua:

 drbdadm primary --force drbd0 

Kami mendapatkan yang berikut ini:

gambar

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 

Perlu ditulis dalam /etc/ocfs2/cluster.conf di kedua node.

Buat FS pada drbd0 pada sembarang node:
 mkfs.ocfs2 -L "testVol" /dev/drbd0 

Di sini kami membuat sistem file berlabel testVol pada drbd0 menggunakan pengaturan default.

gambar

Di / etc / default / o2cb harus diset (seperti pada file konfigurasi kami)
 O2CB_ENABLED=true O2CB_BOOTCLUSTER=ocfs2cluster 

dan jalankan pada setiap node:
 o2cb register-cluster ocfs2cluster 

Setelah itu, hidupkan dan tambahkan ke startup semua unit yang kita butuhkan:
 systemctl enable drbd o2cb ocfs2 systemctl start drbd o2cb ocfs2 

Sebagian dari ini sudah akan berjalan selama proses pengaturan.

Langkah 5. Tambahkan mount point ke fstab pada kedua node:

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

Direktori / media / shared harus dibuat terlebih dahulu.

Di sini kita menggunakan opsi noauto, yang berarti bahwa FS tidak akan dipasang pada saat startup (saya lebih suka me-mount jaringan FS via systemd) dan heartbeat = local, yang berarti menggunakan layanan detak jantung pada setiap node. Ada juga detak jantung global, yang lebih cocok untuk kelompok besar.

Selanjutnya, Anda dapat memasang / media / berbagi dan memeriksa sinkronisasi konten.

Selesai! Sebagai hasilnya, kami mendapatkan lebih atau kurang penyimpanan yang tahan terhadap kesalahan dengan skalabilitas dan kinerja yang layak.

Source: https://habr.com/ru/post/id445612/


All Articles