พื้นที่เก็บข้อมูลสำรองสำหรับเครื่องเสมือนนับพันโดยใช้เครื่องมือฟรี

พื้นที่เก็บข้อมูลสำรองสำหรับเครื่องเสมือนนับพันโดยใช้เครื่องมือฟรี

สวัสดี ฉันเพิ่งพบปัญหาที่น่าสนใจ: การตั้งค่าพื้นที่เก็บข้อมูลสำหรับการสำรองข้อมูลอุปกรณ์บล็อกจำนวนมาก

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

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

มาดูกันว่ามีทางเลือกอะไรบ้าง:

ลบรหัส — คล้ายกับ RAID5, RAID6 แต่มีระดับพาริตีที่กำหนดค่าได้ ในกรณีนี้ การจองไม่ได้ดำเนินการแบบบล็อกต่อบล็อก แต่สำหรับแต่ละออบเจ็กต์แยกกัน วิธีที่ง่ายที่สุดในการลองลบโค้ดคือการขยาย มินิโอ.

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

พื้นที่เก็บข้อมูลสำรองสำหรับเครื่องเสมือนนับพันโดยใช้เครื่องมือฟรี

พื้นที่เก็บข้อมูลสำรองสำหรับเครื่องเสมือนนับพันโดยใช้เครื่องมือฟรี

เซิร์ฟเวอร์พร้อมใช้งาน ฟูจิตสึ ไพรเมอร์จี RX300 S7 ด้วยโปรเซสเซอร์ ซีพียู Intel Xeon E5-2650L 0 @ 1.80GHzแรมเก้าแท่ง Samsung DDR3-1333 8Gb PC3L-10600R ECC ลงทะเบียน (M393B1K70DH0-YH9), ชั้นวางดิสก์ ซูเปอร์ไมโคร ซูเปอร์แชสซิส 847E26-RJBOD1, เชื่อมต่อผ่าน ตัวขยาย LSI SAS2X36 แบบคู่ และ 45 แผ่น ซีเกจ ST6000NM0115-1YZ110 บน 6TB แต่ละ

ก่อนที่เราจะตัดสินใจอะไร เราต้องทดสอบทุกอย่างอย่างเหมาะสมเสียก่อน

เพื่อทำเช่นนี้ ฉันได้เตรียมและทดสอบการกำหนดค่าต่างๆ ในการทำเช่นนี้ ฉันใช้ minio ซึ่งทำหน้าที่เป็นแบ็กเอนด์ S3 และเปิดใช้งานในโหมดต่างๆ โดยมีจำนวนเป้าหมายที่แตกต่างกัน

โดยพื้นฐานแล้ว เคส minio ได้รับการทดสอบในการลบการเข้ารหัสเทียบกับการโจมตีซอฟต์แวร์ด้วยจำนวนดิสก์และความเท่าเทียมกันของดิสก์ที่เท่ากัน ซึ่งได้แก่: RAID6, RAIDZ2 และ DRAID2

สำหรับการอ้างอิง: เมื่อคุณเปิดใช้งาน minio โดยมีเป้าหมายเดียว minio จะทำงานในโหมดเกตเวย์ S3 โดยส่งมอบระบบไฟล์ในเครื่องของคุณในรูปแบบของพื้นที่จัดเก็บข้อมูล S3 หากคุณเปิด minio โดยระบุหลายเป้าหมาย โหมด Erasure Coding จะเปิดโดยอัตโนมัติ ซึ่งจะกระจายข้อมูลระหว่างเป้าหมายของคุณในขณะที่ให้ความทนทานต่อข้อผิดพลาด

ตามค่าเริ่มต้น minio จะแบ่งเป้าหมายออกเป็นกลุ่มๆ ละ 16 ดิสก์ โดยมี 2 พาริตีต่อกลุ่ม เหล่านั้น. ดิสก์สองตัวสามารถทำงานล้มเหลวพร้อมกันได้โดยไม่สูญเสียข้อมูล

ในการทดสอบประสิทธิภาพ ฉันใช้ดิสก์ 16 ตัว ตัวละ 6TB และเขียนออบเจ็กต์ขนาดเล็กขนาด 1MB ซึ่งอธิบายการโหลดในอนาคตของเราได้อย่างแม่นยำที่สุด เนื่องจากเครื่องมือสำรองข้อมูลสมัยใหม่ทั้งหมดแบ่งข้อมูลออกเป็นบล็อกหลายเมกะไบต์และเขียนในลักษณะนี้

