สิ่งที่เราจะพูดถึง:
วิธีปรับใช้พื้นที่จัดเก็บข้อมูลที่ใช้ร่วมกันอย่างรวดเร็วสำหรับเซิร์ฟเวอร์สองเครื่องโดยใช้โซลูชัน drbd+ocfs2
สิ่งนี้จะเป็นประโยชน์กับใคร:
บทช่วยสอนจะเป็นประโยชน์สำหรับผู้ดูแลระบบและใครก็ตามที่เลือกวิธีการใช้งานพื้นที่เก็บข้อมูลหรือต้องการลองใช้วิธีแก้ปัญหา
เราปฏิเสธการตัดสินใจอะไรบ้างและเพราะเหตุใด
บ่อยครั้งที่เราเผชิญกับสถานการณ์ที่เราจำเป็นต้องใช้พื้นที่จัดเก็บข้อมูลที่ใช้ร่วมกันซึ่งมีประสิทธิภาพการอ่านและเขียนที่ดีบนเว็บคลัสเตอร์ขนาดเล็ก เราได้ลองใช้ตัวเลือกต่างๆ ในการใช้พื้นที่จัดเก็บข้อมูลที่ใช้ร่วมกันสำหรับโปรเจ็กต์ของเรา แต่มีเพียงไม่กี่ตัวที่สามารถตอบสนองตัวชี้วัดหลายตัวได้ในคราวเดียว ตอนนี้เราจะบอกคุณว่าทำไม
- Glusterfs ไม่พอใจกับประสิทธิภาพการอ่านและการเขียนของเรา มีปัญหาในการอ่านไฟล์จำนวนมากพร้อมกันและมีภาระงานสูงบน CPU ปัญหาเกี่ยวกับการอ่านไฟล์สามารถแก้ไขได้โดยการเข้าถึงโดยตรงจากอิฐ แต่อาจไม่สามารถใช้ได้เสมอไปและโดยทั่วไปจะไม่ถูกต้อง
- Ceph ไม่ชอบความซับซ้อนที่มากเกินไป ซึ่งอาจเป็นอันตรายต่อโปรเจ็กต์ที่มีเซิร์ฟเวอร์ 2-4 เครื่อง โดยเฉพาะอย่างยิ่งหากโปรเจ็กต์ได้รับการดูแลในภายหลัง ขอย้ำอีกครั้งว่า มีข้อจำกัดด้านประสิทธิภาพที่ร้ายแรงซึ่งบังคับให้เราสร้างคลัสเตอร์พื้นที่จัดเก็บข้อมูลแยกกัน เช่นเดียวกับ glusterfs
- การใช้เซิร์ฟเวอร์ NFS หนึ่งเครื่องเพื่อใช้พื้นที่จัดเก็บข้อมูลที่ใช้ร่วมกันทำให้เกิดคำถามในแง่ของความทนทานต่อข้อผิดพลาด
- s3 เป็นโซลูชันยอดนิยมที่ยอดเยี่ยมสำหรับงานบางช่วง แต่ไม่ใช่ระบบไฟล์ซึ่งทำให้ขอบเขตแคบลง
- lsyncd. หากเราเริ่มพูดถึง "ระบบที่ไม่ใช่ไฟล์" แล้ว ก็คุ้มค่าที่จะพิจารณาโซลูชันยอดนิยมนี้ ไม่เพียงแต่จะไม่เหมาะสำหรับการแลกเปลี่ยนแบบสองทาง (แต่ถ้าคุณต้องการจริงๆ คุณก็สามารถทำได้) มันยังใช้งานไม่ได้กับไฟล์จำนวนมากอีกด้วย สิ่งที่ดีอีกอย่างหนึ่งคือมันเป็นแบบเธรดเดียว เหตุผลอยู่ในสถาปัตยกรรมของโปรแกรม: ใช้ inotify เพื่อตรวจสอบวัตถุงาน ซึ่งกำหนดเมื่อเริ่มต้นและระหว่างการสแกนใหม่ rsync ถูกใช้เป็นสื่อกลางในการถ่ายโอน
บทช่วยสอน: วิธีปรับใช้พื้นที่เก็บข้อมูลที่ใช้ร่วมกันโดยอิงตาม drbd+ocfs2
หนึ่งในวิธีแก้ปัญหาที่สะดวกที่สุดสำหรับเราคือลิงก์ ocfs2+drbd. ตอนนี้เราจะบอกคุณว่าคุณสามารถปรับใช้พื้นที่จัดเก็บข้อมูลที่ใช้ร่วมกันอย่างรวดเร็วสำหรับเซิร์ฟเวอร์สองเครื่องโดยอิงตามฐานข้อมูลโซลูชันได้อย่างไร แต่ก่อนอื่น เล็กน้อยเกี่ยวกับส่วนประกอบ:
ดีอาร์บีดี - ระบบจัดเก็บข้อมูลจากการกระจาย Linux มาตรฐานที่ช่วยให้คุณสามารถจำลองข้อมูลระหว่างเซิร์ฟเวอร์เป็นบล็อกได้ แอปพลิเคชันหลักคือการสร้างพื้นที่จัดเก็บข้อมูลที่ทนทานต่อข้อผิดพลาด
โอซีเอฟเอส2 - ระบบไฟล์ที่ให้การใช้พื้นที่เก็บข้อมูลเดียวกันร่วมกันโดยหลายระบบ รวมอยู่ในการแจกจ่าย Linux และเป็นโมดูลเคอร์เนลและเครื่องมือพื้นที่ผู้ใช้สำหรับการทำงานกับ FS OCFS2 สามารถใช้ได้ไม่เพียงแต่บน DRBD เท่านั้น แต่ยังสามารถใช้บน iSCSI ด้วยการเชื่อมต่อหลายรายการได้ด้วย ในตัวอย่างของเรา เราใช้ DRBD
การดำเนินการทั้งหมดดำเนินการบนเซิร์ฟเวอร์ Ubuntu 18.04 ในการกำหนดค่าขั้นต่ำ
ขั้นตอนที่ 1 กำหนดค่า DRBD:
ในไฟล์ /etc/drbd.d/drbd0.res เราอธิบายอุปกรณ์บล็อกเสมือนของเรา /dev/drbd0:
resource drbd0 {
syncer { rate 1000M; }
net {
allow-two-primaries;
after-sb-0pri discard-zero-changes;
after-sb-1pri discard-secondary;
after-sb-2pri disconnect;
}
startup { become-primary-on both; }
on drbd1 {
meta-disk internal;
device /dev/drbd0;
disk /dev/vdb1;
address 10.10.10.192:7789;
}
on drbd2 {
meta-disk internal;
device /dev/drbd0;
disk /dev/vdb1;
address 10.10.10.193:7789;
}
}
เมตาดิสก์ภายใน — ใช้อุปกรณ์บล็อกเดียวกันเพื่อจัดเก็บข้อมูลเมตา
อุปกรณ์ /dev/drbd0 — ใช้ /dev/drbd0 เป็นเส้นทางไปยังโวลุ่ม drbd
ดิสก์ /dev/vdb1 - ใช้ /dev/vdb1
syncer { อัตรา 1000M; } — ใช้แบนด์วิธช่องสัญญาณกิกะบิต
อนุญาตให้สองพรรค - ตัวเลือกสำคัญที่อนุญาตให้ยอมรับการเปลี่ยนแปลงบนเซิร์ฟเวอร์หลักสองเครื่อง
after-sb-0pri, after-sb-1pri, after-sb-2pri — ตัวเลือกที่รับผิดชอบการกระทำของโหนดเมื่อตรวจพบ splitbrain รายละเอียดเพิ่มเติมสามารถพบได้ในเอกสารประกอบ
กลายเป็นหลักทั้งสอง — ตั้งค่าโหนดทั้งสองเป็นโหนดหลัก
ในกรณีของเรา เรามี VM สองเครื่องที่เหมือนกันทุกประการ โดยมีเครือข่ายเสมือนเฉพาะที่มีปริมาณงาน 10 กิกะบิต
ในตัวอย่างของเรา ชื่อเครือข่ายของโหนดคลัสเตอร์สองโหนดคือ drbd1 และ drbd2 เพื่อการทำงานที่เหมาะสม คุณจะต้องจับคู่ชื่อและที่อยู่ IP ของโฮสต์ใน /etc/hosts
10.10.10.192 drbd1
10.10.10.193 drbd2
ขั้นตอนที่ 2 ตั้งค่าโหนด:
บนเซิร์ฟเวอร์ทั้งสองที่เราใช้งาน:
drbdadm create-md drbd0
modprobe drbd
drbdadm up drbd0
cat /proc/drbd
เราได้รับสิ่งต่อไปนี้:
คุณสามารถเริ่มการซิงโครไนซ์ได้ ในโหนดแรกคุณต้องดำเนินการ:
drbdadm primary --force drbd0
มาดูสถานะกัน:
cat /proc/drbd
เยี่ยมมาก การซิงโครไนซ์ได้เริ่มต้นขึ้นแล้ว เรารอจนจบแล้วดูภาพ:
ขั้นตอนที่ 3 เริ่มการซิงโครไนซ์บนโหนดที่สอง:
drbdadm primary --force drbd0
เราได้รับสิ่งต่อไปนี้:
ตอนนี้เราสามารถเขียนถึง drbd จากเซิร์ฟเวอร์สองเครื่องได้แล้ว
ขั้นตอนที่ 4 ติดตั้งและกำหนดค่า ocfs2
เราจะใช้การกำหนดค่าที่ค่อนข้างเล็กน้อย:
cluster:
node_count = 2
name = ocfs2cluster
node:
number = 1
cluster = ocfs2cluster
ip_port = 7777
ip_address = 10.10.10.192
name = drbd1
node:
number = 2
cluster = ocfs2cluster
ip_port = 7777
ip_address = 10.10.10.193
name = drbd2
มันจำเป็นต้องเขียนลงไป. /etc/ocfs2/cluster.conf บนทั้งสองโหนด
เราสร้าง FS บน drbd0 บนโหนดใดก็ได้:
mkfs.ocfs2 -L "testVol" /dev/drbd0
ที่นี่เราสร้างระบบไฟล์ที่มีป้ายกำกับ testVol บน drbd0 โดยใช้พารามิเตอร์เริ่มต้น
ใน /etc/default/o2cb คุณต้องตั้งค่า (เช่นเดียวกับในไฟล์กำหนดค่าของเรา)
O2CB_ENABLED=true
O2CB_BOOTCLUSTER=ocfs2cluster
และดำเนินการในแต่ละโหนด:
o2cb register-cluster ocfs2cluster
จากนั้นเราจะเปิดและเพิ่มหน่วยทั้งหมดที่เราต้องการในการทำงานอัตโนมัติ:
systemctl enable drbd o2cb ocfs2
systemctl start drbd o2cb ocfs2
บางส่วนจะทำงานอยู่แล้วในระหว่างขั้นตอนการตั้งค่า
ขั้นตอนที่ 5 เพิ่มจุดเมานต์ให้กับ fstab บนทั้งสองโหนด:
/dev/drbd0 /media/shared ocfs2 defaults,noauto,heartbeat=local 0 0
ไดเรกทอรี /สื่อ/แบ่งปัน จะต้องสร้างไว้ล่วงหน้า
ที่นี่เราใช้ตัวเลือก noauto ซึ่งหมายความว่าไฟล์จะไม่ถูกเมาท์เมื่อเริ่มต้น (ฉันชอบเมานต์ไฟล์เครือข่ายผ่าน systemd) และ heartbeat=local ซึ่งหมายถึงการใช้บริการ heartbeat บนแต่ละโหนด นอกจากนี้ยังมีการเต้นของหัวใจระดับโลกซึ่งเหมาะสำหรับคลัสเตอร์ขนาดใหญ่มากกว่า
ถัดไปคุณสามารถเมานต์ /สื่อ/แบ่งปัน และตรวจสอบการซิงโครไนซ์เนื้อหา
Done! ด้วยเหตุนี้ เราจึงได้รับพื้นที่จัดเก็บข้อมูลที่ทนทานต่อข้อผิดพลาดไม่มากก็น้อยพร้อมความสามารถในการปรับขนาดและประสิทธิภาพที่เหมาะสม
ที่มา: will.com