GNU/Linux >> Belajar Linux >  >> Debian

Instal dan konfigurasikan DRDB untuk replikasi sistem file jaringan di Debian 8

Mari kita bicara tentang Replikasi Sistem File Jaringan.

Replikasi sistem file jaringan sering digunakan saat ini dalam banyak skenario:

  • Replikasi sistem file untuk alasan keamanan:jika satu node gagal, node lainnya dapat diakses.
  • Untuk mereplikasi sistem file ke kantor pusat perusahaan lain, sehingga setiap karyawan memiliki akses ke datanya secara lokal dan bukan melalui jaringan publik. Tetapi jika dia pergi ke kantor pusat lain, dia memiliki semua datanya, dan sekali lagi dia dapat mengakses secara lokal.

Seperti yang dapat Anda bayangkan, sistem semacam ini sering digunakan untuk membangun sistem file untuk lingkungan cluster.

Kami telah memilih untuk mengimplementasikan solusi dengan DRDB. Tujuan utamanya adalah (seperti sistem lain seperti ini) Ketersediaan Tinggi dan Pemulihan Bencana untuk sistem file.

Kami mengimplementasikan solusi tersebut dengan Debian 8, tetapi solusi ini juga dapat bekerja di Ubuntu.

Prasyarat

Sebelum kita mulai, berikut adalah prasyaratnya:

  • Setidaknya 2 server Debian.
  • Debian diinstal sebagai penginstalan minimal (tidak diperlukan sama sekali jika Anda tahu apa yang Anda lakukan pada sistem produksi) panduan yang direkomendasikan https://www.howtoforge.com/tutorial/debian-8-jessie-minimal-server/
  • Setidaknya 2 disk Linux di setiap server:/dev/sda untuk instalasi linux, /dev/sdb untuk instalasi DRDB.

PERHATIAN!!!:Selama instalasi, semua data pada disk /dev/sdb akan dimusnahkan, jadi jangan bekerja pada disk dengan data di dalamnya.

Instalasi DRBD

Dalam contoh kita, saya akan menggunakan dua node, yaitu:

  • 192.168.152.100 mysql1.local.vm
  • 192.168.152.110 mysql2.local.vm

Pada semua node, ubah file /etc/hosts sebagai berikut:

127.0.0.1 localhost
192.168.152.100 mysql1.local.vm mysql1
192.168.152.110 mysql2.local.vm mysql2

# Baris berikut diinginkan untuk IPv6 yang mampu host
::1 localhost ip6-localhost ip6-loopback
ff02::1 ip6-allnodes
ff02::2 ip6-allrouters

Kemudian jalankan perintah berikut untuk menginstal DRDB:

apt-get update
apt-get -y upgrade
apt-get install drbd-utils

Konfigurasi Primer/Sekunder - Pemulihan Bencana

File konfigurasi utama adalah /etc/drbd.conf yang terlihat seperti berikut ini:

sertakan "drbd.d/global_common.conf";
sertakan "drbd.d/*.res";

Berdasarkan konvensi, /etc/drbd.d/global_common.conf berisi bagian global dan umum dari konfigurasi DRBD, sedangkan .res file berisi satu sumber daya di setiap bagian.

Dalam contoh kami, kami melakukan penyiapan minimal yang mereplikasi data pada dua node. Pada setiap node lakukan modifikasi berikut:

Kami akan mulai mengedit file /etc/drbd.d/global_common.conf modify the default line from

global {
usage-count yes;
# dialog minor-count-refresh nonaktifkan-ip-verifikasi
}
...
net {
protocol C;
# batas waktu protokol max-epoch-size max-buffers cabut-watermark
# connect-int ping-int sndbuf-size rcvbuf-size ko-count
# allow- two-primaries cram-hmac-alg shared-secret after-sb-0pri
# after-sb-1pri after-sb-2pri always-asbp rr-conflict
# ping-timeout data-integrity-alg tcp-cork on-congestion
# Congestion-fill Congestion-Extents csums-alg Verify-alg
# use-rle
}
...