ในการดำเนินการวัดประสิทธิภาพ เราใช้ยูทิลิตี้ s3bench ซึ่งเปิดใช้งานบนเซิร์ฟเวอร์ระยะไกล และส่งอ็อบเจ็กต์ดังกล่าวนับหมื่นไปยัง minio ในหลายร้อยเธรด หลังจากนั้นฉันก็พยายามขอพวกเขากลับด้วยวิธีเดียวกัน

ผลลัพธ์การวัดประสิทธิภาพจะแสดงในตารางต่อไปนี้:

พื้นที่เก็บข้อมูลสำรองสำหรับเครื่องเสมือนนับพันโดยใช้เครื่องมือฟรี

ดังที่เราเห็น minio ในโหมดการเขียนโค้ดการลบข้อมูลของตัวเองจะทำงานได้แย่กว่าการเขียนมากกว่า minio ที่ทำงานบนซอฟต์แวร์ RAID6, RAIDZ2 และ DRAID2 ในการกำหนดค่าเดียวกันอย่างมาก

แยกฉัน ถาม ทดสอบ minio บน ext4 กับ XFS น่าประหลาดใจที่ XFS ทำงานช้ากว่า ext4 มากสำหรับประเภทงานของฉัน

ในการทดสอบชุดแรก Mdadm แสดงให้เห็นถึงความเหนือกว่า ZFS แต่ในภายหลัง กรัมเมลิคอฟ แนะนำคุณสามารถปรับปรุงประสิทธิภาพ ZFS ได้โดยการตั้งค่าตัวเลือกต่อไปนี้:

xattr=sa atime=off recordsize=1M

และหลังจากนั้นการทดสอบกับ ZFS ก็ดีขึ้นมาก

คุณยังสังเกตได้ว่า DRAID ไม่ได้ให้ประสิทธิภาพที่เหนือกว่า RAIDZ มากนัก แต่ในทางทฤษฎีแล้วควรจะปลอดภัยกว่ามาก

ในการทดสอบสองครั้งล่าสุด ฉันยังพยายามถ่ายโอนข้อมูลเมตา (พิเศษ) และ ZIL (บันทึก) จาก SSD ไปยังมิเรอร์ แต่การลบข้อมูลเมตาไม่ได้ให้ความเร็วในการบันทึกเพิ่มขึ้นมากนัก และเมื่อลบ ZIL ของฉัน SSDSC2KI128G8 ทะลุเพดานด้วยการใช้งาน 100% ดังนั้นฉันจึงถือว่าการทดสอบนี้ล้มเหลว ฉันไม่ได้ยกเว้นว่าหากฉันมีไดรฟ์ SSD ที่เร็วกว่า บางทีนี่อาจปรับปรุงผลลัพธ์ของฉันได้อย่างมาก แต่น่าเสียดายที่ฉันไม่มีมัน

ในที่สุด ฉันตัดสินใจใช้ DRAID และถึงแม้จะมีสถานะเบต้า แต่ก็เป็นโซลูชันการจัดเก็บข้อมูลที่เร็วและมีประสิทธิภาพมากที่สุดในกรณีของเรา

ฉันสร้าง DRAID2 แบบธรรมดาในการกำหนดค่าโดยมีสามกลุ่มและอะไหล่สำรองสองชุด:

# zpool status data
  pool: data
 state: ONLINE
  scan: none requested
config:

    NAME                 STATE     READ WRITE CKSUM
    data                 ONLINE       0     0     0
      draid2:3g:2s-0     ONLINE       0     0     0
        sdy              ONLINE       0     0     0
        sdam             ONLINE       0     0     0
        sdf              ONLINE       0     0     0
        sdau             ONLINE       0     0     0
        sdab             ONLINE       0     0     0
        sdo              ONLINE       0     0     0
        sdw              ONLINE       0     0     0
        sdak             ONLINE       0     0     0
        sdd              ONLINE       0     0     0
        sdas             ONLINE       0     0     0
        sdm              ONLINE       0     0     0
        sdu              ONLINE       0     0     0
        sdai             ONLINE       0     0     0
        sdaq             ONLINE       0     0     0
        sdk              ONLINE       0     0     0
        sds              ONLINE       0     0     0
        sdag             ONLINE       0     0     0
        sdi              ONLINE       0     0     0
        sdq              ONLINE       0     0     0
        sdae             ONLINE       0     0     0
        sdz              ONLINE       0     0     0
        sdan             ONLINE       0     0     0
        sdg              ONLINE       0     0     0
        sdac             ONLINE       0     0     0
        sdx              ONLINE       0     0     0
        sdal             ONLINE       0     0     0
        sde              ONLINE       0     0     0
        sdat             ONLINE       0     0     0
        sdaa             ONLINE       0     0     0
        sdn              ONLINE       0     0     0
        sdv              ONLINE       0     0     0
        sdaj             ONLINE       0     0     0
        sdc              ONLINE       0     0     0
        sdar             ONLINE       0     0     0
        sdl              ONLINE       0     0     0
        sdt              ONLINE       0     0     0
        sdah             ONLINE       0     0     0
        sdap             ONLINE       0     0     0
        sdj              ONLINE       0     0     0
        sdr              ONLINE       0     0     0
        sdaf             ONLINE       0     0     0
        sdao             ONLINE       0     0     0
        sdh              ONLINE       0     0     0
        sdp              ONLINE       0     0     0
        sdad             ONLINE       0     0     0
    spares
      s0-draid2:3g:2s-0  AVAIL   
      s1-draid2:3g:2s-0  AVAIL   

