ที่เก็บข้อมูล LINSTOR และการบูรณาการกับ OpenNebula

ที่เก็บข้อมูล LINSTOR และการบูรณาการกับ OpenNebula

ไม่นานมานี้ ทีมจาก LINBIT นำเสนอโซลูชัน SDS ใหม่ของพวกเขา - Linstor นี่เป็นพื้นที่เก็บข้อมูลฟรีโดยสมบูรณ์บนพื้นฐานของเทคโนโลยีที่ได้รับการพิสูจน์แล้ว: DRBD, LVM, ZFS Linstor ผสมผสานความเรียบง่ายและสถาปัตยกรรมที่ออกแบบมาอย่างดี ซึ่งช่วยให้คุณได้รับความเสถียรและผลลัพธ์ที่น่าประทับใจ

วันนี้ฉันอยากจะพูดถึงมันในรายละเอียดเพิ่มเติมอีกเล็กน้อย และแสดงให้เห็นว่ามันสามารถรวมเข้ากับ OpenNebula ได้อย่างง่ายดายโดยใช้ linstor_un ซึ่งเป็นไดรเวอร์ใหม่ที่ฉันพัฒนาขึ้นมาเพื่อจุดประสงค์นี้โดยเฉพาะ

Linstor ร่วมกับ OpenNebula ช่วยให้คุณสร้างระบบคลาวด์ที่รวดเร็วและเชื่อถือได้ซึ่งสามารถปรับใช้บนโครงสร้างพื้นฐานของคุณเองได้อย่างง่ายดาย

สถาปัตยกรรมลินสตอร์

Linstor ไม่ใช่ทั้งระบบไฟล์หรือพื้นที่จัดเก็บข้อมูลแบบบล็อก Linstor คือผู้เรียบเรียงที่จัดเตรียมเลเยอร์นามธรรมที่ช่วยให้คุณสร้างวอลุ่มใน LVM หรือ ZFS ได้โดยอัตโนมัติ และจำลองวอลุ่มเหล่านั้นโดยใช้ DRBD9

ทำลายแบบแผน

แต่เดี๋ยวก่อน DRBD? — ทำไมต้องทำให้มันเป็นอัตโนมัติ และมันทำงานได้อย่างไร?

มารำลึกความหลังกันเมื่อ DRBD8 ได้รับความนิยมอย่างมาก การใช้งานมาตรฐานเกี่ยวข้องกับการสร้างอุปกรณ์บล็อกขนาดใหญ่หนึ่งชิ้นและตัดเป็นชิ้นเล็ก ๆ จำนวนมากโดยใช้ LVM เดียวกัน mdadm RAID-1 ชนิดหนึ่ง แต่มีการจำลองแบบผ่านเครือข่าย

วิธีการนี้ไม่ได้มีข้อเสียดังนั้นด้วยการถือกำเนิดของ DRBD9 หลักการออกแบบพื้นที่เก็บข้อมูลจึงเปลี่ยนไป ตอนนี้อุปกรณ์ DRBD แยกต่างหากได้ถูกสร้างขึ้นสำหรับเครื่องเสมือนแต่ละเครื่อง

วิธีการใช้อุปกรณ์บล็อกอิสระช่วยให้ใช้พื้นที่ในคลัสเตอร์ได้ดีขึ้น และยังเพิ่มคุณสมบัติเพิ่มเติมอีกมากมาย ตัวอย่างเช่น สำหรับแต่ละอุปกรณ์ดังกล่าว คุณสามารถกำหนดจำนวนแบบจำลอง ตำแหน่ง และการตั้งค่าส่วนบุคคลได้ สร้าง/ลบ ถ่ายภาพสแนปช็อต ปรับขนาด เปิดใช้งานการเข้ารหัส และอื่นๆ อีกมากมายได้อย่างง่ายดาย เป็นที่น่าสังเกตว่า DRBD9 รองรับองค์ประชุมด้วยซึ่งช่วยให้คุณหลีกเลี่ยงสถานการณ์สมองแตกได้

ทรัพยากรและแบ็กเอนด์

เมื่อสร้างอุปกรณ์บล็อกใหม่ Linstor จะวางแบบจำลองตามจำนวนที่ต้องการบนโหนดต่างๆ ในคลัสเตอร์ เราจะเรียกแบบจำลองแต่ละรายการดังกล่าวว่าทรัพยากร DRBD

