เหตุใด Mongo ติดอยู่ใน STARTUP2


13

ฉันมีMongoชุดแบบจำลองที่มีสองสามวินาที กล่องซึ่งโฮสต์อินสแตนซ์สำรองเกิดข้อผิดพลาดและสูญเสียฐานข้อมูล

ฉันเริ่มต้นMongoอินสแตนซ์สำรองอีกครั้งและตอนนี้มันติดอยู่ใน STARTUP2 นานกว่า 12 ชั่วโมง มันสมเหตุสมผลหรือไม่ เอกสารดังกล่าวMongoควรอยู่ในช่วงเวลาสั้น ๆ ก่อนที่จะเข้าสู่สถานะการกู้คืน

STARTUP2 หมายความว่าอย่างไร มันจะคัดลอกฐานข้อมูลจากหลักหรือไม่ ฉันจะตรวจสอบได้อย่างไร (สมมติว่า Mongo ทำงานอยู่ใน Linux)

คำตอบ:


12

คำตอบของ eoinbrazil ไม่ถูกต้องบางส่วน โหนดใหม่สามารถอยู่ใน STARTUP2 เป็นเวลานาน ลิงค์ที่โพสต์บอกว่า:

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

ฉันกำลังจัดการคอลเล็กชัน 700 GB และเมื่อฉันเพิ่มโหนดใหม่สถานะ STARTUP2 จะยังคงดีกว่า 24 ชั่วโมง แต่คุณยังสามารถดูว่ามีสิ่งใดเกิดขึ้นหรือไม่โดยดูว่าฐานข้อมูลเติบโตขึ้นหรือไม่ คุณสามารถดูขนาดของฐานข้อมูลบนโหนดใหม่ด้วย

show databases

หรือคุณสามารถสังเกตไดเรคทอรีข้อมูลเพื่อดูว่ามันยังคงเติบโตอยู่หรือไม่ (บน linux ด้วยคำสั่ง ls, df, du, iotop, ฯลฯ .... )


1
show databasesล้มเหลวด้วยnot master and slaveOk=false
JDPeckham

โดยดูที่บันทึกคุณสามารถดูความคืบหน้า ตัวอย่างเช่นมันจะแสดงสิ่งที่ชอบ: [rsSync] ดัชนีสร้าง: 2538000/22982417 11%
Daniel Benedykt

4

สถานะ STARTUP2 หมายถึงโหนดไม่สามารถลงคะแนนได้ สมาชิกของ RS เข้าสู่สถานะนี้เมื่อกระบวนการ MongoD เสร็จสิ้นการโหลดการกำหนดค่า ในรัฐนี้สมาชิกได้สร้างหัวข้อในการจัดการการดำเนินงานการจำลองแบบภายใน แต่ก็ยังไม่ได้มีการเปลี่ยนแปลงของรัฐในการกู้คืนและต่อมาจากที่รอง (ดู[รัฐและรายละเอียดในเอกสาร])

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

วิธีปกติในการแก้ไขปัญหานี้คือการปิดโหนดล้างไฟล์ข้อมูล (ไฟล์เหล่านั้นใน dbpath) และเริ่มต้นใหม่ นี่จะรีสตาร์ทกระบวนการซิงค์เริ่มต้นและควรย้ายไปที่ SECONDARY หากมันติดอยู่ใน STARTUP2 อีกครั้งคุณจะต้องดูบันทึกเพื่อรวบรวมข้อมูลเพิ่มเติมว่าทำไม - มีสาเหตุหลายประการ แต่สิ่งหนึ่งที่สามารถเกิดขึ้นได้คือเครือข่ายที่ไม่สม่ำเสมอหรือความขัดแย้งของทรัพยากรในท้องถิ่น

สิ่งหนึ่งที่ควรทราบคือในขณะที่การซิงค์เริ่มต้นกำลังดำเนินการโหนดจะยังคงอยู่ใน STARTUP2 ดังนั้นขึ้นอยู่กับปริมาณของข้อมูลที่ถูกซิงค์ซึ่งอาจเป็นจำนวนเวลา (วันที่อาจเกิดขึ้น)


ขอบคุณ เราลบข้อมูลและรีสตาร์ท Mongo มันยังอยู่ใน STARTUP2 ดูเหมือนว่า Mongo จะใช้งานได้ มันกินซีพียูและอย่างที่ฉันเห็นในdb.statsฐานข้อมูลกำลังเพิ่มขึ้น clonedบันทึกกล่าวว่าวัตถุที่บาง ฉันยังคงมองหาสาเหตุที่เป็นไปได้ของปัญหานี้
Michael

1
หากยังคงมีปัญหาอยู่คุณอาจต้องการทำสำเนาจากโหนดอื่น (ดูขั้นตอนนี้ - docs.mongodb.org/manual/tutorial/resync-replica-set-member/ ) หากคุณสามารถแนบไฮไลท์บันทึกและรายละเอียดเกี่ยวกับเวอร์ชันที่คุณกำลังใช้งานอยู่มันอาจชี้ไปที่สาเหตุ แต่อย่างเท่าเทียมกันนี่เป็นพฤติกรรมที่ผิดปกติ คุณได้ลองกระตุกระหว่างโหนดเพื่อดูว่าเวลาแฝงของเครือข่ายเป็นอย่างไร
eoinbrazil

Mongo 2.4.6 pingระหว่างโฮสต์นั้นโอเค
Michael

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

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

1

สาเหตุหนึ่งที่เป็นไปได้คือการที่รองของคุณกลายเป็น "เก่า" ตามที่ระบุไว้ที่นี่

เมื่อคุณทำการซิงโครไนซ์สมาชิกอีกครั้งตรวจสอบให้แน่ใจว่า RS ไม่ได้อยู่ภายใต้ภาระงานหนัก


0

สถานะ STARTUP2 อาจเกิดจากเนื้อที่ดิสก์ไม่เพียงพอ อืมเนื่องจากไม่มีตำแหน่งที่จะซิงค์จึงสามารถอยู่ในสถานะ @ STARTUP2 เท่านั้น

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