Сравнение версий

Ключ

  • Эта строка добавлена.
  • Эта строка удалена.
  • Изменено форматирование.

Оглавление

Создание резервной копии БД

Предупреждение

На сервере должно быть достаточно свободного места для того, чтобы контейнер с БД смог запуститься, и пользователь смог создать резервную копию.

Запрещается удалять файлы, которые находятся в /opt/wimark/volumes/mongo!

На платформе версии ниже 1.10 данные будут находится в /etc/wimark/volumes/mongo.


Для создания резервной копии следует выполнить следующие действия:

  1. Зайти в БД:

    Блок кода
    linenumberstrue
    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 следует убрать этот параметр из команды.
При ситуации, где mongo-rs-1 недоступен, следует заменить его на mongo-rs-2.

...

Блок кода
linenumberstrue
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)`);});

Ниже приведены коллекции, которые часто занимают больше всего места на сервере. Самые тяжелые коллекции в БД - это коллекции со статистикой.

Блок кода
linenumberstrue
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)

...

Предупреждение

Это следует делать только для тех коллекций, которые содержат только статистику или другую подобную информацию. Не рекомендуется ограничивать коллекции, которые содержат информацию о настройках, количестве ТД и т.п.

Можно использовать следующий параметр, в который включено большинство коллекций со статистикой:

Блок кода
linenumberstrue
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) и копировать резервную копию на сервер:

...

Блок кода
linenumberstrue
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

После того, как данные были восстановлены и новая платформа установлена, можно ограничить коллекции и создать индексы:

  1. Создать скрипт для ограничения определенных коллекций:

Блок кода
linenumberstrue
// 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] });
}

...

Блок кода
linenumberstrue
db.getCollection("stats").stats()


Если коллекция ограничена, то в выводе будет строка capped: true и размер MaxSize, равный ранее заданному максимальному размеру 128 байт.