Как перенести MongoDB 2.6 на 3.0 с помощью WiredTiger

9

В MongoDB 3.0 появился новый механизм хранения данных, wiredTigerкоторый приводит к значительному сокращению использования памяти и дискового пространства.

Поскольку моя БД в настоящее время содержит ~ 20 миллионов объектов и использует ~ 70 ГБ ОЗУ, это обновление будет сделано как раз в нужное время, чтобы отложить обновление оборудования.

Как вы переносите существующую установку MongoDB 2.6 на 3.0 и в то же время получаете преимущества wiredTiger?

Документация относится к опциям, которые приводят к ошибкам запуска, которые мешают запуску MongoDB. Кроме того, расположение файлов не совпадает с расположением в Ubuntu (Server 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 к - движка-wiredtiger

Эмануэль Эй
источник
1
Примечание: более полные примеры конфигурационных файлов YAML см. В моем ответе на DBA: dba.stackexchange.com/a/82592/6441
Адам С.
1

Используя старый формат файла конфигурации , я добился успеха с:

storageEngine = wiredTiger
unkx80
источник
Это довольно интересно, потому что в то время, когда я писал свой пост, я попробовал именно это и получил ошибку (которую я не помню).
Эммануэль Эй