พื้นที่เก็บข้อมูลคลัสเตอร์สำหรับเว็บคลัสเตอร์ขนาดเล็กที่ใช้ drbd+ocfs2

สิ่งที่เราจะพูดถึง:
วิธีปรับใช้พื้นที่จัดเก็บข้อมูลที่ใช้ร่วมกันอย่างรวดเร็วสำหรับเซิร์ฟเวอร์สองเครื่องโดยใช้โซลูชัน 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

พื้นที่เก็บข้อมูลคลัสเตอร์สำหรับเว็บคลัสเตอร์ขนาดเล็กที่ใช้ drbd+ocfs2

modprobe drbd
drbdadm up drbd0
cat /proc/drbd

เราได้รับสิ่งต่อไปนี้:

พื้นที่เก็บข้อมูลคลัสเตอร์สำหรับเว็บคลัสเตอร์ขนาดเล็กที่ใช้ drbd+ocfs2

คุณสามารถเริ่มการซิงโครไนซ์ได้ ในโหนดแรกคุณต้องดำเนินการ:

drbdadm primary --force drbd0

มาดูสถานะกัน:

cat /proc/drbd

พื้นที่เก็บข้อมูลคลัสเตอร์สำหรับเว็บคลัสเตอร์ขนาดเล็กที่ใช้ drbd+ocfs2

เยี่ยมมาก การซิงโครไนซ์ได้เริ่มต้นขึ้นแล้ว เรารอจนจบแล้วดูภาพ:

พื้นที่เก็บข้อมูลคลัสเตอร์สำหรับเว็บคลัสเตอร์ขนาดเล็กที่ใช้ drbd+ocfs2

ขั้นตอนที่ 3 เริ่มการซิงโครไนซ์บนโหนดที่สอง:

drbdadm primary --force drbd0

เราได้รับสิ่งต่อไปนี้:

พื้นที่เก็บข้อมูลคลัสเตอร์สำหรับเว็บคลัสเตอร์ขนาดเล็กที่ใช้ drbd+ocfs2

ตอนนี้เราสามารถเขียนถึง 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 โดยใช้พารามิเตอร์เริ่มต้น

พื้นที่เก็บข้อมูลคลัสเตอร์สำหรับเว็บคลัสเตอร์ขนาดเล็กที่ใช้ drbd+ocfs2

ใน /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

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