errors: No known data errors

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

เบนจิ แบ็คอัพ - ส้อม แบคกี้2ซึ่งเป็นโซลูชันพิเศษสำหรับการสำรองข้อมูลอุปกรณ์แบบบล็อก มีการผสานรวมอย่างแน่นหนากับ Ceph สามารถสร้างความแตกต่างระหว่างสแน็ปช็อตและสร้างการสำรองข้อมูลส่วนเพิ่มจากสแนปชอตเหล่านั้นได้ รองรับแบ็กเอนด์พื้นที่จัดเก็บข้อมูลจำนวนมาก รวมถึงทั้งภายในเครื่องและ S3 ต้องใช้ฐานข้อมูลแยกต่างหากเพื่อจัดเก็บตารางแฮชการขจัดข้อมูลซ้ำซ้อน ข้อเสีย: เขียนด้วย python มี cli ที่ไม่ตอบสนองเล็กน้อย

การสำรองข้อมูลของ Borg - ส้อม ห้องเพดานซึ่งเป็นเครื่องมือสำรองข้อมูลที่เป็นที่รู้จักมายาวนานและผ่านการพิสูจน์แล้ว สามารถสำรองข้อมูลและขจัดข้อมูลซ้ำซ้อนได้ดี สามารถบันทึกข้อมูลสำรองทั้งภายในเครื่องและไปยังเซิร์ฟเวอร์ระยะไกลผ่าน scp สามารถบล็อกอุปกรณ์สำรองข้อมูลได้หากเปิดใช้งานพร้อมกับแฟล็ก --specialข้อเสียประการหนึ่ง: เมื่อสร้างการสำรองข้อมูลที่เก็บจะถูกบล็อกโดยสมบูรณ์ ดังนั้นจึงแนะนำให้สร้างที่เก็บแยกต่างหากสำหรับเครื่องเสมือนแต่ละเครื่อง โดยหลักการแล้วนี่ไม่ใช่ปัญหา โชคดีที่สร้างได้ง่ายมาก

