Архивирането на база данни не е нищо друго освен начин за защита или възстановяване на данни. Това е процесът на съхраняване на работното състояние, архитектурата и данните на вашата база данни. Тя може да бъде много полезна в ситуации на технически прекъсване или бедствие. Затова е от съществено значение да запазите резервното копие на вашата база данни и вашата база данни да има добър и лесен процес за архивиране.
MongoDB предоставя няколко инструмента/техники за лесно архивиране на вашите бази данни.
В тази статия ще обсъдим някои от най-добрите работни потоци за архивиране и възстановяване на MongoDB.
Като цяло има три най-често срещани опции за архивиране на вашия MongoDB сървър/клъстер.
- Mongodump/Mongorestore
- MongoDB Cloud Manager
- Снимки на базата данни
Освен тези общи опции, има и други начини за архивиране на вашия MongoDB. Ще обсъдим и всички тези опции в тази статия. Да започваме.
MongoDump/MongoRestore
Ако имате малка база данни (<100GB) и искате да имате пълен контрол над вашите архиви, тогава Mongodump и Mongorestore са най-добрите ви опции. Това са команди на mongo shell, които могат да се използват за ръчно архивиране на вашата база данни или колекции. Mongodump изхвърля всички данни в двоичен JSON(BSON) формат на посоченото място. Mongorestore може да използва тези BSON файлове, за да възстанови вашата база данни.
Архивиране на цяла база данни
$ sudo mongodump --db mydb --out /var/backups/mongo
Изход:
2018-08-20T10:11:57.685-0500 writing mydb.users to /var/backups/mongo/mydb/users.bson
2018-08-20T10:11:57.907-0500 writing mydb.users metadata to /var/backups/mongo/mydb/users.metadata.json
2018-08-20T10:11:57.911-0500 done dumping mydb.users (25000 documents)
2018-08-20T10:11:57.911-0500 writing mydb.system.indexes to /var/backups/mongo/mydb/system.indexes.bson
В тази команда най-важният аргумент е --db. Той посочва името на базата данни, която искате да архивирате. Ако не посочите този аргумент, командата Mongodump ще архивира всичките ви бази данни, което може да бъде много интензивен процес.
Архивиране на една колекция
$ mongodump -d mydb -o /var/backups/mongo --collection users
Тази команда ще архивира само колекцията от потребители в базата данни на mydb. Ако не дадете тази опция, тя ще архивира цялата колекция в базата данни по подразбиране.
Правете редовно архивиране с помощта на Mongodump/Mongorestore
Като стандартна практика трябва да правите редовни архиви на вашата база данни MongoDB. Да предположим, че искате да правите резервно копие всеки ден в 3:03 сутринта, след което в Linux система можете да направите това, като добавите запис в cron в crontab.
$ sudo crontab -e
Добавете този ред в crontab:
3 3 * * * mongodump --out /var/backups/mongo
Възстановяване на цяла база данни
За възстановяване на базата данни можем да използваме команда Mongorestore с опция --db. Той ще прочете BSON файловете, създадени от Mongodump, и ще възстанови вашата база данни.
$ sudo mongorestore --db mydb /var/backups/mongo/mydb
Изход
2018-07-20T12:44:30.876-0500 building a list of collections to restore from /var/backups/mongo/mydb/ dir
2018-07-20T12:44:30.908-0500 reading metadata file from /var/backups/mongo/mydb/users.metadata.json
2018-07-20T12:44:30.909-0500 restoring mydb.users from file /var/backups/mongo/mydb/users.bson
2018-07-20T12:45:01.591-0500 restoring indexes for collection mydb.users from metadata
2018-07-20T12:45:01.592-0500 finished restoring mydb.users (25000 documents)
2018-07-20T12:45:01.592-0500 done
Възстановяване на цяла колекция
За да възстановите само една колекция от db, можете да използвате следната команда:
$ mongorestore -d mydb -c users mydb/users.bson
Ако вашата колекция е архивирана във формат JSON вместо BSON, тогава можете да използвате следната команда:
$ mongoimport --db mydb --collection users --file users.json --jsonArray
Предимства
- Много лесна за използване
- Имате пълен достъп до резервното си копие
- Можете да поставите резервните си копия на всяко място, като например NFS споделения, AWS S3 и т.н.
Недостатъци
- Всеки път ще е необходимо пълно архивиране на базата данни, а не само разликата.
- За големи бази данни, архивирането и възстановяването на базата данни може да отнеме часове.
- По подразбиране не е в момента, което означава, че ако данните ви се променят, докато ги архивирате, резервното ви копие може да доведе до непоследователност. Можете да използвате опцията --oplog, за да разрешите този проблем. Ще направи моментна снимка на базата данни в края на процеса mongodump.
MongoDB Ops Manager
Ops Manager е приложение за управление на MongoDB, което работи във вашия център за данни. Той непрекъснато архивира вашите данни и осигурява процеси за възстановяване в момента за вашата база данни. В рамките на това приложение има агент, който се свързва с вашите екземпляри на MongoDB. Първо ще извърши първоначална синхронизация, за да архивира текущото състояние на базата данни. Агентът ще продължи да изпраща компресираните и криптирани oplog данни до Ops Manager, така че да можете да имате непрекъснато архивиране. Използвайки тези данни, Ops Manager ще създаде моментни снимки на базата данни. Той ще създава моментна снимка на вашата база данни на всеки 6 часа и oplog данните ще се съхраняват за 24 часа. Можете да конфигурирате графика за моментни снимки по всяко време с помощта на Ops Manager.
Предимства
- По подразбиране е в момента
- Не оказва влияние върху производителността, освен при първоначалното синхронизиране
- Поддръжка за последователни моментни снимки на разчленени клъстери
- Гъвкавост за изключване на некритични колекции
Недостатъци
- Закъснението на мрежата се увеличава с размера на моментната снимка при възстановяване на базата данни.
MongoDB Cloud Manager
MongoDB Cloud Manager е базирано на облак решение за архивиране, което осигурява възстановяване в момента, непрекъснато и онлайн решение за архивиране като напълно управлявана услуга. Можете просто да инсталирате агента на Cloud Manager, за да управлявате архивиране и възстановяване на вашата база данни. Той ще съхранява вашите архивни данни в облак MongoDB.
Предимства
- Много лесна за използване. Добър GUI.
- Непрекъснато архивиране на заявки и oplog.
Недостатъци
- Няма контрол върху архивните данни. Съхранява се в облака MongoDB.
- Цената зависи от размера на данните и количеството промени в oplog.
- Процесът на възстановяване е бавен.
Файлове на база данни за моментни снимки
Това е най-простото решение за архивиране на вашата база данни. Можете да копирате всички основни файлове (съдържание на данни/ директория) и да ги поставите на всяко сигурно място. Преди да копирате всички файлове, трябва да спрете всички текущи операции по запис в база данни, за да гарантирате последователността на данните. Можете да използвате командата db.fsyncLock(), за да спрете всички операции по запис.
Има два типа моментни снимки:единият е моментни снимки на ниво облак, а другият е моментни снимки на ниво ОС.
Ако съхранявате данни от база данни с доставчик на облачни услуги като AWS, тогава трябва да направите AWS EBS моментни снимки за архивиране. За разлика от тях, ако съхранявате DB файлове в родна ОС като Linux, тогава трябва да направите LVM моментни снимки. LVM моментните снимки не са преносими към други машини. Така че моментните снимки на базата на облак са по-добри от моментните снимки, базирани на ОС.
Предимства
- Лесен за използване.
- Пълен контрол върху моментните снимки. Можете да го преместите във всеки център за данни.
- Тези моментни снимки са дифференцирани моментни снимки, които съхраняват само разликите от предишните моментни снимки.
- Няма нужда да изтегляте моментните снимки за възстановяване на вашата база данни. Можете просто да създадете нов том от моментната си снимка.
Недостатъци
- Използвайки този метод, можете да възстановите базата си данни само в точки на прекъсване.
- Поддръжката понякога става много сложна.
- За да координирате архивирането във всички набори от реплики (в разчленена система), имате нужда от специален екип за devops.
Инструмент за последователно архивиране на MongoDB
Последователното архивиране на MongoDB е инструмент за извършване на последователно архивиране на MongoDB клъстери. Може да архивира клъстер с един или много фрагменти в една точка от базата данни. Той използва Mongodump като метод за архивиране по подразбиране. Изпълнете следната команда, за да направите резервно копие с помощта на този инструмент.
$ mongodb-consistent-backup -H localhost -P 27017 -u USERNAME -p PASSWORD -l /var/backups/mongo
Всички резервни копия, генерирани от тези команди, са съвместими с MongoRestore. Можете да използвате командата mongorestore с опция --oplogReplay, за да осигурите последователност.
$ mongorestore --host localhost --port 27017 -u USERNAME -p PASSWORD --oplogReplay --dir /var/backups/mongo/mydb/dump
Предимства
- Напълно отворен код
- Работи с разчленен клъстер
- Предоставя опция за отдалечено архивиране, като например Amazon S3
- Налице е автоматично мащабиране
- Много лесен за инсталиране и стартиране
Недостатък
- Не е напълно зрял продукт
- Много малко опции за дистанционно качване
- Не поддържа криптиране на данни преди записване на диск
- Официалното кодово хранилище няма подходящо тестване
Архивиране на ClusterControl
ClusterControl е автоматизирана система за управление на база данни всичко в едно. Позволява ви да наблюдавате, разгръщате, управлявате и мащабирате клъстерите на вашите бази данни с лекота. Той поддържа MySQL, MongoDB, PostgreSQL, Percona XtraDB и Galera Cluster. Този софтуер автоматизира почти всички операции с базата данни, като разгръщане на клъстер, добавяне или премахване на възел от който и да е клъстер, непрекъснато архивиране, мащабиране на клъстера и т.н. Всички тези неща можете да правите от един-единствен GUI, предоставен от системата ClusterControl.
ClusterControl предоставя много приятен GUI за управление на архивиране на MongoDB с поддръжка за планиране и творчески отчети. Той ви дава две опции за методи за архивиране.
- Mongodump
- Последователно архивиране на Mongodb
Така потребителите могат да избират всяка опция според нуждите си. Този инструмент присвоява уникален идентификатор на всички архиви и го съхранява под този път:ClusterControl> Settings> Backup> BackupID. Ако посоченият възел не е активен, докато прави резервно копие, инструментът автоматично ще намери живия възел от клъстера и ще продължи процеса на архивиране на този възел. Този инструмент също така предоставя опция за планиране на архивирането с помощта на някой от горните методи за архивиране. Можете да активирате/деактивирате всяка задача за планиране, като просто превключите бутон. ClusterControl изпълнява процеса на архивиране във фонов режим, така че няма да засегне другите задачи в опашката.
Предимства
- Лесна инсталация и много лесна за използване
- Множество опции за методи за архивиране
- Архивното планиране е много лесно с помощта на прост GUI формуляр
- Автоматично потвърждаване на архивиране
- Резервно копие на отчети със състояние
Недостатък
- И двата метода за архивиране вътрешно използват mongodump, който има някои проблеми с обработката на много големи бази данни.
Заключение
Добрата стратегия за архивиране е критична част от всяка система за управление на база данни. MongoDB предлага много опции за архивиране и възстановяване/възстановяване. Заедно с добър метод за архивиране е много важно да имате множество копия на базата данни. Това помага да се възстанови базата данни, без да има престой дори от една секунда. Понякога за по-големи бази данни процесът на архивиране може да бъде много ресурсоемък. Така че вашият сървър трябва да бъде оборудван с добър процесор, RAM и повече дисково пространство, за да се справи с този вид натоварване. Процесът на архивиране може да увеличи натоварването на сървъра поради тези причини, така че трябва да стартирате процеса на архивиране през нощта или извън пиковите часове.