Оглавление |
---|
Создание резервной копии БД
Предупреждение |
---|
На сервере должно быть достаточно свободного места для того, чтобы контейнер с БД смог запуститься, и пользователь смог создать резервную копию. Запрещается удалять файлы, которые находятся в /opt/wimark/volumes/mongo! На платформе версии ниже 1.10 данные будут находится в /etc/wimark/volumes/mongo. |
Для создания резервной копии следует выполнить следующие действия:
Зайти в БД:
Блок кода linenumbers true docker exec -it $(docker ps | grep 'one-mongo-1\|one-mongo-ha-1' | \ awk '{ print $1;}') mongosh --port 30001 --host rs0/mongo-rs-1
Информация |
---|
--port 30001 --host rs0/mongo-rs-1 Данные параметры актуальны для платформы HA версии 1.10 и выше. --host rs0/mongo-rs-1 Для платформы HA версии ниже 1.10 и платформы Standalone следует убрать этот параметр из команды. |
...
Блок кода | ||
---|---|---|
| ||
var collectionNames = db.getCollectionNames(),stats = [];collectionNames.forEach(function (n) {stats.push(db.getCollection(n).stats());});stats = stats.sort(function(a, b) {return b['storageSize'] - a['storageSize'];});stats.forEach(function(c) {print(`${c['ns']}: ${c['size']} (${(c['size'] / 1073741824).toFixed(2)} GB) | ${c['storageSize']} (${(c['storageSize'] / 1073741824).toFixed(2)} GB)`);}); |
Ниже приведены коллекции, которые часто занимают больше всего места на сервере. Самые тяжелые коллекции в БД - это коллекции со статистикой.
Блок кода | ||
---|---|---|
| ||
test.stats: NumberLong("138543878247") (129.03 GB) | NumberLong("34453618688") (32.09 GB) test.cpe_scan_data: NumberLong("67173999414") (62.56 GB) | NumberLong("12744724480") (11.87 GB) test.cpe_stat_info: NumberLong("3049385786") (2.84 GB) | 874041344 (0.81 GB) test.client_stats: 1314995013 (1.22 GB) | 513564672 (0.48 GB) test.client_addr: 1474389854 (1.37 GB) | 233897984 (0.22 GB) test.client_rf: 710458980 (0.66 GB) | 199856128 (0.19 GB) test.events: 645953888 (0.60 GB) | 178802688 (0.17 GB) test.client_session_info: 314861397 (0.29 GB) | 65781760 (0.06 GB) |
...
Предупреждение |
---|
Это следует делать только для тех коллекций, которые содержат только статистику или другую подобную информацию. Не рекомендуется ограничивать коллекции, которые содержат информацию о настройках, количестве ТД и т.п. |
Можно использовать следующий параметр, в который включено большинство коллекций со статистикой:
Блок кода | ||
---|---|---|
| ||
mongodump --port 30001 --db=test --excludeCollection=client_addr --excludeCollection=cpe_scan_data --excludeCollection=cpe_stat_info --excludeCollection=client_stats --excludeCollection=client_rf --excludeCollection=events --excludeCollection=operations --excludeCollection=client_session_info --excludeCollection=bss_stat_info --excludeCollection=client_stat_info --excludeCollection=stats --excludeCollection=lbs_client_data --excludeCollection=license_log_daily --excludeCollection=lbs_client_coords --excludeCollection=lbs_cpe_info --excludeCollection=lbs_client_probes_testing --excludeCollection=lbs_client_probes --gzip --archive=/tmp/backup_wimark.gz |
Если копировать преимущественно без статистики, то данный бэкап будет занимать 2~100 МБ, в зависимости от объема данных и выбранных коллекций.
5. Выйти из контейнера (команда exit) и копировать резервную копию на сервер:
...
Блок кода | ||
---|---|---|
| ||
cp -r /opt/wimark/static /opt/wimark_backup/static cp /opt/wimark/set_state.sh /opt/wimark_backup/set_state.sh cp /opt/wimark/checker.sh /opt/wimark_backup/checker.sh |
Проверить, что все файлы и сам бэкап на месте. Если всё готово, необходимо выполнить действия в соответствии с разделом “Обновление ПО и перенос БД” инструкции по установке Wimark One: установка
Предупреждение |
---|
При переустановки платформы лицензия на платформе - слетит! |
Ограничение размера коллекций в MongoDB
После того, как данные были восстановлены и новая платформа установлена, можно ограничить коллекции и создать индексы:
Создать скрипт для ограничения определенных коллекций:
Блок кода | ||
---|---|---|
| ||
// cappedLimit исчисляется в байтах (500МБ) var cappedLimit = 500000000 var cappedColls = { "lbs_client_data": cappedLimit, "lbs_client_probes": cappedLimit, "lbs_client_coords": cappedLimit, "client_addr": cappedLimit, "stats": cappedLimit, "events": cappedLimit, "cpe_scan_data": cappedLimit, }; for (var coll in cappedColls) { var isExist = db.getCollection(coll).exists(); if (isExist != null) { db.getCollection(coll).drop(); print("INFO: " + coll + " already exists and will be recreated."); } db.createCollection(coll); print("INFO: " + coll + " capped to " + cappedColls[coll]); db.runCommand({ "convertToCapped": coll, size: cappedColls[coll] }); } |
...
Блок кода | ||
---|---|---|
| ||
db.getCollection("stats").stats() |
Если коллекция ограничена, то в выводе будет строка capped: true и размер MaxSize, равный ранее заданному максимальному размеру 128 байт.