วิธีการสำรองฐานข้อมูล MongoDB ขนาดใหญ่


15

วิธีที่แนะนำในการสำรองชุดข้อมูลขนาดใหญ่ใน MongoDB คืออะไร? สมมติว่าเรามีขนาดข้อมูลตามลำดับ 10TB - คุณจะสำรองข้อมูลได้อย่างไร

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

ขอบคุณ!

คำตอบ:


21

ด้วยความต้องการ 10TB ในการสำรองข้อมูลจึงมีความซับซ้อนเล็กน้อย

แบบจำลองจะไม่แทนที่การสำรองข้อมูลที่เหมาะสม

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

ข้อเสนอแนะ

ซึ่งขึ้นอยู่กับลักษณะการตั้งค่าของคุณเป็นอย่างมาก

ภาพรวมของ SAN

ด้วย 10TB ฉันคิดว่าคุณได้แนบ SAN มาบ้าง วิธีที่ง่ายที่สุดสำหรับการสำรองข้อมูล MongoDB ในสภาพแวดล้อมเหล่านั้นคือการทำให้แน่ใจว่าคุณได้เปิดใช้งานการทำเจอร์นัลทั้งในระบบไฟล์และ MongoDB และเพียงแค่ถ่ายภาพสแนปช็อตของโวลุ่ม SAN ของหนึ่งในสอง ไม่ถูกขัดจังหวะ โดยปกติจะใช้เวลาเพียงไม่กี่วินาที แต่โปรด _ ทำให้แน่ใจว่านั่นคือหน้าต่าง oplog จำลองแบบของคุณก็เพียงพอแล้ว มิฉะนั้นคุณอาจต้องซิงค์ข้อมูลสำรองอีกครั้ง

อย่าใช้ mongodump

ฉันไม่เห็นด้วยกับ RolandoMySQLDBA เกี่ยวกับการใช้ mongodump ก่อนอื่นมันจะกำหนดล็อคบนเซิร์ฟเวอร์ แม้ว่ามันจะถูกยกขึ้นค่อนข้างเร็ว แต่จำนวนการล็อคที่เพิ่มขึ้นและรบกวนการทำงานของคุณเว้นแต่ว่าจะรันบนโหนดที่ซ่อนอยู่หรือเมื่อไม่มีการตั้งค่าการอ่านที่จะกระทบกับตัวที่สอง นอกจากนี้มันไม่เร็วอย่างแน่นอน ฉันคาดว่ามันจะทำงานเป็นเวลาอย่างน้อยน่าจะใช้เวลานานกว่าหน้าต่างสำรองข้อมูลของคุณ หมายเหตุด้านข้าง: เรียกใช้ mongodump ด้วย--oplogตัวเลือกเสมอ. โปรดทราบว่า mongodump ไม่ได้สำรองดัชนี แต่เป็นการดำเนินการเพื่อสร้างดัชนี ดัชนีเหล่านั้นจะต้องถูกสร้างขึ้นใหม่ในระหว่างการกู้คืนซึ่งอาจเพิ่มเวลาที่คุณต้องการอย่างหนาแน่น จากประสบการณ์ของฉันถ้าคุณต้องกู้คืนฐานข้อมูลคุณต้องการให้เร็วที่สุด อีกเหตุผลหนึ่งที่ mongodump ไม่เหมาะสำหรับการสำรอง 10TB

หมายเหตุเกี่ยวกับสแน็ปช็อต LVM

