สวัสดี ฉันเพิ่งพบปัญหาที่น่าสนใจ: การตั้งค่าพื้นที่เก็บข้อมูลสำหรับการสำรองข้อมูลอุปกรณ์บล็อกจำนวนมาก
ทุกสัปดาห์เราสำรองข้อมูลเครื่องเสมือนทั้งหมดในคลาวด์ของเรา ดังนั้นเราจึงจำเป็นต้องสามารถรักษาการสำรองข้อมูลหลายพันรายการและดำเนินการได้อย่างรวดเร็วและมีประสิทธิภาพที่สุด
น่าเสียดายที่การกำหนดค่ามาตรฐาน RAID5, RAID6 ในกรณีนี้ เราจะไม่ได้รับอนุญาตให้ทำเช่นนั้น เนื่องจากกระบวนการกู้คืนบนดิสก์ขนาดใหญ่เช่นของเราจะใช้เวลานานอย่างเจ็บปวดและมีแนวโน้มว่าจะไม่มีวันสิ้นสุด
มาดูกันว่ามีทางเลือกอะไรบ้าง:
เซิร์ฟเวอร์พร้อมใช้งาน ฟูจิตสึ ไพรเมอร์จี 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 ในการกำหนดค่าเดียวกันอย่างมาก
แยกฉัน
ในการทดสอบชุดแรก Mdadm แสดงให้เห็นถึงความเหนือกว่า ZFS แต่ในภายหลัง
xattr=sa atime=off recordsize=1M
และหลังจากนั้นการทดสอบกับ ZFS ก็ดีขึ้นมาก
คุณยังสังเกตได้ว่า DRAID ไม่ได้ให้ประสิทธิภาพที่เหนือกว่า RAIDZ มากนัก แต่ในทางทฤษฎีแล้วควรจะปลอดภัยกว่ามาก
ในการทดสอบสองครั้งล่าสุด ฉันยังพยายามถ่ายโอนข้อมูลเมตา (พิเศษ) และ ZIL (บันทึก) จาก SSD ไปยังมิเรอร์ แต่การลบข้อมูลเมตาไม่ได้ให้ความเร็วในการบันทึกเพิ่มขึ้นมากนัก และเมื่อลบ ZIL ของฉัน
ในที่สุด ฉันตัดสินใจใช้ 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
โอเค เราได้จัดการพื้นที่เก็บข้อมูลแล้ว ต่อไปมาพูดถึงสิ่งที่เราจะสำรองข้อมูลกัน ที่นี่ฉันอยากจะพูดถึงวิธีแก้ปัญหาสามประการที่ฉันลองใช้งานได้ทันที และเหล่านี้คือ:
--special
ข้อเสียประการหนึ่ง: เมื่อสร้างการสำรองข้อมูลที่เก็บจะถูกบล็อกโดยสมบูรณ์ ดังนั้นจึงแนะนำให้สร้างที่เก็บแยกต่างหากสำหรับเครื่องเสมือนแต่ละเครื่อง โดยหลักการแล้วนี่ไม่ใช่ปัญหา โชคดีที่สร้างได้ง่ายมาก
-
ประการแรก ฉันพยายามใช้มันในโหมดพื้นที่เก็บข้อมูลทั่วไปสำหรับเครื่องเสมือนทั้งหมด (เช่น Benji) และมันก็ทำงานได้ค่อนข้างดี แต่การดำเนินการกู้คืนใช้เวลานานมาก เพราะ... ทุกครั้งก่อนที่จะกู้คืน retic จะพยายามอ่านข้อมูลเมตาของการสำรองข้อมูลทั้งหมด ปัญหานี้แก้ไขได้อย่างง่ายดาย เช่นเดียวกับบอร์ก โดยการสร้างพื้นที่เก็บข้อมูลแยกต่างหากสำหรับเครื่องเสมือนแต่ละเครื่อง วิธีการนี้ได้พิสูจน์แล้วว่ามีประสิทธิภาพมากในการจัดการการสำรองข้อมูลเช่นกัน ที่เก็บข้อมูลที่แยกกันอาจมีรหัสผ่านแยกต่างหากสำหรับการเข้าถึงข้อมูล และเราก็ไม่ต้องกลัวว่าที่เก็บข้อมูลทั่วโลกอาจเสียหายได้ คุณสามารถวางไข่ที่เก็บข้อมูลใหม่ได้อย่างง่ายดายเช่นเดียวกับในการสำรองข้อมูลบอร์ก
ไม่ว่าในกรณีใด การขจัดข้อมูลซ้ำซ้อนจะดำเนินการโดยสัมพันธ์กับการสำรองข้อมูลเวอร์ชันก่อนหน้าเท่านั้น การสำรองข้อมูลก่อนหน้านี้ถูกกำหนดโดยเส้นทางสำหรับการสำรองข้อมูลที่ระบุ ดังนั้นหากคุณสำรองข้อมูลอ็อบเจ็กต์อื่นจาก stdin ไปยังที่เก็บทั่วไป อย่าลืมระบุ ตัวเลือก
--stdin-filename
หรือระบุตัวเลือกอย่างชัดเจนในแต่ละครั้ง--parent
.
-
ประการที่สอง การกู้คืน stdout ใช้เวลานานกว่าการกู้คืนระบบไฟล์มากเนื่องจากมีลักษณะแบบขนาน ในอนาคต เราวางแผนที่จะเพิ่มการสนับสนุนที่ใกล้ชิดยิ่งขึ้นสำหรับการสำรองข้อมูลสำหรับอุปกรณ์บล็อก
-
ประการที่สาม แนะนำให้ใช้ในปัจจุบัน
รุ่นจากอาจารย์ , เพราะ เวอร์ชัน 0.9.6 มีข้อบกพร่องในการกู้คืนไฟล์ขนาดใหญ่เป็นเวลานาน
เพื่อทดสอบประสิทธิภาพของการสำรองข้อมูลและความเร็วในการเขียน / กู้คืนจากข้อมูลสำรอง ฉันได้สร้างพื้นที่เก็บข้อมูลแยกต่างหากและพยายามสำรองข้อมูลอิมเมจขนาดเล็กของเครื่องเสมือน (21 GB) ทำการสำรองข้อมูลสองครั้งโดยไม่ต้องเปลี่ยนต้นฉบับ โดยใช้แต่ละวิธีแก้ไขปัญหาที่ระบุไว้เพื่อตรวจสอบความเร็ว/ช้าลงของการคัดลอกข้อมูลที่กรองข้อมูลซ้ำออกแล้ว
ดังที่เราเห็น Borg Backup มีอัตราส่วนประสิทธิภาพการสำรองข้อมูลเริ่มต้นที่ดีที่สุด แต่จะด้อยกว่าทั้งในแง่ของความเร็วในการเขียนและกู้คืน
Restic กลายเป็นว่าเร็วกว่า Benji Backup แต่ใช้เวลานานกว่าในการกู้คืนเป็น stdout และน่าเสียดายที่ยังไม่ทราบวิธีเขียนโดยตรงไปยังอุปกรณ์บล็อก
หลังจากชั่งน้ำหนักข้อดีข้อเสียทั้งหมดแล้ว ฉันจึงตัดสินใจดำเนินการต่อ พักผ่อน с ส่วนที่เหลือเซิร์ฟเวอร์ เป็นโซลูชันสำรองข้อมูลที่สะดวกและมีแนวโน้มมากที่สุด
ใน screencast นี้ คุณสามารถดูได้ว่าช่องสัญญาณ 10 กิกะบิตถูกนำมาใช้อย่างสมบูรณ์อย่างไรในระหว่างการสำรองข้อมูลหลายรายการที่ทำงานพร้อมกัน เป็นที่น่าสังเกตว่าการรีไซเคิลดิสก์ไม่เพิ่มขึ้นเกิน 30%
ฉันพอใจมากกับโซลูชันที่ฉันได้รับ!
ที่มา: will.com