Sekarang kita akan membuat file konfigurasi /etc/drbd.d/r0.res untuk resource kita. Buat file di semua node dan tambahkan ini di dalam:

sumber daya r0 { pada mysql1.local.vm { perangkat /dev/drbd1; disk /dev/sdb; alamat 192.168.152.100:7789; meta-disk internal; } pada mysql2.local.vm { perangkat /dev/drbd1; disk /dev/sdb; alamat 192.168.152.110:7789; meta-disk internal; }}

Yang telah kami lakukan hingga saat ini adalah sebagai berikut:

  • Anda "memilih ikut" untuk disertakan dalam statistik penggunaan DRBD dengan  parameter penghitungan penggunaan.
  • Sumber daya dikonfigurasi untuk menggunakan replikasi yang sepenuhnya sinkron dengan Protocol Cunless yang secara eksplisit ditentukan sebaliknya.
  • Cluster kami terdiri dari dua node: mysql1 dan mysql2.
  • Kami memiliki sumber daya yang diberi nama r0 yang menggunakan /dev/sdb sebagai perangkat tingkat yang lebih rendah, dan dikonfigurasi dengan meta data internal.
  • Sumber daya menggunakan port TCP 7789 untuk koneksi jaringannya, dan mengikat masing-masing ke alamat IP 192.168.152.100 dan 192.168.152.110.

Pada semua node, inisialisasi metadata dengan perintah berikut:

drbdadm create-md r0

Anda akan melihat sesuatu seperti ini:

--==Terima kasih telah berpartisipasi dalam survei penggunaan global ==--
Respons server adalah:

Anda adalah pengguna ke-2963 yang menginstal versi ini
menginisialisasi log aktivitas
TIDAK menginisialisasi bitmap
Menulis data meta...
Blok data meta drbd baru berhasil dibuat.
berhasil

Selanjutnya, kami mengaktifkan sumber daya dan menginisialisasi proses replikasi pertama, hanya pada node pertama, itu harus mulai mereplikasi:

drbdadm up r0
drbdadm primer --force r0

Untuk memeriksa apakah semuanya bekerja dengan baik, Anda dapat memeriksa file /proc/drbd di kedua node dan Anda akan melihat sesuatu seperti ini:

Mysql1

[dilindungi email]:# cat /proc/drbd
versi:8.4.3 (api:1/proto:86-101)
srcversion:1A9F77B1CA5FF92235C2213
1:cs:SyncSource ro:Primary/Secondary ds:UpToDate/Inconsistent C r-----
ns:54624 nr:0 dw:0 dr:55536 al:0 bm:3 lo:0 pe:0 ua:0 ap:0 ep:1 wo:f oos:5188060
[>....................] disinkronkan:1,1% (5064/5116)Mselesai:Kecepatan 0:17:21:4.964 (4.964) K/dtk

Mysql2 

[dilindungi email]:# cat /proc/drbd
versi:8.4.3 (api:1/proto:86-101)
srcversion:1A9F77B1CA5FF92235C2213
1:cs:SyncTarget ro:Secondary/Primary ds:Inconsistent/UpToDate C r-----
ns:0 nr:17496 dw:17496 dr:0 al:0 bm:1 lo:0 pe:0 ua:0 ap:0 ep:1 wo:f oos:5225188
[>....................] disinkronkan:0.4% (5100/5116)Mselesai:Kecepatan 0:29:41:2.916 (2.916) ingin:5.160 K/dtk

Selama fase build, Anda dapat melihat UpToDate/Inconsistent , itu benar karena ini adalah sinkronisasi data pertama.

Setelah sistem file disinkronkan, shloud ini berubah menjadi UpToDate/UpToDate seperti pada log berikut:

[email protected]:/home/sysop# cat /proc/drbd
versi:8.4.3 (api:1/proto:86-101)
srcversion:1A9F77B1CA5FF92235C2213
1 :cs:Koneksi ro:Primary/Secondary ds:UpToDate/UpToDate C r-----
ns:5242684 nr:0 dw:0 dr:5243596 al:0 bm:320 lo:0 pe:0 ua :0 ap:0 ep:1 wo:f oos:0

