Penyimpanan Tepercaya dengan DRBD9 dan Proxmox (Bagian 2: iSCSI + LVM)

gambar


Dalam artikel sebelumnya, saya memeriksa kemungkinan membuat server NFS toleran-kesalahan menggunakan DRBD dan Proxmox. Ternyata cukup baik, tetapi kita tidak akan berpuas diri dan sekarang kita akan mencoba untuk "memeras semua jus" dari penyimpanan kita.


Pada artikel ini saya akan memberi tahu Anda cara membuat target iSCSI yang toleran terhadap kesalahan dengan cara ini, yang akan kami gunakan LVM untuk memotong menjadi beberapa bagian dan menggunakannya untuk mesin virtual.


Pendekatan inilah yang akan mengurangi beban dan meningkatkan kecepatan akses ke data beberapa kali, ini sangat bermanfaat ketika akses kompetitif ke data tidak diperlukan, misalnya, dalam kasus ketika Anda perlu mengatur penyimpanan untuk mesin virtual.


Beberapa kata tentang DRBD


DRBD adalah solusi yang cukup sederhana dan matang, kode versi kedelapan diadopsi sebagai bagian dari kernel Linux. Bahkan, itu mewakili mirror jaringan RAID1. Versi kesembilan memperkenalkan dukungan untuk kuorum dan replikasi dengan lebih dari dua node.


Bahkan, ini memungkinkan Anda untuk menggabungkan perangkat blok pada beberapa node fisik menjadi satu jaringan bersama yang umum.


Menggunakan DRBD Anda dapat mencapai konfigurasi yang sangat menarik. Hari ini kita akan berbicara tentang iSCSI dan LVM.


Anda dapat mempelajari lebih lanjut dengan membaca artikel saya sebelumnya , di mana saya menggambarkan solusi ini secara rinci.


Beberapa kata tentang iSCSI


iSCSI adalah protokol pengiriman perangkat blok melalui jaringan.


Tidak seperti NBD, ini mendukung otorisasi, mengatasi kegagalan jaringan tanpa masalah dan mendukung banyak fungsi berguna lainnya, dan yang paling penting itu menunjukkan kinerja yang sangat baik.


Ada sejumlah besar implementasinya, beberapa di antaranya juga termasuk dalam kernel dan tidak memerlukan kesulitan khusus untuk konfigurasi dan koneksinya.


Beberapa kata tentang LVM


Perlu disebutkan bahwa LINBIT memiliki solusi sendiri untuk Proxmox, itu harus bekerja di luar kotak dan memungkinkan untuk mencapai hasil yang serupa, tetapi dalam artikel ini saya tidak ingin fokus hanya pada Proxmox dan menjelaskan beberapa solusi yang lebih universal yang cocok untuk kedua Proxmox dan hal lain, dalam contoh ini, proxmox hanya digunakan sebagai sarana orkestrasi wadah, pada kenyataannya Anda dapat menggantinya dengan solusi lain, misalnya, meluncurkan wadah dengan target di Kubernetes.


Adapun Proxmox secara khusus, ini berfungsi dengan baik dengan LUN dan LVM bersama, hanya menggunakan driver standar sendiri.


Kelebihan LVM meliputi fakta bahwa penggunaannya bukan sesuatu yang revolusioner dan baru, tetapi sebaliknya, ini menunjukkan stabilitas yang kering, yang biasanya diperlukan dari penyimpanan. Perlu disebutkan bahwa LVM cukup aktif digunakan di lingkungan lain, misalnya, di OpenNebula atau Kubernetes, dan didukung dengan cukup baik di sana.


Dengan demikian, Anda akan menerima penyimpanan universal yang dapat digunakan dalam sistem yang berbeda (tidak hanya dalam proxmox), hanya menggunakan driver yang sudah jadi, tanpa perlu modifikasi khusus dengan file.


Sayangnya, ketika memilih solusi penyimpanan, Anda harus selalu berkompromi. Jadi di sini, solusi ini tidak akan memberikan Anda fleksibilitas yang sama seperti Ceph.
Ukuran disk virtual dibatasi oleh ukuran grup LVM, dan area yang ditandai untuk disk virtual tertentu perlu dialokasikan ulang - ini sangat meningkatkan kecepatan akses ke data, tetapi tidak memungkinkan Thin-Provisioning (ketika disk virtual mengambil lebih sedikit ruang daripada yang sebenarnya). Perlu disebutkan bahwa kinerja LVM melorot cukup banyak ketika menggunakan snapshot, dan karena itu kemungkinan penggunaan bebasnya sering dihilangkan.


