ZFS หรือ LVM หรือ MD ข้อเสนอการจัดเก็บข้อมูลที่ต่างกันซ้ำซ้อน


10

ฉันมีปัญหาเดียวกันที่คนส่วนใหญ่มี: วิธีการสร้างโซลูชันการจัดเก็บข้อมูลส่วนบุคคลที่เชื่อถือได้ด้วยความจริงที่ว่า:

  1. ฮาร์ดไดรฟ์ล้มเหลวด้วยระเบียบที่น่ากลัว การสูญเสียไฟล์ไม่สามารถยอมรับได้
  2. ฉันจะซื้อ HDD ใหม่เป็นครั้งคราว ราคา / GB ที่ดีที่สุดย่อมแตกต่างจากการซื้อ HDD ครั้งล่าสุด
  3. 2 หมายความว่าเมื่อเวลาผ่านไปฉันมีคอลเลกชันของดิสก์ที่ต่างกัน ฉันต้องการใช้มันทั้งหมดและโดยทั่วไปแล้วดิสก์ที่ล้มเหลวจะถูกแทนที่ด้วยดิสก์ขนาดใหญ่กว่า

  4. ความสมบูรณ์ของข้อมูลและความน่าเชื่อถือมีความสำคัญต่อฉันมากกว่าความเร็ว

ดังนั้นหลังจากที่ต่อสู้กับปัญหานี้มาสองสามวัน (และในหัวของฉันมาหลายปี) ฉันเสนอวิธีแก้ไขปัญหาต่อไปนี้ ฉันจะอธิบายวิธีการแก้ปัญหาที่ฉันได้ทดสอบบนพื้นฐานของ linux ZFS ซึ่งมีอยู่ใน Ubuntu PPAแต่สามารถใช้ LVM, MD และ btrfs เพื่อให้บรรลุเป้าหมายเดียวกัน สำหรับสิ่งนี้ฉันจะใช้ RAID1 (ZFS mirror vdevs)

  1. เมื่อกำหนดชุดไดรฟ์ของคุณให้จัดกลุ่มดิสก์เหล่านั้นเป็นสองชุดเช่นความจุของแต่ละชุดจะใกล้เคียงกับชุดอื่นมากที่สุด
  2. แบ่งพาร์ติชันดิสก์ที่มีขนาดใหญ่กว่าซึ่งมีพาร์ติชันที่มีขนาดเท่ากันกับหนึ่งในดิสก์ที่มีขนาดเล็กกว่าในกลุ่มอื่น
  3. สร้างมิเรอร์ vdevs เพื่อให้แต่ละดิสก์มีมิเรอร์บนดิสก์อื่น

ตัวอย่างเช่นลองพิจารณาชุดดิสก์ของไดรฟ์ 2TB ใหม่ไดรฟ์ 750GB ที่เก่ากว่าไดรฟ์ 400GB 2 อันที่เก่ากว่าและไดรฟ์ 500GB ที่เก่ากว่าหนึ่งตัว การแบ่งพาร์ติชั่นที่มิร์เรอร์ที่เหมาะสมมีพื้นที่ใช้งาน 2TB และอธิบายไว้ในแผนภาพต่อไปนี้โดยที่ ':' แยกพาร์ติชั่นและ '|' แยกดิสก์:

+------------------------------------------------------------------+
| 2TB (sda1)        : (sda2)       : (sda3)       : (sda4)         |
+------------------------------------------------------------------+--+
| 750 GB (sdb)      | 400 GB (sdc) | 400 GB (sdd) | 500 GB (sde1)  :XX|
+---------------------------------------------------------------------+

สร้าง zpool ของคุณเป็น

zpool create archive mirror /dev/sda1 /dev/sdb mirror /dev/sda2 /dev/sdc mirror /dev/sda3 /dev/sdd mirror /dev/sda4 /dev/sde1

สิ่งนี้สร้าง vdevs ที่มิร์เรอร์ 4 อัน หากดิสก์ตัวใดตัวหนึ่งล้มเหลวสามารถเปลี่ยนได้ (ด้วยดิสก์ขนาดใดก็ได้) และแบ่งพาร์ติชันเพื่อสร้างพาร์ติชันที่หายไปใหม่ มันเป็นสิ่งสำคัญที่ ZFS vdevs สามารถเพิ่มไปยังสระว่ายน้ำแต่ไม่ได้เอาออก ดังนั้นหากเป็นไปได้เมื่อมีการซื้อไดรฟ์ใหม่คุณต้องการจัดเรียง vdev ที่มีอยู่ใหม่ สมมติว่าการซื้อครั้งต่อไปคือไดรฟ์ 3TB การกำหนดค่าที่ดีที่สุดของคุณคือ 3.5TB ที่ใช้งานได้ตามที่อธิบายไว้ในแผนภาพต่อไปนี้ ตอนนี้เป็น 5 vdev สิ่งนี้สามารถทำได้โดยการแบ่งพาร์ติชันที่เหมาะสมและล้มเหลวและแบ่งพาร์ติชันอย่างต่อเนื่อง

+--------------------------------------------------------------+-------------+
| 3 TB (sdf1)       : (sdf2)      : (sdf3)      : (sdf4)       | 500GB (sde) |
+--------------------------------------------------------------+-------------+-+
| 2TB (sda1)        | 400GB (sdb) | 400GB (sdc) | 750GB (sdd1) : (sdd2)      :X| 
+------------------------------------------------------------------------------+