คุณสามารถทำสแน็ปช็อต LVM บนอินสแตนซ์ Mongo ที่กำลังรันหากว่าคุณได้เปิดใช้งานการทำเจอร์นัลในรูปแบบ mongod (และจากประสบการณ์ของฉัน อย่างไรก็ตามสแน็ปช็อต LVM มาพร้อมกับความหมายบางอย่าง ก่อนอื่นคุณต้องมีพื้นที่ดิสก์เพียงพอที่จะสามารถทำการเปลี่ยนแปลงระหว่างการสำรองข้อมูลได้ ผมขอชี้แจงว่า

สมมติว่าคุณมีอัตราการเปลี่ยนแปลง 500GB ต่อชั่วโมง และคุณต้องการให้แบ็กอัพข้อมูลสำรองของคุณถูกอัปโหลดไปยังที่เก็บข้อมูลบางส่วน แม้ว่าการใช้bzip2 แบบขนานการบีบอัดขนาด 10TB จะต้องใช้เวลาหลายชั่วโมงจึงจะเสร็จสิ้นเพียงเพราะความจริงที่ว่าคุณมีปริมาณการรับส่งข้อมูลจำนวนมากจะกลายเป็นปัจจัย จำกัด ของคุณ สมมติว่าใช้เวลา 2 ชั่วโมงในการบีบอัดข้อมูลเป็น 2TB ดังนั้นตอนนี้เราต้องการเนื้อที่ดิสก์ 2TB + 2 * 500GB รวมทั้งหมด 1TB จำเป็นสำหรับ snapshot LVM สิ่งนี้จะสร้างความต้องการในการจัดเตรียมระบบไฟล์ของคุณอย่างน้อยที่สุด30% ในกรณีที่คุณต้องการความปลอดภัยที่เหมาะสมค่านี้อาจเพิ่มขึ้นเป็น 60-70% (20% สำหรับปัจจัยการใช้งานที่ 0.8 สำหรับระบบไฟล์ดั้งเดิมเช่นเดียวกันกับขนาดสแนปชอตบวกพื้นที่ที่จำเป็นสำหรับการสำรองข้อมูล bzipped ) ในสภาพแวดล้อมการผลิตส่วนใหญ่ที่ยอมรับไม่ได้เนื่องจากการตั้งสำรองมากกว่าจะเป็นแบบคงที่ (คุณไม่ต้องการให้สคริปต์สำรองทำงานกับ LVM ของคุณแบบไดนามิกหรือไม่)

สำรอง MMS

ในขณะที่การสำรองข้อมูล MMS มีคุณสมบัติที่ยอดเยี่ยม (การสำรองข้อมูลอย่างต่อเนื่องและการกู้คืนเวลาง่าย) แต่มาพร้อมกับข้อเสียเปรียบที่สำคัญ: แท็กราคาสำหรับการปรับใช้ขนาดใหญ่สามารถเป็นพันได้อย่างง่ายดาย ด้วยอัตราการเปลี่ยนแปลงสันนิษฐานรายชั่วโมงของ 500GB ในบรรดา 10TB ก็จะเป็นสื่อกลางในการรวมหกตัวเลขสำหรับการสำรองข้อมูลแบบคลาวด์ รายเดือน

ข้อเสนอแนะของฉันเขาจะใช้การสมัครสมาชิกระดับองค์กรสำหรับเซิร์ฟเวอร์ของคุณเพื่อให้มีสิทธิ์ได้รับอินสแตนซ์ MMS ในสถานที่ตั้งรวมถึงการสำรองข้อมูล

สรุป

นี่คือตัวเลือกที่ฉันต้องการตามลำดับจากมากไปน้อย

  1. SAN snapshots: ใช้งานง่ายราคาค่อนข้างถูก
  2. การสมัครสมาชิกองค์กร: คุณสมบัติที่ดีที่สุด ติดตั้งกำหนดค่าลืมมันอยู่ที่นั่นเมื่อคุณต้องการ
  3. LVM snapshots: ใช้งานง่าย แต่ค่าใช้จ่ายที่จำเป็นในการจัดเตรียมอาจสรุปได้เมื่อเวลาผ่านไป

5

มีสองตัวเลือก

การสำรองทางกายภาพ

หากคุณไม่คำนึงถึงการหยุดทำงานสิ่งที่ง่ายที่สุดที่จะทำคือ

service mongod stop

ทำสแน็ปช็อต LVM หรือแรงเดรัจฉานcpของโฟลเดอร์ข้อมูล Mongo ไปยังดิสก์อื่น

service mongod start

แน่นอนคุณไม่ต้องการหยุดทำงานหากข้อมูล 10TB อยู่ในเครื่องเดี่ยว

ชุดแบบจำลองล่าช้า

หากคุณมีชุดเรพลิกาที่มีสามโหนดให้ใช้หนึ่งในโหนดเพื่อสำรองข้อมูล

{
        "_id" : "myreplica",
        "version" : 1,
        "members" : [
                {
                        "_id" : 1,
                        "host" : "10.20.30.40:27017",
                        "priority" : 2
                },
                {
                        "_id" : 2,
                        "host" : "10.20.30.41:27017"
                },
                {
                        "_id" : 3,
                        "host" : "10.20.30.42:27017",
                        "priority" : 0,
                        "slaveDelay" : 3600
                }
        ]
}

ใช้โหนดพร้อมกับ"_id' : 3การสำรองข้อมูลทางกายภาพทั้งหมดของคุณ ดังนั้นจึงไม่มีการหยุดทำงาน ในการรับสแนปช็อตเที่ยงคืนคุณสามารถเรียกใช้การสำรองข้อมูลเวลา 1:00 น. เนื่องจากโหนดที่ซ่อนอยู่นั้นใช้เวลาไม่ถึง 1 ชั่วโมง

แน่นอนข้อเสียเปรียบคือต้องมีเซิร์ฟเวอร์เพิ่มอีกสองตัวโดยมีขนาด 10TB และความเสี่ยงของระบบดูแลระบบ

MONGODUMP

คุณสามารถใช้ mongodump กับเครื่องแบบสแตนด์อโลน แต่คุณต้องคาดหวังว่าประสิทธิภาพการทำงานลดลงเนื่องจาก mongodump เป็นโปรแกรมไคลเอนต์ที่ใช้การเชื่อมต่อเช่นการเชื่อมต่ออื่น ๆ

หากคุณต้องการสำรองข้อมูลแบบตรงเวลาคุณควรใช้

mongodump --oplog 

การสำรองข้อมูล BSON เชิงตรรกะจะมีขนาดเล็กลง (โดยเฉพาะอย่างยิ่ง gzipped หรือ bzipped) มากกว่าการสำรองข้อมูลจริง

การใช้mongodump --oplogจะทำกับโหนดที่ซ่อนอยู่ได้ดีที่สุด ด้วยวิธีนี้จะไม่มีการตีการแสดงต่ออาจารย์

การปฏิเสธความรับผิด

ฉันค่อนข้างใหม่กับ MongoDB (อุบัติเหตุ / อุบัติเหตุ MongoDBA) ฉันหวังว่าคำตอบของฉันจะช่วย


1
MongoDB ยังมีบริการชำระเงินซึ่งจะสำรองข้อมูลของคุณและอนุญาตให้ทำการกู้คืนในเวลา: mms.mongodb.com/signup/…
James Wahlin

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