Ya, LVM mendukung Thin-Provision pools yang tidak memiliki kelemahan ini, tetapi sayangnya penggunaannya hanya mungkin dalam konteks satu node dan tidak ada cara untuk membagikan satu kumpulan Thin-Provision ke beberapa node dalam sebuah cluster.


Namun terlepas dari kekurangan ini, karena kesederhanaannya, LVM masih tidak memungkinkan pesaing untuk mengatasinya dan sepenuhnya mendorongnya keluar dari medan perang.


Dengan overhead yang cukup kecil, LVM masih memberikan solusi yang sangat cepat, stabil dan cukup fleksibel.


Skema umum


  • Kami memiliki tiga node
  • Setiap node memiliki perangkat drbd terdistribusi.
  • Di atas perangkat drbd, sebuah wadah LXC dengan target iSCSI diluncurkan.
  • Target terhubung ke ketiga node.
  • Grup LVM telah dibuat pada target yang terhubung.
  • Jika perlu, wadah LXC dapat pindah ke node lain, bersama dengan target iSCSI

Kustomisasi


Kami menemukan ide sekarang, mari beralih ke implementasi.


Secara default , versi kedelapan dari drbd disertakan dengan kernel Linux , sayangnya itu tidak cocok untuk kita dan kita perlu menginstal versi kesembilan dari modul.


Hubungkan repositori LINBIT dan instal semua yang Anda butuhkan:


wget -O- https://packages.linbit.com/package-signing-pubkey.asc | apt-key add - echo "deb http://packages.linbit.com/proxmox/ proxmox-5 drbd-9.0" \ > /etc/apt/sources.list.d/linbit.list apt-get update && apt-get -y install pve-headers drbd-dkms drbd-utils drbdtop 

  • pve-headers - pve-headers kernel diperlukan untuk membangun modul
  • drbd-dkms - modul kernel dalam format DKMS
  • drbd-utils - utilitas manajemen DRBD dasar
  • drbdtop adalah alat interaktif seperti top untuk DRBD saja

Setelah menginstal modul, periksa apakah semuanya baik-baik saja dengan itu:


 # modprobe drbd # cat /proc/drbd version: 9.0.14-1 (api:2/proto:86-113) 

Jika Anda melihat versi kedelapan di output perintah, maka ada yang tidak beres dan modul kernel in-tree dimuat. Periksa dkms status mencari tahu apa alasannya.


Setiap node yang kita miliki akan memiliki perangkat drbd yang sama berjalan di atas partisi reguler. Pertama kita perlu menyiapkan bagian ini untuk drbd pada setiap node.


Partisi seperti itu dapat berupa perangkat blok apa saja, dapat berupa lvm, zvol, partisi disk, atau keseluruhan disk. Pada artikel ini saya akan menggunakan disk nvme terpisah dengan partisi di bawah drbd: /dev/nvme1n1p1


Perlu dicatat bahwa nama perangkat cenderung berubah kadang-kadang, jadi lebih baik untuk segera menganggapnya sebagai kebiasaan untuk menggunakan symlink konstan ke perangkat.


Anda dapat menemukan symlink untuk /dev/nvme1n1p1 dengan cara ini:


 # find /dev/disk/ -lname '*/nvme1n1p1' /dev/disk/by-partuuid/847b9713-8c00-48a1-8dff-f84c328b9da2 /dev/disk/by-path/pci-0000:0e:00.0-nvme-1-part1 /dev/disk/by-id/nvme-eui.0000000001000000e4d25c33da9f4d01-part1 /dev/disk/by-id/nvme-INTEL_SSDPEKKA010T7_BTPY703505FB1P0H-part1 

Kami menggambarkan sumber daya kami pada ketiga simpul:


 # cat /etc/drbd.d/tgt1.res resource tgt1 { meta-disk internal; device /dev/drbd100; protocol C; net { after-sb-0pri discard-zero-changes; after-sb-1pri discard-secondary; after-sb-2pri disconnect; } on pve1 { address 192.168.2.11:7000; disk /dev/disk/by-partuuid/95e7eabb-436e-4585-94ea-961ceac936f7; node-id 0; } on pve2 { address 192.168.2.12:7000; disk /dev/disk/by-partuuid/aa7490c0-fe1a-4b1f-ba3f-0ddee07dfee3; node-id 1; } on pve3 { address 192.168.2.13:7000; disk /dev/disk/by-partuuid/847b9713-8c00-48a1-8dff-f84c328b9da2; node-id 2; } connection-mesh { hosts pve1 pve2 pve3; } } 