ทรัพยากรมีสองประเภท:

  • ทรัพยากรข้อมูล — เป็นอุปกรณ์ DRBD ที่อยู่บนโหนดในพูล LVM หรือ ZFS
    ในขณะนี้มีการรองรับแบ็กเอนด์หลายตัวและจำนวนก็เพิ่มขึ้นอย่างต่อเนื่อง มีการรองรับ LVM, ThinLVM และ ZFS สองรายการสุดท้ายอนุญาตให้คุณสร้างและใช้สแนปชอต
  • ทรัพยากรแบบไร้ดิสก์ — เป็นอุปกรณ์ DRBD ที่วางอยู่บนโหนดโดยไม่มีแบ็กเอนด์ แต่อนุญาตให้ถือเป็นอุปกรณ์บล็อกทั่วไป การดำเนินการอ่าน/เขียนทั้งหมดจะถูกเปลี่ยนเส้นทางไปยังแหล่งข้อมูล อะนาล็อกที่ใกล้เคียงที่สุดกับรีซอร์สแบบไร้ดิสก์คือ iSCSI LUN

ทรัพยากร DRBD แต่ละรายการสามารถมีแบบจำลองได้สูงสุด 8 รายการ และมีเพียง XNUMX รายการเท่านั้นที่สามารถใช้งานได้ตามค่าเริ่มต้น - ประถมคนอื่นๆ จะเป็นอย่างนั้น รอง และการใช้งานจะเป็นไปไม่ได้ตราบใดที่มีหลักอย่างน้อยหนึ่งรายการ นั่นคือพวกเขาจะจำลองข้อมูลระหว่างกันเท่านั้น

โดยการติดตั้งอุปกรณ์ DRBD เข้าสู่ระบบก็จะกลายเป็นโดยอัตโนมัติ ประถมดังนั้นแม้แต่ทรัพยากร Diskless ในคำศัพท์ DRBD ก็สามารถเป็นทรัพยากรหลักได้

แล้วทำไมคุณถึงต้องการ Linstor?

ด้วยการมอบความไว้วางใจให้กับเคอร์เนลงานที่ต้องใช้ทรัพยากรมาก Linstor จึงเป็นแอปพลิเคชัน Java ทั่วไปที่ช่วยให้คุณสร้างทรัพยากร DRBD โดยอัตโนมัติได้อย่างง่ายดาย
นอกจากนี้ ทรัพยากรแต่ละรายการที่เขาสร้างขึ้นจะเป็นคลัสเตอร์ DRBD อิสระที่ทำงานอย่างอิสระ โดยไม่คำนึงถึงสถานะของระนาบควบคุมและทรัพยากร DRBD อื่นๆ

Linstor ประกอบด้วยสององค์ประกอบเท่านั้น:

  • Linstor-คอนโทรลเลอร์ - ตัวควบคุมหลักซึ่งมี API สำหรับการสร้างและจัดการทรัพยากร นอกจากนี้ยังสื่อสารกับดาวเทียม ตรวจสอบพื้นที่ว่าง และส่งงานเพื่อสร้างและลบทรัพยากรใหม่ มันทำงานในอินสแตนซ์เดียวและใช้ฐานข้อมูลซึ่งอาจเป็นแบบภายใน (H2) หรือภายนอก (PostgreSQL, MySQL, MariaDB)
  • ดาวเทียม Linstor — ติดตั้งบนโหนดจัดเก็บข้อมูลทั้งหมดและให้ข้อมูลเกี่ยวกับพื้นที่ว่างแก่คอนโทรลเลอร์ และยังทำงานที่ได้รับจากคอนโทรลเลอร์เพื่อสร้างและลบวอลุ่มใหม่และอุปกรณ์ DRBD ที่อยู่ด้านบนสุดอีกด้วย

Linstor ดำเนินงานด้วยแนวคิดหลักดังต่อไปนี้:

  • โหนด — เซิร์ฟเวอร์กายภาพที่จะสร้างและใช้ทรัพยากร DRBD
  • สระจัดเก็บ — พูล LVM หรือ ZFS ที่สร้างขึ้นบนโหนดซึ่งทรัพยากร DRBD จะตั้งอยู่ พูลแบบไร้ดิสก์ก็เป็นไปได้เช่นกัน - นี่คือพูลที่มีเฉพาะทรัพยากรแบบไร้ดิสก์เท่านั้นที่จะตั้งอยู่
  • คำจำกัดความของทรัพยากร — คำจำกัดความของทรัพยากรนั้นเป็นต้นแบบที่อธิบายชื่อและคุณสมบัติทั้งหมด
  • คำจำกัดความของปริมาณ — คำจำกัดความของปริมาณ ทรัพยากรแต่ละรายการสามารถประกอบด้วยหลายวอลุ่ม โดยแต่ละวอลุ่มต้องมีขนาด
  • ทรัพยากร — อินสแตนซ์ที่สร้างขึ้นของอุปกรณ์บล็อก แต่ละทรัพยากรจะต้องวางอยู่บนโหนดเฉพาะและในพูลพื้นที่เก็บข้อมูลบางส่วน