พักผ่อน เป็นโครงการที่กำลังพัฒนาอย่างแข็งขัน เขียนได้ทันที ค่อนข้างรวดเร็ว และรองรับแบ็กเอนด์พื้นที่เก็บข้อมูลจำนวนมาก รวมถึงพื้นที่จัดเก็บในตัวเครื่อง, scp, S3 และอื่นๆ อีกมากมาย แยกกันฉันอยากจะทราบว่ามีการสร้างขึ้นเป็นพิเศษ ส่วนที่เหลือเซิร์ฟเวอร์ สำหรับเรสติค ซึ่งช่วยให้คุณส่งออกพื้นที่เก็บข้อมูลเพื่อใช้จากระยะไกลได้อย่างรวดเร็ว จากทั้งหมดข้างต้น ฉันชอบมันมากที่สุด สามารถสำรองข้อมูลจาก stdin แทบไม่มีข้อเสียที่เห็นได้ชัดเจน แต่มีคุณสมบัติหลายประการ:

  • ประการแรก ฉันพยายามใช้มันในโหมดพื้นที่เก็บข้อมูลทั่วไปสำหรับเครื่องเสมือนทั้งหมด (เช่น Benji) และมันก็ทำงานได้ค่อนข้างดี แต่การดำเนินการกู้คืนใช้เวลานานมาก เพราะ... ทุกครั้งก่อนที่จะกู้คืน retic จะพยายามอ่านข้อมูลเมตาของการสำรองข้อมูลทั้งหมด ปัญหานี้แก้ไขได้อย่างง่ายดาย เช่นเดียวกับบอร์ก โดยการสร้างพื้นที่เก็บข้อมูลแยกต่างหากสำหรับเครื่องเสมือนแต่ละเครื่อง วิธีการนี้ได้พิสูจน์แล้วว่ามีประสิทธิภาพมากในการจัดการการสำรองข้อมูลเช่นกัน ที่เก็บข้อมูลที่แยกกันอาจมีรหัสผ่านแยกต่างหากสำหรับการเข้าถึงข้อมูล และเราก็ไม่ต้องกลัวว่าที่เก็บข้อมูลทั่วโลกอาจเสียหายได้ คุณสามารถวางไข่ที่เก็บข้อมูลใหม่ได้อย่างง่ายดายเช่นเดียวกับในการสำรองข้อมูลบอร์ก

    ไม่ว่าในกรณีใด การขจัดข้อมูลซ้ำซ้อนจะดำเนินการโดยสัมพันธ์กับการสำรองข้อมูลเวอร์ชันก่อนหน้าเท่านั้น การสำรองข้อมูลก่อนหน้านี้ถูกกำหนดโดยเส้นทางสำหรับการสำรองข้อมูลที่ระบุ ดังนั้นหากคุณสำรองข้อมูลอ็อบเจ็กต์อื่นจาก stdin ไปยังที่เก็บทั่วไป อย่าลืมระบุ ตัวเลือก --stdin-filenameหรือระบุตัวเลือกอย่างชัดเจนในแต่ละครั้ง --parent.

  • ประการที่สอง การกู้คืน stdout ใช้เวลานานกว่าการกู้คืนระบบไฟล์มากเนื่องจากมีลักษณะแบบขนาน ในอนาคต เราวางแผนที่จะเพิ่มการสนับสนุนที่ใกล้ชิดยิ่งขึ้นสำหรับการสำรองข้อมูลสำหรับอุปกรณ์บล็อก

  • ประการที่สาม แนะนำให้ใช้ในปัจจุบัน รุ่นจากอาจารย์, เพราะ เวอร์ชัน 0.9.6 มีข้อบกพร่องในการกู้คืนไฟล์ขนาดใหญ่เป็นเวลานาน

เพื่อทดสอบประสิทธิภาพของการสำรองข้อมูลและความเร็วในการเขียน / กู้คืนจากข้อมูลสำรอง ฉันได้สร้างพื้นที่เก็บข้อมูลแยกต่างหากและพยายามสำรองข้อมูลอิมเมจขนาดเล็กของเครื่องเสมือน (21 GB) ทำการสำรองข้อมูลสองครั้งโดยไม่ต้องเปลี่ยนต้นฉบับ โดยใช้แต่ละวิธีแก้ไขปัญหาที่ระบุไว้เพื่อตรวจสอบความเร็ว/ช้าลงของการคัดลอกข้อมูลที่กรองข้อมูลซ้ำออกแล้ว

พื้นที่เก็บข้อมูลสำรองสำหรับเครื่องเสมือนนับพันโดยใช้เครื่องมือฟรี

ดังที่เราเห็น Borg Backup มีอัตราส่วนประสิทธิภาพการสำรองข้อมูลเริ่มต้นที่ดีที่สุด แต่จะด้อยกว่าทั้งในแง่ของความเร็วในการเขียนและกู้คืน

Restic กลายเป็นว่าเร็วกว่า Benji Backup แต่ใช้เวลานานกว่าในการกู้คืนเป็น stdout และน่าเสียดายที่ยังไม่ทราบวิธีเขียนโดยตรงไปยังอุปกรณ์บล็อก

หลังจากชั่งน้ำหนักข้อดีข้อเสียทั้งหมดแล้ว ฉันจึงตัดสินใจดำเนินการต่อ พักผ่อน с ส่วนที่เหลือเซิร์ฟเวอร์ เป็นโซลูชันสำรองข้อมูลที่สะดวกและมีแนวโน้มมากที่สุด

พื้นที่เก็บข้อมูลสำรองสำหรับเครื่องเสมือนนับพันโดยใช้เครื่องมือฟรี

ใน screencast นี้ คุณสามารถดูได้ว่าช่องสัญญาณ 10 กิกะบิตถูกนำมาใช้อย่างสมบูรณ์อย่างไรในระหว่างการสำรองข้อมูลหลายรายการที่ทำงานพร้อมกัน เป็นที่น่าสังเกตว่าการรีไซเคิลดิสก์ไม่เพิ่มขึ้นเกิน 30%

ฉันพอใจมากกับโซลูชันที่ฉันได้รับ!

ที่มา: will.com

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