Dianjurkan untuk menggunakan jaringan terpisah untuk sinkronisasi drbd.


Sekarang buat metadata untuk drbd dan jalankan:


 # drbdadm create-md tgt1 initializing activity log initializing bitmap (320 KB) to all zero Writing meta data... New drbd meta data block successfully created. success # drbdadm up tgt1 

Ulangi langkah-langkah ini pada ketiga node dan periksa status:


 # drbdadm status tgt1 role:Secondary disk:Inconsistent pve2 role:Secondary peer-disk:Inconsistent pve3 role:Secondary peer-disk:Inconsistent 

Sekarang disk tidak konsisten kami ada di ketiga node, ini karena drbd tidak tahu disk mana yang harus diambil seperti aslinya. Kita harus menandai salah satunya sebagai Primer agar statusnya disinkronkan ke node lain:


 drbdadm primary --force tgt1 drbdadm secondary tgt1 

Segera setelah ini, sinkronisasi akan dimulai:


 # drbdadm status tgt1 role:Secondary disk:UpToDate pve2 role:Secondary replication:SyncSource peer-disk:Inconsistent done:26.66 pve3 role:Secondary replication:SyncSource peer-disk:Inconsistent done:14.20 

Kita tidak harus menunggu sampai selesai dan kita bisa melakukan langkah lebih lanjut secara paralel. Mereka dapat dieksekusi pada sembarang simpul , terlepas dari keadaan saat ini dari disk lokal di DRBD. Semua permintaan akan secara otomatis dialihkan ke perangkat dengan status UpToDate .


Jangan lupa untuk mengaktifkan autorun layanan drbd pada node:


 systemctl enable drbd.service 

Mengkonfigurasi wadah LXC


Kami akan menghilangkan bagian konfigurasi dari cluster Proxmox yang terdiri dari tiga simpul, bagian ini dijelaskan dengan baik di wiki resmi


Seperti yang saya katakan sebelumnya, target iSCSI kami akan bekerja dalam wadah LXC . Kami akan menyimpan wadah di perangkat /dev/drbd100 yang baru saja kami buat.


Pertama kita perlu membuat sistem file di atasnya:


 mkfs -t ext4 -O mmp -E mmp_update_interval=5 /dev/drbd100 

Proxmox secara default mencakup perlindungan multimount di tingkat sistem file, pada prinsipnya, kita dapat melakukannya tanpa itu, karena DRBD memiliki perlindungan sendiri secara default, itu hanya melarang Primary kedua untuk perangkat, tetapi hati-hati tidak melukai kita.


Sekarang unduh templat Ubuntu:


 # wget http://download.proxmox.com/images/system/ubuntu-16.04-standard_16.04-1_amd64.tar.gz -P /var/lib/vz/template/cache/ 

Dan buat wadah kami dari itu:


 pct create 101 local:vztmpl/ubuntu-16.04-standard_16.04-1_amd64.tar.gz \ --hostname=tgt1 \ --net0=name=eth0,bridge=vmbr0,gw=192.168.1.1,ip=192.168.1.11/24 \ --rootfs=volume=/dev/drbd100,shared=1 

Dalam perintah ini, kami menunjukkan bahwa sistem root dari wadah kami akan ada di perangkat /dev/drbd100 dan menambahkan parameter shared=1 untuk memungkinkan migrasi kontainer di antara node.


Jika terjadi kesalahan, Anda selalu dapat memperbaikinya melalui antarmuka Proxmox atau di /etc/pve/lxc/101.conf wadah


Proxmox akan membongkar templat dan menyiapkan sistem root wadah untuk kami. Setelah itu kita bisa meluncurkan wadah kita:


 pct start 101 

Mengkonfigurasi target iSCSI.


Dari seluruh rangkaian target , saya memilih istgt , karena memiliki kinerja tertinggi dan bekerja di ruang pengguna.


Sekarang mari masuk ke wadah kami:


 pct exec 101 bash 

Instal pembaruan dan istgt :


 apt-get update apt-get -y upgrade apt-get -y install istgt 

Buat file yang akan kami berikan melalui jaringan:


 mkdir -p /data fallocate -l 740G /data/target1.img 

