Apa yang akan kita bincangkan:
Cara cepat menggunakan storan kongsi untuk dua pelayan berdasarkan penyelesaian drbd+ocfs2.
Siapa ini akan berguna untuk:
Tutorial akan berguna kepada pentadbir sistem dan sesiapa sahaja yang memilih kaedah pelaksanaan storan atau ingin mencuba penyelesaiannya.
Apakah keputusan yang kami tolak dan mengapa?
Selalunya kita berhadapan dengan situasi di mana kita perlu melaksanakan storan kongsi dengan prestasi baca-tulis yang baik pada kelompok web yang kecil. Kami mencuba pelbagai pilihan untuk melaksanakan storan kongsi untuk projek kami, tetapi hanya sedikit yang dapat memuaskan hati kami pada beberapa penunjuk sekaligus. Sekarang kami akan memberitahu anda mengapa.
- Glusterfs tidak memuaskan hati kami dengan prestasi membaca dan menulis; terdapat masalah dengan pembacaan serentak sejumlah besar fail, dan terdapat beban yang tinggi pada CPU. Masalah dengan membaca fail boleh diselesaikan dengan mengaksesnya terus dari bata, tetapi ini tidak selalunya terpakai dan secara amnya tidak betul.
- Ceph tidak menyukai kerumitan yang berlebihan, yang boleh membahayakan projek dengan 2-4 pelayan, terutamanya jika projek itu dikekalkan kemudiannya. Sekali lagi, terdapat had prestasi yang serius yang memaksa kami membina kelompok storan berasingan, seperti glusterfs.
- Menggunakan satu pelayan NFS untuk melaksanakan storan dikongsi menimbulkan persoalan dari segi toleransi kesalahan.
- s3 ialah penyelesaian popular yang sangat baik untuk pelbagai tugasan tertentu, tetapi ia bukan sistem fail, yang menyempitkan skopnya.
- lsyncd. Jika kita sudah mula bercakap tentang "sistem bukan fail," maka ia patut membincangkan penyelesaian popular ini. Bukan sahaja ia tidak sesuai untuk pertukaran dua hala (tetapi jika anda benar-benar mahu, maka anda boleh), ia juga tidak berfungsi secara stabil pada sejumlah besar fail. Tambahan yang bagus untuk keseluruhannya ialah ia adalah satu benang. Sebabnya adalah dalam seni bina program: ia menggunakan inotify untuk memantau objek kerja yang diberikannya pada permulaan dan semasa pengimbasan semula. rsync digunakan sebagai medium pemindahan.
Tutorial: cara menggunakan storan kongsi berdasarkan drbd+ocfs2
Salah satu penyelesaian yang paling mudah untuk kami ialah pautan ocfs2+drbd. Sekarang kami akan memberitahu anda cara anda boleh menggunakan storan dikongsi dengan cepat untuk dua pelayan berdasarkan pangkalan data penyelesaian. Tetapi pertama, sedikit tentang komponen:
DRBD - sistem storan daripada pengedaran Linux standard yang membolehkan anda meniru data antara pelayan dalam blok. Aplikasi utama adalah untuk membina storan tahan kesalahan.
OCFS2 - sistem fail yang menyediakan penggunaan bersama storan yang sama oleh beberapa sistem. Termasuk dalam pengedaran Linux dan merupakan modul kernel dan alatan ruang pengguna untuk bekerja dengan FS. OCFS2 boleh digunakan bukan sahaja melalui DRBD, tetapi juga melalui iSCSI dengan berbilang sambungan. Dalam contoh kami, kami menggunakan DRBD.
Semua tindakan dilakukan pada pelayan ubuntu 18.04 dalam konfigurasi minimum.
Langkah 1. Konfigurasikan DRBD:
Dalam fail /etc/drbd.d/drbd0.res kami menerangkan peranti blok maya 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;
}
}
dalaman meta-cakera β gunakan peranti blok yang sama untuk menyimpan metadata
peranti /dev/drbd0 β gunakan /dev/drbd0 sebagai laluan ke volum drbd.
cakera /dev/vdb1 - gunakan /dev/vdb1
penyegerak { kadar 1000M; } β gunakan jalur lebar saluran gigabit
benarkan-dua-utama - pilihan penting yang membolehkan perubahan diterima pada dua pelayan utama
selepas-sb-0pri, selepas-sb-1pri, selepas-sb-2pri β pilihan yang bertanggungjawab untuk tindakan nod apabila splitbrain dikesan. Butiran lanjut boleh didapati dalam dokumentasi.
menjadi-utama-pada kedua-duanya β menetapkan kedua-dua nod kepada primer.
Dalam kes kami, kami mempunyai dua VM yang sama sekali, dengan rangkaian maya khusus dengan daya pemprosesan 10 gigabit.
Dalam contoh kami, nama rangkaian dua nod kluster ialah drbd1 dan drbd2. Untuk operasi yang betul, anda perlu memadankan nama dan alamat IP hos dalam /etc/hosts.
10.10.10.192 drbd1
10.10.10.193 drbd2
Langkah 2. Sediakan nod:
Pada kedua-dua pelayan kami menjalankan:
drbdadm create-md drbd0
modprobe drbd
drbdadm up drbd0
cat /proc/drbd
Kami mendapat perkara berikut:
Anda boleh memulakan penyegerakan. Pada nod pertama anda perlu melaksanakan:
drbdadm primary --force drbd0
Jom tengok status:
cat /proc/drbd
Bagus, penyegerakan telah bermula. Kita tunggu sehingga tamat dan lihat gambar:
Langkah 3. Mulakan penyegerakan pada nod kedua:
drbdadm primary --force drbd0
Kami mendapat perkara berikut:
Sekarang kita boleh menulis kepada drbd dari dua pelayan.
Langkah 4. Pasang dan konfigurasi ocfs2.
Kami akan menggunakan konfigurasi yang agak remeh:
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
Ia perlu ditulis dalam /etc/ocfs2/cluster.conf pada kedua-dua nod.
Kami mencipta FS pada drbd0 pada mana-mana nod:
mkfs.ocfs2 -L "testVol" /dev/drbd0
Di sini kami mencipta sistem fail dengan label testVol pada drbd0, menggunakan parameter lalai.
Dalam /etc/default/o2cb anda perlu tetapkan (seperti dalam fail konfigurasi kami)
O2CB_ENABLED=true
O2CB_BOOTCLUSTER=ocfs2cluster
dan laksanakan pada setiap nod:
o2cb register-cluster ocfs2cluster
Kemudian kita hidupkan dan tambah semua unit yang kita perlukan untuk autorun:
systemctl enable drbd o2cb ocfs2
systemctl start drbd o2cb ocfs2
Sebahagian daripada ini akan berjalan semasa proses persediaan.
Langkah 5. Tambahkan titik lekap pada fstab pada kedua-dua nod:
/dev/drbd0 /media/shared ocfs2 defaults,noauto,heartbeat=local 0 0
Direktori /media/shared ia mesti dibuat lebih awal.
Di sini kami menggunakan pilihan noauto, yang bermaksud bahawa fail tidak akan dipasang pada permulaan (saya lebih suka memasang fail rangkaian melalui systemd) dan degupan jantung=tempatan, yang bermaksud menggunakan perkhidmatan degupan jantung pada setiap nod. Terdapat juga degupan jantung global, yang lebih sesuai untuk kelompok besar.
Seterusnya anda boleh melekapkan /media/shared dan semak penyegerakan kandungan.
Selesai! Akibatnya, kami mendapat lebih kurang storan tahan kerosakan dengan kebolehskalaan dan prestasi yang baik.
Sumber: www.habr.com