Sekarang kami memiliki perangkat blok baru, yang disebut /dev/drbd1 yang dapat kami format dengan jenis sistem file pilihan kami. Misalnya, jika kita ingin memformatnya dalam ext4 dan memasangnya di /var/www, kita cukup melakukan: 

[email protected]:/home/sysop# mkfs.ext4 /dev/drbd1
mke2fs 1.42.12 (29-Aug-2014)
Creazione del file system con 1310671 4k blocchi e 327680 inode
Etichetta del sistem file=ab3e18c9-e8cb-42c8-977a-ab79bdb18aea
Cadangan dari superlocco salvati nei blocchi:
32768, 98304, 163840, 229376, 294912, 819200, 884736
Mengalokasikan tabel grup:fatto
Scrittura delle tavole degli inode:fatto
Membuat jurnal (32768 blok):fatto
Scrittura delle informazioni dei super-blocchi e dell'accounting del file system:fatto

Kemudian kita dapat me-mount sistem file kita:

mkdir /var/www
mount /dev/drbd1 /var/www

Direktori /var/www sekarang dipasang melalui sistem drbd.

Dalam skenario ini, dengan konfigurasi Primer/Sekunder, kami telah menerapkan sistem pemulihan bencana.

Dalam hal ini, jika Anda mencoba memasang sistem file pada simpul kedua, Anda akan mendapatkan kesalahan:

[dilindungi email]:~# mount /dev/drbd1 /var/www/
mount:/dev/drbd1 dilindungi dari penulisan, pemasangan hanya-baca
mount:mount /dev/drbd1 pada /var/www gagal:Tipo di supporto errato

Ini normal dan diharapkan karena konfigurasi kami.

Sekarang kita dapat mensimulasikan kegagalan pada mysql1, jadi matikan dengan perintah poweroff.

Di mysql2 kita bisa melihat apa yang terjadi:

5 Okt 13:52:14 mysql2 kernel:[13458.629215] drbd r0:PingAck tidak tiba tepat waktu.
5 Okt 13:52:14 mysql2 kernel:[13458.629587] drbd r0:peer( Primer -> Tidak Diketahui ) conn( Tersambung -> NetworkFailure ) pdsk( UpToDate -> DUnknown )
5 Okt 13:52:14 mysql2 kernel:[13458.629919] drbd r0:asender dihentikan
5 Okt 13:52:14 kernel mysql2:[13458.629921] drbd r0:Mengakhiri drbd_a_r0
5 Okt 13:52:14 kernel mysql2:[13458,630028] drbd r0:Koneksi ditutup
5 Okt 13:52:14 kernel mysql2:[13458.630035] drbd r0:conn( NetworkFailure -> Unconnected )
5 Okt 13:52:14 mysql2 kernel:[13458.630035] drbd r0:receiver dihentikan
5 Okt 13:52:14 mysql2 kernel:[13458.630036] drbd r0:Memulai ulang utas penerima
5 Oktober 13:52:14 kernel mysql2:[13458.630037] drbd r0:receiver (kembali) dimulai
5 Oktober 13:52:14 kernel mysql2:[13458.630041] drbd r0:conn( Tidak Terhubung -> WFConnection )

Node mysql2 mendeteksi bahwa mysql1 sudah mati, dan jika kita memeriksa /proc/drbd:

[email protected]:~# cat /proc/drbd
versi:8.4.3 (api:1/proto:86-101)
srcversion:1A9F77B1CA5FF92235C2213
1:cs:WFConnection ro:Sekunder/Tidak Diketahui ds:UpToDate/DUnknown C r-----
ns:0 nr:5457236 dw:5457236 dr:0 al:0 bm:320 lo:0 pe:0 ua:0 ap :0 ep:1 wo:f oos:0

kita dapat melihat status berubah dari Sekunder/primer menjadi Sekunder/tidak diketahui. Jadi sekarang kita melakukan trik, mempromosikan mysql2 sebagai yang utama. Di mysql2 jalankan saja:

drbdadm primer r0