Sekarang kita perlu menulis konfigurasi untuk istgt /etc/istgt/istgt.conf :


 [Global] Comment "Global section" NodeBase "iqn.2018-07.org.example.tgt1" PidFile /var/run/istgt.pid AuthFile /etc/istgt/auth.conf MediaDirectory /var/istgt LogFacility "local7" Timeout 30 NopInInterval 20 DiscoveryAuthMethod Auto MaxSessions 16 MaxConnections 4 MaxR2T 32 MaxOutstandingR2T 16 DefaultTime2Wait 2 DefaultTime2Retain 60 FirstBurstLength 262144 MaxBurstLength 1048576 MaxRecvDataSegmentLength 262144 InitialR2T Yes ImmediateData Yes DataPDUInOrder Yes DataSequenceInOrder Yes ErrorRecoveryLevel 0 [UnitControl] Comment "Internal Logical Unit Controller" AuthMethod CHAP Mutual AuthGroup AuthGroup10000 Portal UC1 127.0.0.1:3261 Netmask 127.0.0.1 [PortalGroup1] Comment "SINGLE PORT TEST" Portal DA1 192.168.1.11:3260 [InitiatorGroup1] Comment "Initiator Group1" InitiatorName "ALL" Netmask 192.168.1.0/24 [LogicalUnit1] Comment "Hard Disk Sample" TargetName disk1 TargetAlias "Data Disk1" Mapping PortalGroup1 InitiatorGroup1 AuthMethod Auto AuthGroup AuthGroup1 UseDigest Auto UnitType Disk LUN0 Storage /data/target1.img Auto 

Mulai kembali istgt:


 systemctl restart istgt 

Ini melengkapi pengaturan target


Pengaturan HA


Sekarang kita dapat beralih ke konfigurasi HA-manager . Mari kita membuat grup HA terpisah untuk perangkat kita:


 ha-manager groupadd tgt1 --nodes pve1,pve2,pve3 --nofailback=1 --restricted=1 

Sumber daya kami hanya akan berfungsi pada node yang ditentukan untuk grup ini. Tambahkan wadah kami ke grup ini:


 ha-manager add ct:101 --group=tgt1 --max_relocate=3 --max_restart=3 

Rekomendasi dan penyetelan


DRBD

Seperti yang saya sebutkan di atas, selalu disarankan untuk menggunakan jaringan terpisah untuk replikasi. Sangat disarankan untuk menggunakan adapter jaringan 10-gigabit , jika tidak, Anda akan mengalami kecepatan port.
Jika replikasi tampaknya cukup lambat, cobalah beberapa opsi untuk DRBD . Ini adalah konfigurasi, yang menurut saya optimal untuk jaringan 10G saya:


 # cat /etc/drbd.d/global_common.conf global { usage-count yes; udev-always-use-vnr; } common { handlers { } startup { } options { } disk { c-fill-target 10M; c-max-rate 720M; c-plan-ahead 10; c-min-rate 20M; } net { max-buffers 36k; sndbuf-size 1024k; rcvbuf-size 2048k; } } 

Anda dapat memperoleh informasi lebih lanjut tentang setiap parameter dari dokumentasi DRBD resmi.


Buka iSCSI

Karena kami tidak menggunakan multipathing, dalam kasus kami disarankan untuk menonaktifkan pemeriksaan koneksi berkala pada klien, serta meningkatkan waktu tunggu tunggu untuk pemulihan sesi di /etc/iscsi/iscsid.conf .


 node.conn[0].timeo.noop_out_interval = 0 node.conn[0].timeo.noop_out_timeout = 0 node.session.timeo.replacement_timeout = 86400 

Gunakan


Proxmox


Target iSCSI yang dihasilkan dapat langsung terhubung ke Proxmox, tanpa lupa untuk menghapus centang Gunakan LUN Secara Langsung .



Segera setelah itu, dimungkinkan untuk membuat LVM di atasnya, jangan lupa untuk mencentang kotak bersama :



Lingkungan lain


Jika Anda berencana untuk menggunakan solusi ini di lingkungan yang berbeda, Anda mungkin perlu menginstal ekstensi cluster untuk LVM pada saat ada dua implementasi. CLVM dan lvmlockd .


Mengkonfigurasi CLVM bukanlah hal sepele dan membutuhkan manajer kluster yang berfungsi.
Sedangkan sebagai metode kedua, lvmlockd belum sepenuhnya diuji dan baru saja mulai muncul di repositori yang stabil.


Saya sarankan membaca artikel yang bagus tentang pemblokiran di LVM


Ketika menggunakan LVM dengan Proxmox, penambahan klaster tidak diperlukan , karena manajemen volume disediakan oleh proxmox itu sendiri, yang memperbarui dan memonitor metadata LVM secara independen. Hal yang sama berlaku untuk OpenNebula , seperti yang ditunjukkan oleh dokumentasi resmi .

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


All Articles