ฉันจัดการกับปัญหานี้มาหลายสัปดาห์แล้ว
ฉันมีสถานการณ์ต่อไปนี้:
Couchdb2.3.1-A <===> Couchdb2.3.1-B <===> Couchdb3.1.1-A <===> Couchdb3.1.1-B
ที่ไหน <===> แสดงถึงการจำลองแบบดึงสองครั้ง หนึ่งรายการกำหนดค่าในแต่ละด้าน เช่น: couchdb1 ดึงมาจาก couchdb2 และ viceversa
Couchdb กำลังทำงานในคอนเทนเนอร์นักเทียบท่า
หากมีการเขียนขึ้นที่ Couchdb2.3.1-อมันต้องผ่านทุกเซิฟเวอร์ถึงจะมา Couchdb3.1.1-B.
Al ของพวกเขามี HDD พิเศษ Couchdb ไม่แบ่งปันดิสก์กับบริการอื่นใด
โซฟาdb2.3.1 ก และ ข ไม่มีปัญหา
Couchdb3.1.1-อ ค่อยๆ เริ่มเพิ่มเวลาแฝงของดิสก์เมื่อเวลาผ่านไป ดังนั้นเราจึงหยุดเขียนคำขอและเริ่มพูดคุยด้วยเท่านั้น Couchdb3.1.1-B. Couchdb3.1.1-อ ยังคงได้รับการเขียน แต่โดยโปรโตคอลการจำลองแบบเท่านั้น เวลาในการตอบสนองของดิสก์ไม่เปลี่ยนแปลง
การเปลี่ยนแปลงที่เราทำตั้งแต่เริ่มเกิดปัญหา:
- อัพเกรดเคอร์เนลจาก
4.15.0-55-ทั่วไป ถึง 5.4.0-88-ทั่วไป
- อัพเกรดอูบุนตูจาก
18.04 ถึง 20.04
- ลบแล้ว
_global_changes ฐานข้อมูลจาก Couchdb3.1.1-อ
ข้อมูลเพิ่มเติม:
- Couchdb กำลังใช้ docker local-perist volumes
- ดิสก์เป็น WD Purple สำหรับ
2.3.1 Couchdbs และ WD Black สำหรับ 3.1.1 ที่นอน
- เรามีฐานข้อมูลเดียวของ
88GiB และ 2 มุมมอง: หนึ่งใน 22GB และอีกเล็กน้อยของ 30MB (ปรับปรุงอย่างมาก)
สถิตินักเทียบท่า แสดงให้เห็นว่า couchdb3.1.1 ใช้หน่วยความจำจำนวนมากเมื่อเทียบกับ 2.3.1:
3.5GiB สำหรับ couchdb3.1.1-A (ไม่ได้รับคำขอเขียนโดยตรง)
8.0GiB สำหรับ couchdb3.1.1-A (รับทั้งคำขออ่านและเขียน)
226MiB สำหรับ 2.3.1-A
552MiB สำหรับ 2.3.1-B
- การบีบอัดฐานข้อมูลจะดำเนินการในเวลากลางคืน ปัญหาจะเกิดขึ้นเพียงชั่วข้ามวัน เมื่อมีการเขียนข้อมูลส่วนใหญ่
- การกำหนดค่าส่วนใหญ่เป็นค่าเริ่มต้น
กราฟเวลาแฝงจากการตรวจสอบ munin:
ความล่าช้าของดิสก์
ความช่วยเหลือใด ๆ ที่ชื่นชม