Repositori LINSTOR dan integrasinya dengan OpenNebula


Belum lama ini, orang-orang LINBIT mempresentasikan solusi SDS baru mereka - Linstor. Ini adalah penyimpanan yang sepenuhnya gratis berdasarkan teknologi yang telah terbukti: DRBD, LVM, ZFS. Linstor menggabungkan kesederhanaan dan arsitektur yang dirancang dengan baik, yang memungkinkan stabilitas dan hasil yang mengesankan.


Hari ini saya ingin memberi tahu Anda sedikit lebih banyak tentang hal itu dan menunjukkan betapa mudahnya dapat diintegrasikan dengan OpenNebula menggunakan linstor_un - driver baru yang saya kembangkan secara khusus untuk tujuan ini.


Linstor dikombinasikan dengan OpenNebula memungkinkan Anda untuk membangun cloud yang cepat dan andal yang dapat dengan mudah digunakan pada infrastruktur Anda sendiri.


Arsitektur Linstor


Linstor bukanlah sistem file atau repositori blok per se, Linstor adalah orkestrator yang menyediakan lapisan abstraksi yang mengotomatisasi pembuatan volume dalam LVM atau ZFS dan mereplikasi mereka menggunakan DRBD9.


Melanggar stereotip

Tapi tunggu, DRBD? "Mengapa mengotomatiskannya, dan bagaimana itu bisa bekerja?"


Ingat masa lalu ketika DRBD8 populer di seluruh dunia. Penggunaan standarnya menyiratkan pembuatan satu perangkat blok besar dan memotongnya menjadi banyak bagian kecil, menggunakan LVM yang sama. Semacam mdadm RAID-1 tetapi dengan replikasi melalui jaringan.


Pendekatan ini bukan tanpa kelemahan, dan oleh karena itu, dengan munculnya DRBD9, prinsip-prinsip konstruksi penyimpanan telah berubah, sekarang perangkat DRBD terpisah dibuat untuk setiap mesin virtual.


Pendekatan dengan perangkat blok independen memungkinkan untuk memanfaatkan ruang di cluster dengan lebih baik, dan juga menambahkan sejumlah fitur tambahan. Misalnya, untuk setiap perangkat tersebut, Anda dapat menentukan jumlah replika, lokasi dan pengaturan masing-masing. Mereka mudah untuk membuat / menghapus, membuat snapshot, mengubah ukuran, mengaktifkan enkripsi dan banyak lagi. Perlu dicatat bahwa DRBD9 juga mendukung kuorum, yang menghindari situasi otak-terpisah.


Sumber daya dan backend

Membuat perangkat blok baru, Linstor menempatkan jumlah replika yang diperlukan pada node yang berbeda di cluster. Kami akan menyebut setiap replika semacam itu sebagai sumber daya DRBD.


Sumber daya ada dua jenis:


  • Sumber daya data - adalah perangkat DRBD yang terletak di sebuah simpul di kumpulan LVM atau ZFS.
    Saat ini ada dukungan untuk beberapa backend dan jumlah mereka terus bertambah. Ada dukungan untuk LVM, ThinLVM dan ZFS. Dua yang terakhir memungkinkan Anda membuat dan menggunakan snapshot.
  • Diskless-resource - adalah perangkat DRBD yang terletak di node tanpa backend, tetapi memungkinkan untuk memperlakukannya seperti perangkat blok normal, semua operasi baca / tulis akan dialihkan ke sumber daya data. Setara dengan sumber daya diskless terdekat adalah LUN iSCSI.

Setiap sumber daya DRBD dapat memiliki hingga 8 replika, dan hanya satu di antaranya yang dapat diaktifkan secara default - Utama , sisanya akan menjadi Sekunder dan penggunaannya tidak mungkin hingga setidaknya ada satu Pratama, yaitu, mereka hanya akan mereplikasi data di antara Anda.


Saat memasang perangkat DRBD ke dalam sistem, perangkat itu secara otomatis menjadi Pratama , sehingga bahkan sumber daya Diskless, dalam terminologi DRBD, dapat menjadi Pratama.


Jadi mengapa kita membutuhkan Linstor?

Mempercayai semua tugas yang membutuhkan banyak sumber daya ke kernel, Linstor pada dasarnya adalah aplikasi Java reguler yang membuatnya mudah untuk mengotomatisasi pembuatan sumber daya DRBD.
Selain itu, setiap sumber daya yang dibuat olehnya akan menjadi gugus DRBD independen yang bekerja secara independen, terlepas dari keadaan bidang kontrol dan sumber daya DRBD lainnya.


Linstor hanya terdiri dari dua komponen:


  • Linstor-controller - Kontroler utama yang menyediakan API untuk membuat dan mengelola sumber daya. Dia juga berkomunikasi dengan satelit, memeriksa ruang kosong di atasnya, dan mengirim tugas untuk membuat dan menghapus sumber daya baru. Ini berjalan dalam satu contoh dan menggunakan database, yang dapat berupa internal (H2) atau eksternal (PostgreSQL, MySQL, MariaDB)
  • Linstor-satellite - Diinstal pada semua node penyimpanan dan memberikan informasi kepada pengontrol tentang ruang kosong, dan juga melakukan tugas yang diterima dari pengontrol untuk membuat dan menghapus volume baru dan perangkat DRBD di atasnya.