การดูแลรักษาการจับคู่ของไดรฟ์ที่ทำมิเรอร์นี้สามารถทำได้ด้วย LVM หรือด้วย MD RAID แนวคิดที่จะทำให้แน่ใจว่าแต่ละไดรฟ์นั้นมีไดรฟ์มิรเรอร์หรือพาร์ริชั่นอยู่เสมอ เนื่องจากทุกอย่างถูกสะท้อนเรามีอิสระที่จะล้มเหลวของไดรฟ์และจัดเรียงพาร์ติชันใหม่เมื่อมีการเพิ่มหรือลบไดรฟ์ การใช้ LVM หรือ MD เป็นไปได้ที่จะลบไดรฟ์และลดขนาดอาร์เรย์ถ้าต้องการด้วยค่าใช้จ่ายของเครื่องมือการกู้คืนที่ซับซ้อนน้อยกว่าใน ZFS เทียบกับ BTRFS

ความคิดเห็นใด ๆ เกี่ยวกับขั้นตอนนี้? สคริปต์ที่ดีสามารถจัดการกับการจัดสรรแบบไม่สูญเสียและจัดเรียงไดรฟ์ใหม่ได้ ความคิดเห็นใด ๆ เกี่ยวกับ LVM กับ MD เทียบกับ ZFS? ความคิดเห็นใด ๆ เกี่ยวกับประสิทธิภาพของอาร์เรย์ที่มีการแบ่งพาร์ติชันแปลก ๆ ? การจัดเรียงข้อมูลข้ามพาร์ติชั่นหลาย ๆ อันบนไดรฟ์เดียวกันจะทำให้เกิดการค้นหาส่วนหัวที่มากเกินไปและความล้มเหลวก่อนหน้าได้หรือไม่?

ผู้พัฒนา BTRFS: ทุกคนต้องการสิ่งนี้และ LVM หรือ MD นั้นไม่จำเป็นทางเทคนิค (และในความเห็นของฉันถือว่าเหมาะสมที่สุด) ทำให้ง่ายต่อการบำรุงรักษาอาเรย์ที่แตกต่างกันซ้ำซ้อนจะเป็นคุณสมบัตินักฆ่าสำหรับ btrfs มันแฮ็คกับ LVM / MD / ZFS เหมือนเดิม การย่อ resliver / resync ให้น้อยที่สุดนั้นเป็นที่ต้องการอย่างมาก

ใช่นี่เป็น Drobo ของคนจน ไม่ควรใช้ฮาร์ดแวร์เฉพาะสำหรับสิ่งนั้น ...

คำตอบ:


4

ฉันได้ทดสอบสิ่งนี้กับ ZFS และประสิทธิภาพการเขียนประมาณครึ่งหนึ่งที่ควรจะเป็นเพราะ ZFS กระจายอ่านและเขียน vdevs ทั้งหมด (ดังนั้นการแบ่ง I / O ไปยังหลาย ๆ ที่บนดิสก์เดียวกัน) ดังนั้นความเร็วจะถูก จำกัด ด้วยความเร็วของดิสก์ที่มีพาร์ติชั่นส่วนใหญ่ ความเร็วในการอ่านน่าจะเท่ากับแบนด์วิธของดิสก์ โปรดสังเกตว่าพาร์ติชัน ZFS หนึ่งคู่บนดิสก์สองตัวมีความเร็วในการอ่านเป็นสองเท่าของดิสก์เดี่ยวเนื่องจากสามารถอ่านจากดิสก์แบบขนานได้

การใช้ MD LINEAR arrays หรือ LVM เพื่อสร้างผลลัพธ์สองส่วนแบ่งเป็นสองเท่าของประสิทธิภาพการเขียนเมื่อเทียบกับข้อเสนอ ZFS ข้างต้น แต่มีข้อเสียที่ LVM และ MD ไม่ทราบว่าเก็บข้อมูลไว้ที่ไหน ในกรณีที่เกิดความล้มเหลวของดิสก์หรือการอัพเกรดด้านหนึ่งของอาเรย์จะต้องถูกทำลายและทำการ resynced / reslivered อีกครั้งตามด้วยอีกด้านหนึ่ง (เช่น resync / resliver ต้องคัดลอก 2 * (ขนาดของอาร์เรย์))

ดังนั้นดูเหมือนว่าทางออกที่ดีที่สุดคือการสร้าง ZFS mirror vdev หนึ่งชิ้นบนอุปกรณ์ LVM หรือ MD LINEAR สองตัวซึ่งรวมดิสก์ไว้ใน "ครึ่ง" ที่เท่ากัน สิ่งนี้มีแบนด์วิดท์การอ่านประมาณสองเท่าของดิสก์ใดดิสก์หนึ่งและการเขียนแบนด์วิดท์จะเท่ากับแบนด์วิดท์ดิสก์แต่ละแผ่น

การใช้ BTRFS raid1 แทน ZFS ก็ใช้งานได้ แต่มีแบนด์วิดท์การอ่านครึ่งหนึ่งเนื่องจาก ZFS กระจายการอ่านเพื่อเพิ่มแบนด์วิดท์เป็นสองเท่าในขณะที่มันปรากฏว่า BTRFS ไม่ได้ (ตามการทดสอบของฉัน) BTRFS มีข้อดีที่พาร์ทิชันสามารถหดได้ในขณะที่พวกเขาไม่สามารถใช้ ZFS ได้ (ดังนั้นหากหลังจากความล้มเหลวคุณมีพื้นที่ว่างจำนวนมากด้วย BTRFS เป็นไปได้ที่จะสร้างอาเรย์ซ้ำซ้อนที่มีขนาดเล็กลงโดยลดขนาดระบบ

สิ่งนี้น่าเบื่อที่ต้องทำด้วยมือ แต่ใช้งานง่ายด้วยสคริปต์ที่ดี

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.