
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 moduldrbd-dkms
- modul kernel dalam format DKMSdrbd-utils
- utilitas manajemen DRBD dasardrbdtop
adalah alat interaktif seperti top untuk DRBD saja
Setelah menginstal modul, periksa apakah semuanya baik-baik saja dengan itu:
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:
Kami menggambarkan sumber daya kami pada ketiga simpul:
Dianjurkan untuk menggunakan jaringan terpisah untuk sinkronisasi drbd.
Sekarang buat metadata untuk drbd dan jalankan:
Ulangi langkah-langkah ini pada ketiga node dan periksa status:
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:
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 .