Linstor beroperasi dengan konsep-konsep kunci berikut:


  • Node adalah server fisik tempat sumber daya DRBD akan dibuat dan digunakan.
  • Storage Pool - LVM atau ZFS pool dibuat pada node di mana sumber daya DRBD akan ditempatkan. Kumpulan diskless juga dimungkinkan - ini adalah kumpulan yang hanya menampung sumber daya diskless.
  • Definisi Sumber Daya - Definisi sumber daya pada dasarnya adalah prototipe yang menggambarkan nama dan semua propertinya.
  • Volume Definition - Volume Definition . Setiap sumber daya dapat terdiri dari beberapa volume, setiap volume harus memiliki ukuran.
  • Sumber Daya - Sebuah instance yang dibuat dari perangkat blok, setiap sumber daya harus ditempatkan pada node tertentu dan di beberapa kumpulan penyimpanan.

Instal Linstor


Saya sarankan menggunakan Ubuntu sebagai sistem, sebagai Ada PPA yang sudah jadi untuk itu:


add-apt-repository ppa:linbit/linbit-drbd9-stack apt-get update 

Atau Debian, tempat Linstor dapat diinstal dari repositori resmi untuk Proxmox:


 wget -O- https://packages.linbit.com/package-signing-pubkey.asc | apt-key add - PVERS=5 && echo "deb http://packages.linbit.com/proxmox/ proxmox-$PVERS drbd-9.0" > \ /etc/apt/sources.list.d/linbit.list apt-get update 

Pengendali

Semuanya sederhana di sini:


 apt-get install linstor-controller linstor-client systemctl enable linstor-controller systemctl start linstor-controller 

Node penyimpanan

Saat ini, modul kernel DRBD8 in-tree disediakan di kernel Linux, sayangnya itu tidak cocok dengan kami dan kami perlu menginstal DRBD9 :


 apt-get install drbd-dkms 

Seperti yang ditunjukkan oleh praktik, sebagian besar kesulitan muncul justru karena modul DRBD8 dimuat ke dalam sistem, dan bukan DRBD9. Untungnya, ini mudah diverifikasi dengan melakukan:


 modprobe drbd cat /proc/drbd 

Jika Anda melihat versi: 9 - maka semuanya baik-baik saja, jika versi: 8 - maka ada yang tidak beres dan Anda perlu mengambil langkah tambahan untuk mengetahui alasannya.


Sekarang instal linstor-satellite dan drbd-utils :


 apt-get install linstor-satellite drbd-utils systemctl enable linstor-satellite systemctl start linstor-satellite 

Penciptaan Cluster


Kolam penyimpanan dan node


Kami akan menggunakan ThinLVM sebagai backend , sebagai itu adalah foto yang paling sederhana dan mendukung.
Instal lvm2 jika Anda belum melakukannya dan mari kita buat kelompok ThinLVM di semua node penyimpanan kami:


 sudo vgcreate drbdpool /dev/sdb sudo lvcreate -L 800G -T drbdpool/thinpool 

Semua tindakan lebih lanjut dapat dilakukan langsung pada pengontrol:


Tambahkan node kami:


 linstor node create node1 127.0.0.11 linstor node create node2 127.0.0.12 linstor node create node3 127.0.0.13 

Buat kumpulan penyimpanan:


 linstor storage-pool create lvmthin node1 data drbdpool/thinpool linstor storage-pool create lvmthin node2 data drbdpool/thinpool linstor storage-pool create lvmthin node3 data drbdpool/thinpool 

Sekarang periksa kumpulan yang dibuat:


 linstor storage-pool list 

Jika semuanya dilakukan dengan benar, maka kita akan melihat sesuatu seperti:


  + ------------------------------------------------- -------------------------------------------------- ---- +
 |  StoragePool |  Node |  Driver |  PoolName |  Kapasitas Gratis |  TotalCapacity |  MendukungSnapshots |
 | ------------------------------------------------- -------------------------------------------------- ---- |
 |  data |  node1 |  LVM_THIN |  drbdpool / thinpool |  64 GiB |  64 GiB |  benar |
 |  data |  node2 |  LVM_THIN |  drbdpool / thinpool |  64 GiB |  64 GiB |  benar |
 |  data |  node3 |  LVM_THIN |  drbdpool / thinpool |  64 GiB |  64 GiB |  benar |
 + ------------------------------------------------- -------------------------------------------------- ---- + 

Sumber daya DRBD


Sekarang mari kita coba membuat sumber daya DRBD baru kami:


 linstor resource-definition create myres linstor volume-definition create myres 1G linstor resource create myres --auto-place 2 

