วิธีโยกย้าย MongoDB 2.6 ถึง 3.0 ด้วย WiredTiger


9

MongoDB 3.0 แนะนำเอ็นจิ้นการจัดเก็บใหม่ที่เรียกว่าwiredTigerซึ่งส่งผลให้หน่วยความจำและพื้นที่ดิสก์ลดลงอย่างมาก

เนื่องจากปัจจุบันฐานข้อมูลของฉันมีวัตถุอยู่ที่ ~ 20 ล้านและใช้ RAM ได้ ~ 70GB การอัปเดตนี้จึงเกิดขึ้นในเวลาที่เหมาะสมเพื่อเลื่อนการอัปเดตฮาร์ดแวร์

คุณจะย้ายการติดตั้ง MongoDB 2.6 ไปเป็น 3.0 ได้อย่างไรและในเวลาเดียวกันจะได้รับประโยชน์จาก WiredTiger ได้อย่างไร

เอกสารอ้างอิงถึงตัวเลือกที่ทำให้เกิดข้อผิดพลาดในการเริ่มต้นซึ่งป้องกันไม่ให้ MongoDB เริ่มทำงาน ตำแหน่งไฟล์ไม่ตรงกับใน Ubuntu (เซิร์ฟเวอร์ 14.04 LTS)


นี่เป็นอินสแตนซ์เดียว (ไม่ใช่ชุดแบบจำลอง) หรือไม่
อดัมซี

คำตอบ:


15

/etc/mongod.confในการติดตั้งค่าเริ่มต้นแฟ้มการกำหนดค่าที่ สิ่งที่เอกสาร MongoDB ไม่ได้กล่าวถึงคือเมื่อทำการโอนย้ายไปยัง WiredTiger เราจำเป็นต้องอัปเดตไฟล์การกำหนดค่าเป็นรูปแบบ YAML ใหม่ที่แนะนำใน 2.6
เท่าที่ฉันสามารถบอกได้ว่าengineตัวเลือกนั้นมีเฉพาะในรูปแบบการกำหนดค่าใหม่
การโอนย้ายจากเอ็นจินการเก็บข้อมูลเก่าประกอบด้วยการสร้างดัมพ์ฐานข้อมูลปิด mongodb เปลี่ยนการตั้งค่าจากนั้นนำเข้าดัมพ์ไปยังเอ็นจิ้นการจัดเก็บใหม่

  1. สร้างการสำรองข้อมูล อย่างจริงจัง. เราต้องการดัมพ์ฐานข้อมูลซึ่งเราจะนำเข้าสู่เอ็นจิ้นฐานข้อมูลใหม่:

    mongodump -d db_name /backup/path/  
    
  2. หยุดบริการ mongodb

    sudo service mongod stop  
    
  3. ย้ายข้อมูลจากที่ตั้งปัจจุบันไปยังที่อื่น (MongoDB จะไม่เริ่มทำงานหากไดเรกทอรีข้อมูลมีไฟล์ที่สร้างขึ้นโดยเอ็นจิ้นการเก็บข้อมูลเก่า)

    sudo mv /var/lib/mongodb /var/lib/mongodb_26/
    
  4. อัพเกรด MongoDB เป็นเวอร์ชั่น 3.0 (จากhttp://docs.mongodb.org/v3.0/tutorial/install-mongodb-on-ubuntu/ ):

    sudo apt-key adv --keyserver hkp://keyserver.ubuntu.com:80 --recv 7F0CEB10  
    echo "deb http://repo.mongodb.org/apt/ubuntu "$(lsb_release -sc)"/mongodb-org/3.0 multiverse" | sudo tee /etc/apt/sources.list.d/mongodb-org-3.0.list  
    sudo apt-get update  
    sudo apt-get install mongodb-org mongodb-org-server mongodb-org-shell mongodb-org-mongos mongodb-org-tools  
    
  5. แปลงไฟล์กำหนดค่าจากเก่า (ก่อน 2.6) เป็นรูปแบบ YAML ปัจจุบัน ขั้นต่ำเปล่าคือ:

    storage:  
        dbPath: "/var/lib/mongodb"  
        engine: wiredTiger  
    
    systemLog:  
       destination: file  
       path: "/var/log/mongodb/mongod.log"  
       logAppend: true  
    
    net:  
        bindIp: 127.0.0.1  
        port: 27017  
        # Enable the HTTP interface (Defaults to port 28017).  
        http:  
            enabled: false  
    

    ตรวจสอบให้แน่ใจว่าไม่มีบรรทัดในรูปแบบเดิมอยู่มิฉะนั้น MongoDB จะไม่เริ่มทำงาน

    เอกสารเต็มรูปแบบสำหรับไฟล์การกำหนดค่าอยู่ที่: http://docs.mongodb.org/v3.0/reference/configuration-options/

  6. เลือกสำรองข้อมูลบันทึก:

    sudo mv /var/log/mongodb/mongod.log /var/log/mongodb/mongod_26.log
    
  7. เริ่ม mongodb ใหม่

    sudo service mongod start
    
  8. โหลดข้อมูลสำรองเพื่อแปลงข้อมูลเป็นเอ็นจิ้นการจัดเก็บใหม่

    mongorestore /backup/location
    

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

sudo rm -r /var/lib/mongodb_26/

โปรดทราบว่าสำหรับชุดเรพลิกาและกลุ่มที่มีเศษมีบางขั้นตอนเพิ่มเติม: http://docs.mongodb.org/v3.0/release-notes/3.0-upgrade/?_ga=1.86531032.1131483509.1428671022#change-replica-set-storage -engine ไป wiredtiger


1
หมายเหตุ: สำหรับตัวอย่างที่สมบูรณ์มากขึ้นของไฟล์กำหนดค่า YAML โปรดดูคำตอบของฉันใน DBA: dba.stackexchange.com/a/82592/6441
Adam C

1

เมื่อใช้รูปแบบไฟล์การกำหนดค่าแบบเก่าฉันก็ประสบความสำเร็จด้วย:

storageEngine = wiredTiger

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