การติดตั้งลินสตอร์

ฉันแนะนำให้ใช้ Ubuntu เป็นระบบเพราะ... มีไว้เพื่อเธอ พร้อม PPA:

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

หรือ Debian โดยที่ Linstor สามารถติดตั้งได้จากพื้นที่เก็บข้อมูลอย่างเป็นทางการสำหรับ 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

ตัวควบคุม

ทุกอย่างง่ายที่นี่:

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

โหนดการจัดเก็บข้อมูล

ปัจจุบันเคอร์เนล Linux มาพร้อมกับโมดูลเคอร์เนลในแผนผัง DRBD8น่าเสียดายที่มันไม่เหมาะกับเราและเราจำเป็นต้องติดตั้ง DRBD9:

apt-get install drbd-dkms

ตามที่แสดงในทางปฏิบัติ ปัญหาส่วนใหญ่เกิดขึ้นอย่างแน่นอนเนื่องจากมีการโหลดโมดูล DRBD8 เข้าสู่ระบบ ไม่ใช่ DRBD9 โชคดีที่ตรวจสอบได้ง่ายด้วยการรัน:

modprobe drbd
cat /proc/drbd

ถ้าคุณเห็น รุ่น: 9 - มันหมายความว่าทุกอย่างเรียบร้อยดีถ้า รุ่น: 8 - หมายความว่ามีบางอย่างผิดพลาด และคุณต้องดำเนินการเพิ่มเติมเพื่อค้นหาสาเหตุ

ตอนนี้เรามาติดตั้งกัน linstor-ดาวเทียม и drbd-utils:

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

สร้างคลัสเตอร์

พูลหน่วยเก็บข้อมูลและโหนด

เราจะใช้เป็นแบ็กเอนด์ ThinLVM, เพราะ มันง่ายที่สุดและรองรับสแน็ปช็อต
ติดตั้ง เลเวล 2หากคุณยังไม่ได้ดำเนินการ มาสร้างพูล ThinLVM บนโหนดพื้นที่จัดเก็บข้อมูลทั้งหมดของเรากันดีกว่า:

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

การดำเนินการเพิ่มเติมทั้งหมดสามารถทำได้โดยตรงบนคอนโทรลเลอร์:

มาเพิ่มโหนดของเรา:

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

มาสร้างพูลหน่วยเก็บข้อมูลกันเถอะ:

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

ตอนนี้เรามาตรวจสอบพูลที่สร้างขึ้น:

linstor storage-pool list

หากทุกอย่างถูกต้องแล้ว เราควรเห็นสิ่งที่ต้องการ:

+---------------------------------------------------------------- -------------------------------------------------- -------------------------------------------------- ----+ | สตอเรจพูล | โหนด | ไดร์เวอร์ | ชื่อพูล | ฟรีความจุ | ความจุรวม | รองรับ Snapshots | |------------------------------------------------ - ------------------------------------------------- - ---| | ข้อมูล | โหนด1 | LVM_THIN | drbdpool/ทินพูล | 64 กิ๊บ | 64 กิ๊บ | จริง | | ข้อมูล | โหนด2 | LVM_THIN | drbdpool/ทินพูล | 64 กิ๊บ | 64 กิ๊บ | จริง | | ข้อมูล | โหนด3 | LVM_THIN | drbdpool/ทินพูล | 64 กิ๊บ | 64 กิ๊บ | จริง | +---------------------------------------------------------------- -------------------------------------------------- -------------------------------------------------- ----+

ทรัพยากร DRBD

ตอนนี้เรามาลองสร้างทรัพยากร DRBD ใหม่ของเรา:

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

ตรวจสอบทรัพยากรที่สร้างขึ้น:

linstor resource list 