mari kita periksa lagi /proc/drbd dan lihat keajaibannya...

[email protected]:~# cat /proc/drbd
versi:8.4.3 (api:1/proto:86-101)
srcversion:1A9F77B1CA5FF92235C2213
1:cs:WFConnection ro:Primary/Unknown ds:UpToDate/DUnknown C r-----
ns:0 nr:5457236 dw:5457236 dr:912 al:0 bm:320 lo:0 pe:0 ua:0 ap :0 ep:1 wo:f oos:0

Seperti yang Anda lihat, simpul kami sekarang adalah yang utama dan dapat dipasang secara teratur.

[email protected]:~# mount /dev/drbd1 /var/www/
[email protected]:~# df -h
File system Redup. Usati Dispon. Uso% Montato su
/dev/sda1 9,3G 1,4G 7,5G 16% /
udev 10M 0 10M 0% /dev
tmpfs 97M 4,6M 92M 5% /run
tmpfs 241M 0 241M 0% /dev/shm
tmpfs 5,0M 4,0K 5,0M 1% /run/lock
tmpfs 241M 0 241M 0% /sys/fs/cgroup
/dev/drbd1 4,8G 10M 4,6G 1% /var/www

Sekarang kita asumsikan kita ingin mengambil mysql1 lagi, jika kita mulai sekarang kita akan sampai pada split brain, ternyata Anda dapat memeriksa log dan melihat kesalahan ini:

5 Okt 14:26:04 mysql1 kernel:[ 7.760588] drbd r0:conn( StandAlone -> Unconnected )
5 Okt 14:26:04 mysql1 kernel:[ 7.760599] drbd r0:Memulai utas penerima ( dari drbd_w_r0 [458])
5 Okt 14:26:04 mysql1 drbdadm[435]:sesuaikan net:r0
5 Okt 14:26:04 mysql1 drbdadm[435]:]
Okt 5 14:26:04 kernel mysql1:[ 7.769318] drbd r0:receiver (kembali) dimulai
5 Oktober 14:26:04 kernel mysql1:[ 7.769327] drbd r0:conn( Tidak terhubung -> WFConnection )
5 Okt 14:26:04 mysql1 /etc/init.d/mysql[485]:PID MySQL tidak ditemukan, pid_file terdeteksi/tebakan:/var/run/mysqld/mysqld.pid
5 Okt 14:26 :04 mysql1 acpid:memulai dengan netlink dan lapisan input
5 Okt 14:26:04 mysql1 acpid:1 aturan dimuat
5 Okt 14:26:04 mysql1 acpid:menunggu acara:pencatatan acara tidak aktif
5 Oktober 14:26:05 kernel mysql1:[ 8.270578] drbd r0:Jabat tangan berhasil:Versi protokol jaringan yang disetujui 101
5 Oktober 14:26:05 kernel mysql1:[ 8.270581] drbd r0:Setuju untuk mendukung TRIM pada tingkat protokol
5 Oktober 14:26:05 kernel mysql1:[ 8.270770] drbd r0:conn( WFConnection -> WFReportParams )
5 Oktober 14:26:05 kernel mysql1:[ 8.270771] drbd r0:Memulai utas asender (dari drbd_r_r0 [461])
5 Okt 14:26:05 kernel mysql1:[ 8.272594] blok drbd1:drbd_sync_handshake:
5 Okt 14:26:05 kernel mysql1:[ 8.272597] blok drbd1:self 242B364F4A5B9C68:525CC995A3CFBA2B:44A1DE193A6C6701:0000000000000004 bit:64463 flags:0
5 Okt 14:26:05 mysql1 kernel:[ 8.272598] blok drbd1:peer 6903F6042F95F500003CFBACC995A440000C125C995>5 Oktober 14:26:05 kernel mysql1:[ 8.272599] blok drbd1:uuid_compare()=100 menurut aturan 90
5 Oktober 14:26:05 kernel mysql1:[ 8.272601] blok drbd1:perintah pembantu:/sbin /drbdadm initial-split-brain minor-1
5 Okt 14:26:05 kernel mysql1:[ 8.272692] drbd r0:koneksi meta dimatikan oleh rekan.
5 Okt 14:26:05 kernel mysql1 :[ 8.272720] drbd r0:conn( WFReportParams -> NetworkFailure )
5 Okt 14:26:05 mysq l1 kernel:[ 8.272722] drbd r0:asender dihentikan
5 Okt 14:26:05 mysql1 kernel:[ 8.272722] drbd r0:Mengakhiri drbd_a_r0
5 Okt 14:26:05 mysql1 kernel:[ 8.279158] blok drbd1:perintah pembantu:/sbin/drbdadm initial-split-brain minor-1 kode keluar 0 (0x0)
5 Oktober 14:26:05 mysql1 kernel:[ 8.279173] blok drbd1:Split-Brain terdeteksi tetapi belum terselesaikan , koneksi terputus!
5 Oktober 14:26:05 kernel mysql1:[ 8.279197] blok drbd1:perintah pembantu:/sbin/drbdadm split-brain minor-1
5 Oktober 14:26:05 kernel mysql1 :[ 8.286125] blok drbd1:perintah pembantu:/sbin/drbdadm split-brain minor-1 kode keluar 0 (0x0)
5 Oktober 14:26:05 kernel mysql1:[ 8.286144] drbd r0:conn( NetworkFailure -> Memutuskan sambungan )
5 Okt 14:26:05 kernel mysql1:[ 8.286146] drbd r0:error saat menerima ReportState, e:-5 l:0!
5 Okt 14:26:05 kernel mysql1:[ 8.287009] drbd r0:Koneksi ditutup
5 Okt 14:26:05 mysql1 kernel:[ 8.287017] drbd r0:conn( Memutuskan -> StandAlone )
5 Okt 14:26:05 kernel mysql1:[ 8.287018] drbd r0:receiver dihentikan
5 Oktober 14:26:05 kernel mysql1:[ 8.287019] drbd r0:Mengakhiri drbd_r_r0

