นี่เป็นกลยุทธ์การสำรองข้อมูลที่ถูกต้องสำหรับ MongoDB หรือไม่?


11

ฉันมีเซิร์ฟเวอร์เฉพาะเครื่องเดียวที่มีฐานข้อมูล MongoDB ประมาณ 10GB ฉันต้องสำรองข้อมูลรายวัน แต่ฉันไม่สามารถหยุดทำงานกับฐานข้อมูลได้ เป็นไปได้หรือไม่ที่จะใช้ชุดเรพลิกาบนดิสก์เดียว (ด้วย mongod 2 อินสแตนซ์ที่ทำงานบนพอร์ตที่ต่างกัน) และใช้ออฟไลน์รองและสำรองไฟล์ข้อมูลไปยังที่จัดเก็บนอกสถานที่เช่น S3 (เปิดการบันทึก) หรือจะใช้ master / slave ดีกว่าชุด replica หรือไม่?

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

คำตอบ:


6

ReplicaSet จะทำงานในสถานการณ์นี้ อย่างไรก็ตามฉันไม่สามารถบอกได้ว่ามีอินสแตนซ์ MongoDB สองตัวที่เซิร์ฟเวอร์เดียวกันเป็นความคิดที่ดีหรือไม่ขึ้นอยู่กับฮาร์ดแวร์ / ซอฟต์แวร์เซิร์ฟเวอร์และโหลด

เพื่อให้แน่ใจว่าbackupโหนด MongoDB ของคุณไม่ได้เป็นมาสเตอร์ให้ตั้งค่าpriorityพารามิเตอร์เป็น0เช่น

rs.add({_id: 1, host: "localhost:<port>", priority: 0})

หมายเหตุ : ถ้าคุณไม่สามารถหยุดทำงานได้คุณควรมีโหนด MongoDB หลักอย่างน้อย 2 โหนดใน ReplicaSet ดูบทความ


2

กลยุทธ์หนึ่งที่ต้องพิจารณาคือการใช้ตัวเลือก "ซ่อน" บนโหนดสำรองข้อมูลในชุดข้อมูลของคุณ จากบล็อก MongoDB:

เซิร์ฟเวอร์ที่ซ่อนจะไม่ปรากฏในผลลัพธ์ isMaster () นี่ก็หมายความว่าพวกมันจะไม่ถูกใช้หากคนขับรถแจกจ่ายให้คนอ่านโดยอัตโนมัติ เซิร์ฟเวอร์ที่ซ่อนจะต้องมีลำดับความสำคัญเป็น 0 (คุณไม่สามารถมีเซิร์ฟเวอร์หลักที่ซ่อนอยู่ได้) ในการเพิ่มสมาชิกที่ซ่อนอยู่ให้รัน:

rs.add ({"_ id": num, "host": hostname, "priority": 0, "hidden": true})


1

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

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

ข่าวดีก็คือว่ามันควรจะเป็นเรื่องเล็กน้อย

  1. ค้นหาแหล่งข้อมูลสำรองของคุณเพื่อดูว่าอินสแตนซ์ใดเป็นหลักและเป็นที่รอง ( db.isMaster())
  2. โน้มน้าวเช่นการสำรองข้อมูลจะก้าวลงจากการใช้rs.freeze()และrs.stepDown()คำสั่งหรือการเชื่อมต่อรอง

ไม่ใช่ตัวเลือกในการตั้งค่าระดับความสำคัญเป็น 0 เช่นอเล็กซานเดอร์แนะนำให้รองไม่เคยกลายเป็นหลัก?
James Simpson

คุณจะต้องทำการทดสอบบางอย่าง แต่ฉันไม่แน่ใจว่ารองจะเพียงแค่สแตนด์บายถ้าด้วยเหตุผลบางอย่างกระบวนการหลักจะลง ฉันต้องการให้คนที่สองของฉันครอบครอง;)
Charles Hooper

1
>> รองของคุณอาจได้รับการเลื่อนระดับเป็นหลัก - ตามที่กล่าวไว้การตั้งค่ารองเป็นลำดับความสำคัญ 0 จะป้องกันไม่ให้เปลี่ยนเป็นหลัก
Jonesome Reinstate Monica

คุณสามารถเชื่อมต่อกับเพื่อนคนใดคนหนึ่งจากรายการของโหนดเพียร์ของคุณ (มันอาจเป็นโหนดหลัก, รอง, ผู้ตัดสินหรือที่ซ่อนอยู่ใด ๆ ) ถามเพื่อนที่เป็นคนที่สอง ( rs.status()และห่วงผ่านresult["members"]) และเชื่อมต่อกับหนึ่งใน สำรองเพื่อดำเนินการสำรองข้อมูล
yfeldblum
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.