Mari kita periksa sumber daya yang dibuat:


 linstor volume list 

  + ------------------------------------------------- -------------------------------------------------- --- +
 |  Node |  Sumberdaya |  StoragePool |  VolumeNr |  MinorNr |  DeviceName |  Dialokasikan |  Gunakan |  Negara |
 | ------------------------------------------------- -------------------------------------------------- --- |
 |  node1 |  myres |  data |  0 |  1084 |  / dev / drbd1084 |  52 KiB |  Tidak digunakan |  UpToDate |
 |  node2 |  myres |  data |  0 |  1084 |  / dev / drbd1084 |  52 KiB |  Tidak digunakan |  UpToDate |
 + ------------------------------------------------- -------------------------------------------------- --- + 

Hebat! - kita melihat bahwa sumber daya dibuat pada dua node pertama, kita juga dapat mencoba membuat sumber daya diskless pada yang ketiga:


 linstor resource create --diskless node3 myres 

Pada node Anda akan selalu menemukan perangkat ini sebagai /dev/drbd1084 atau /dev/drbd/by-res/myres/0


Beginilah cara Linstor bekerja, Anda bisa mendapatkan informasi lebih lanjut dari dokumentasi resmi .


Sekarang saya akan berbicara tentang bagaimana mengintegrasikannya dengan OpenNebula


Konfigurasikan OpenNebula


Saya tidak akan masuk jauh ke dalam proses pengaturan OpenNebula, sebagai semua langkah dijelaskan secara rinci dalam dokumentasi resmi , yang saya sarankan Anda beralih ke, saya akan memberi tahu Anda hanya tentang integrasi OpenNebula dengan Linstor.


linstor_un

Untuk mengatasi masalah ini, saya menulis driver saya sendiri - linstor_un , saat ini tersedia sebagai plug-in dan harus diinstal secara terpisah.


Semua instalasi dilakukan pada OpenNebula-node frontend dan tidak memerlukan tindakan tambahan pada compute-node.


Pertama-tama, kita perlu memastikan bahwa kita memiliki jq dan linstor-client :


 apt-get install jq linstor-client 

Perintah linstor node list harus mencantumkan node. Semua simpul komputasi OpenNebula harus ditambahkan ke cluster Linstor.


Unduh dan pasang plugin:


 curl -L https://github.com/OpenNebula/addon-linstor_un/archive/master.tar.gz | tar -xzvf - -C /tmp mv /tmp/addon-linstor_un-master/vmm/kvm/* /var/lib/one/remotes/vmm/kvm/ mkdir -p /var/lib/one/remotes/etc/datastore/linstor_un mv /tmp/addon-linstor_un-master/datastore/linstor_un/linstor_un.conf /var/lib/one/remotes/etc/datastore/linstor_un/linstor_un.conf mv /tmp/addon-linstor_un-master/datastore/linstor_un /var/lib/one/remotes/datastore/linstor_un mv /tmp/addon-linstor_un-master/tm/linstor_un /var/lib/one/remotes/tm/linstor_un rm -rf /tmp/addon-linstor_un-master 

Sekarang kita perlu menambahkannya ke konfigurasi OpenNebula, untuk ini kita melakukan langkah-langkah sederhana yang dijelaskan di sini .


Kemudian mulai kembali OpenNebula:


 systemctl restart opennebula 

Dan tambahkan sistem datastores kami:


 cat > system-ds.conf <<EOT NAME="linstor-system" TYPE="SYSTEM_DS" STORAGE_POOL="data" AUTO_PLACE="2" CLONE_MODE="snapshot" CHECKPOINT_AUTO_PLACE="1" BRIDGE_LIST="node1 node2 node3" TM_MAD="linstor_un" EOT onedatastore create system-ds.conf 

Dan penyimpanan gambar:


 cat > images-ds.conf <<EOT NAME="linstor-images" TYPE="IMAGE_DS" STORAGE_POOL="data" AUTO_PLACE="2" BRIDGE_LIST="node1 node2 node3" DISK_TYPE="BLOCK" DS_MAD="linstor_un" TM_MAD="linstor_un" EOT onedatastore create images-ds.conf 

  • Parameter AUTO_PLACE menampilkan jumlah replika data yang akan dibuat untuk setiap gambar baru di OpenNebula.
  • Parameter CLONE_MODE menunjukkan bagaimana gambar akan dikloning saat membuat mesin virtual baru, snapshot - akan membuat snapshot gambar dan menggunakan mesin virtual dari snapshot, copy - akan membuat salinan penuh gambar untuk setiap mesin virtual.
  • BRIDGE_LIST merekomendasikan untuk menentukan semua node yang akan digunakan untuk melakukan operasi kloning gambar.

Daftar lengkap parameter yang didukung diberikan dalam proyek README .


Pada pengaturan ini selesai, sekarang Anda dapat mengunduh beberapa alat dari OpenNebula Marketplace resmi dan membuat mesin virtual darinya.


Tautan ke proyek

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


All Articles