Ini karena, sekarang kami memiliki dua node utama, yang tidak mungkin dalam konfigurasi Primer/Sekunder. Jadi dengan asumsi id data baru di mysql2, kita harus menurunkan mysql1 ke Sekunder.

Jadi di mysql1 jalankan:

[email protected]:~# drbdadm secondary r0
[email protected]:~# drbdadm connect --discard-my-data r0

Di mysql2 sebagai gantinya, yang merupakan split brain survivor , kita harus menjalankan:

[email protected]:~# drbdadm connect r0

sekarang Anda dapat memeriksa dan melihat bahwa semua telah dibangun kembali dengan benar, tetapi sekarang mysql1 adalah sekunder dan mysql2 adalah yang utama.

[email protected]:~# cat /proc/drbd
versi:8.4.3 (api:1/proto:86-101)
srcversion:1A9F77B1CA5FF92235C2213
1:cs:SyncTarget ro:Secondary/Primary ds:Inconsistent/UpToDate C r-----
ns:0 nr:28224 dw:28224 dr:0 al:0 bm:1 lo:0 pe:0 ua:0 ap :0 ep:1 wo:f oos:229628
[=>..................] disinkronkan:11,2% (229628/257852)K
selesai:0:01:04 kecepatan:3,528 (3.528) ingin:6.600 K/dtk

Debian
  1. Cara Menginstal dan Mengkonfigurasi Mariadb 10 di Debian 11

  2. Cara menginstal dan mengkonfigurasi MongoDB 5 di Debian 11

  3. Cara menginstal dan mengkonfigurasi Redis 6 di Debian 11

  1. Instal dan Konfigurasi Fail2ban di Debian 10

  2. Cara Menginstal dan Mengonfigurasi Redis 6.0 di Debian 11

  3. Cara menginstal dan mengkonfigurasi buruh pelabuhan di Debian 11

  1. Cara Menginstal dan Mengkonfigurasi VNC di Debian 9

  2. Cara Menginstal dan Mengonfigurasi Redis di Debian 9

  3. Cara Menginstal dan Mengonfigurasi Nagios di Debian 9