Mongo DB Replica ตั้ง Stuck ที่ RECOVERING state


14

เราได้สร้างชุดจำลองและตอนนี้ปัญหาคือ 2 สมาชิกของชุดจำลอง [3 ชุดสมาชิก] อยู่ในโหมดการกู้คืนจาก 48 ชั่วโมง เริ่มแรกขนาดของโหนดการกู้คืนเพิ่มขึ้นและตอนนี้แม้กระทั่งว่าจะหยุด ดังนั้นในการกู้คืนโหนดจะติดอยู่หลังจากข้อมูล 90 GB พร้อมข้อมูลโลคัล 60+ GB

วิธีออกจากโหมดนี้

คำตอบ:


13

วิธีที่ง่ายแม้ว่าจะเป็นวิธีที่ไม่ปลอดภัย

  1. หยุดรองครั้งแรก
  2. ลบเนื้อหาของมัน dbpath
  3. รีสตาร์ทรอง
  4. รอให้มันทันกับรายการหลัก
  5. ทำซ้ำขั้นตอนที่สองรอง

นี่เป็นบิตที่ไม่ปลอดภัยเนื่องจากไม่ทราบสาเหตุที่สองเข้าสู่สถานะการกู้คืน

วิธีที่ปลอดภัยยิ่งขึ้น แต่ยังรบกวนได้มากกว่า

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

วิธีที่ปลอดภัยที่สุด แต่ยังล่วงล้ำที่สุด

  1. ปิดชุดเรพลิกาทั้งหมด
  2. ลบเนื้อหาของdbpathบนทั้ง secondaries
  3. คัดลอกเนื้อหาของdbpathไปยังทั้งสองdbpath
  4. เริ่มต้นหลักเก่า
  5. เริ่มหนึ่งในบุคคลที่สองเก่า
  6. รอจนกว่าจะมีการเลือกตั้งหลักใหม่
  7. เริ่มต้นรองที่เหลืออยู่

หมายเหตุบางส่วน:

การใช้งานMMS ได้ฟรีติดตั้งง่ายและให้ข้อมูลที่ดีเกี่ยวกับชุดจำลองของคุณ พยายามที่จะรักษาค่าสำหรับ "การจำลองแบบล่าช้า" ประมาณ 0 และใช้วิธีการทั้งหมดที่จำเป็นว่าการจำลองแบบล่าช้าของคุณจะไม่มากกว่า "หน้าต่าง oplog จำลองแบบ"

ตรวจสอบให้แน่ใจเสมอว่าคุณมีเครือข่าย 1Gb และ (ขออภัย) shitload of RAM ยิ่งมากยิ่งดี กฎทั่วไปเพิ่มเติม: ค่อนข้างครึ่ง RAM และ SSD มากกว่า RAM สองเท่าและไม่มี SSD (โดยเหลือ RAM ภายในขีด จำกัด ที่เหมาะสม)

คำเตือน: ทำการสำรองข้อมูลการผลิตเสมอก่อนที่จะเล่นซอมัน


1
ณ ตอนนี้เราไม่มีโหนดสำรองในชุดแบบจำลอง หนึ่งอยู่ในโหมดหลักและอีกสองอยู่ในโหมดกู้คืน
Avinash Sahu

1
ตรรกะที่สองแล้ว กระบวนการนี้เหมือนกัน
Markus W Mahlberg

ฉันได้ลองหลายครั้งที่เริ่มต้นอินสแตนซ์ของ Mongo และซิงค์ใหม่ทุกครั้งที่มันเริ่มคัดลอกข้อมูลไปยังโหนดอื่นจนถึงขนาดคงที่ (~ 96gb) แล้วติดค้าง ขนาด oplog ต้องทำอะไรกับมันหรือไม่?
Avinash Sahu

1
ไม่จริงยกเว้น resync อาจหยุดเมื่อคุณแทรกข้อมูลมากกว่า oplog ที่สามารถเก็บไว้ในระหว่าง resync เริ่มต้น ใช้ตัวเลือก 2 หรือ 3 ในกรณีนี้
Markus W Mahlberg

1
คุณช่วยอธิบายให้ฟังหน่อยได้ไหม? "แทนที่จะเป็นครึ่งหนึ่งของ RAM และ SSD มากกว่าสองเท่าของ RAM และไม่มี SSD (โดยเหลือ RAM ภายในขีด จำกัด ที่เหมาะสม)"
สตีเฟ่นเหงียน

1

กระบวนการจำลองล้มเหลวแม้ว่าคุณจะเริ่มต้นจากรอยขีดข่วน DBPath ใหม่บน secondary.So สิ่งที่เป็นที่จะทำให้บางเปลี่ยนแปลงใน oplog ขนาดของ oplog ต้องถูกตั้งค่าเป็นค่าที่เหมาะสมที่สุดเพื่อให้สามารถจัดการแอปพลิเคชันทั้งหมดที่เขียนลงไปได้

การเพิ่มขนาด oplog:

ปิดเซิร์ฟเวอร์หลัก

use admin

db.shutdownServer()

เริ่มต้นหลักเป็นแบบสแตนด์อโลนและเรียกใช้บนพอร์ตอื่นบอกว่า 37017

เข้าสู่ระบบ mongo ในพอร์ต 37017

mongo --port 37017

ลบเนื้อหาเก่าในฐานข้อมูลท้องถิ่น

เพื่อความปลอดภัยต้องมี backop ของ oplog เก่าก่อนที่จะวาง

mongodump --db local --collection 'oplog.rs' --port 37017

วางเนื้อหาเก่าลงในฐานข้อมูลท้องถิ่น

use local

db.oplog.rs.drop()

db.me.drop()

db.replset.election.drop()

db.replset.minvalid.drop()

db.startup_log.drop()

ไม่สามารถลบคอลเล็กชัน Replset ได้ดังนั้นให้ลบด้วย id ที่ต้องการ:

db.system.replset.remove({ "_id" : "your_replsetname"})

สร้าง oplog ใหม่ที่มีขนาดที่ต้องการประมาณ 50 GB

db.runCommand( { create: "oplog.rs", capped: true, size: (50 * 1024 * 1024 * 1024) } )

นอกจากนี้คุณสามารถระบุขนาด oplog เป็น MB ในไฟล์ mongod.conf ได้ว่ามีขนาด 509 426,496 MB สำหรับ 50 GB

replication:
   oplogSizeMB: 429496

หวังว่านี่จะช่วย !!!

แก้ไข:

ตามที่กล่าวไว้โดย Nicholas Tolley Cottrell ในความคิดเห็น ใน MongoDB เวอร์ชั่น 3.6เราสามารถเปลี่ยนขนาด oplog ใน runtime โดยไม่ต้องทำการรีสตาร์ท

ตรวจสอบขนาด oplog ปัจจุบัน

use local
db.oplog.rs.stats().maxSize

ในการเปลี่ยนขนาด oplog เป็น 10 GB

db.adminCommand({replSetResizeOplog: 1, size: 10000})

1
ข้างต้นล้าสมัย ณ วันที่ 3.6 ตอนนี้คุณสามารถปรับขนาด oplog โดยไม่ต้องวางเนื้อหาหรือแม้แต่รีสตาร์ทโหนด: docs.mongodb.com/manual/tutorial/change-oplog-size
Nicholas Tolley Cottrell

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