+---------------------------------------------------------------- -------------------------------------------------- -------------------------------------------------- ---+ | โหนด | ทรัพยากร | สตอเรจพูล | ปริมาณหมายเลข | ไมเนอร์เนอร์ | ชื่ออุปกรณ์ | จัดสรรแล้ว | ใช้งาน | รัฐ | |------------------------------------------------ - ------------------------------------------------- - --| | โหนด1 | มีเรส | ข้อมูล | 0 | 1084 | /dev/drbd1084 | 52 กิโลไบต์ | ไม่ได้ใช้ | อัปเดต | | โหนด2 | มีเรส | ข้อมูล | 0 | 1084 | /dev/drbd1084 | 52 กิโลไบต์ | ไม่ได้ใช้ | อัปเดต | +---------------------------------------------------------------- -------------------------------------------------- -------------------------------------------------- ---+

ยอดเยี่ยม! — เราเห็นว่าทรัพยากรถูกสร้างขึ้นบนสองโหนดแรก เราสามารถลองสร้างทรัพยากรแบบไร้ดิสก์บนโหนดที่สามได้เช่นกัน:

linstor resource create --diskless node3 myres

บนโหนดคุณจะพบอุปกรณ์นี้เสมอ /dev/drbd1084 หรือ /dev/drbd/by-res/myres/0

นี่คือวิธีการทำงานของ Linstor คุณสามารถรับข้อมูลเพิ่มเติมได้ เอกสารราชการ.

ตอนนี้ฉันจะบอกคุณถึงวิธีการรวมเข้ากับ OpenNebula

การตั้งค่า OpenNebula

ฉันจะไม่ลงลึกเข้าไปในกระบวนการตั้งค่า OpenNebula มากนัก เพราะ... มีอธิบายรายละเอียดทุกขั้นตอนไว้ใน เอกสารราชการซึ่งฉันขอแนะนำให้คุณติดต่อ ฉันจะบอกคุณเกี่ยวกับการรวม OpenNebula กับ Linstor เท่านั้น

linstor_un

เพื่อแก้ไขปัญหานี้ ฉันจึงเขียนไดรเวอร์ของตัวเองขึ้นมา - linstor_unขณะนี้มีให้บริการในรูปแบบปลั๊กอินและต้องติดตั้งแยกต่างหาก

การติดตั้งทั้งหมดจะดำเนินการบนโหนดส่วนหน้าของ OpenNebula และไม่จำเป็นต้องดำเนินการใดๆ เพิ่มเติมบนโหนดประมวลผล

ก่อนอื่นเราต้องแน่ใจว่าเรามี jq и linstor-ลูกค้า:

apt-get install jq linstor-client

ทีม linstor node list ควรแสดงรายการโหนด ต้องเพิ่มโหนดประมวลผล OpenNebula ทั้งหมดลงในคลัสเตอร์ Linstor

ดาวน์โหลดและติดตั้งปลั๊กอิน:

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

ตอนนี้เราต้องเพิ่มมันลงในการกำหนดค่า OpenNebula โดยทำตามขั้นตอนง่าย ๆ ที่อธิบายไว้ ที่นี่.

จากนั้นรีสตาร์ท OpenNebula:

systemctl restart opennebula

และเพิ่มพื้นที่เก็บข้อมูลระบบของเรา:

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

และที่เก็บรูปภาพ:

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

  • พารามิเตอร์ AUTO_PLACE แสดงจำนวนแบบจำลองข้อมูลที่จะสร้างขึ้นสำหรับรูปภาพใหม่แต่ละภาพใน OpenNebula
  • พารามิเตอร์ CLONE_MODE ระบุอย่างชัดเจนว่าภาพจะถูกโคลนอย่างไรเมื่อสร้างเครื่องเสมือนใหม่ snapshot — จะสร้างสแนปชอตของรูปภาพและปรับใช้เครื่องเสมือนจากสแน็ปช็อต copy — จะทำสำเนารูปภาพให้สมบูรณ์สำหรับเครื่องเสมือนแต่ละเครื่อง
  • В BRIDGE_LIST ขอแนะนำให้ระบุโหนดทั้งหมดที่จะใช้เพื่อดำเนินการโคลนรูปภาพ

สำหรับรายการพารามิเตอร์ที่รองรับทั้งหมด โปรดดู README โครงการ

เสร็จสิ้นการตั้งค่า ตอนนี้คุณสามารถดาวน์โหลดอุปกรณ์บางอย่างจากทางการได้แล้ว ตลาด OpenNebula และสร้างเครื่องเสมือนจากมัน

ลิงค์โครงการ:
https://github.com/OpenNebula/addon-linstor_un

ที่มา: will.com

เพิ่มความคิดเห็น