Каталог Поиск 0 Сравнить 0 Закладки 0 Корзина Войти
Каталог
105082, Москва, ул. Фридриха Энгельса, 75с21, БЦ Бауманский ИТКОЛ
Пн - Пт: с 09-00 до 18-00 Сб: с 10-00 до 18-00 Вс: выходной
Страницы: 1 2 След.
RSS
Размер базы данных UniFi – заполняет диск Debian, UniFi Network
 
У меня 168 UniFi узлов, обслуживающих около 600 клиентов. Мне постоянно приходится переустанавливать контроллер UniFi снова и снова. Через пару месяцев контроллер заполняет диск. Я использую UniFi 2.3.8 на Ubuntu 12.04. Второй экземпляр mongodb выключен, и я запускаю с флагом --smallfiles. Также у меня настроен logrotate.d для ротации файла mongodb.log. Проблема в файлах ace.##, которые лежат в /var/lib/unifi/db

root@unifi:/var/lib/unifi/db# ls -larth  
total 14G  
-rw-r--r-- 1 root root    5 Dec 21 17:42 version  
drwxr-xr-x 3 root root 4.0K Mar 11 11:56 .  
drwxr-xr-x 5 root root 4.0K Mar 11 12:08 ..  
drwxr-xr-x 2 root root 4.0K Mar 11 12:08 journal  
-rwxr-xr-x 1 root root    5 Mar 11 12:25 mongod.lock  
-rw------- 1 root root 2.0G Mar 11 12:42 ace.10  
-rw------- 1 root root 256M Mar 11 12:42 ace.2  
-rw------- 1 root root 2.0G Mar 11 12:42 ace.9  
-rw------- 1 root root  16M Mar 11 12:42 ace.ns  
-rw------- 1 root root 2.0G Mar 11 12:42 ace.7  
-rw------- 1 root root 2.0G Mar 11 12:42 ace.8  
-rw------- 1 root root  64M Mar 11 12:42 ace.0  
-rw------- 1 root root 2.0G Mar 11 12:42 ace.6  
-rw------- 1 root root 128M Mar 11 12:42 ace.1  
-rw------- 1 root root 1.0G Mar 11 12:42 ace.4  
-rw------- 1 root root 2.0G Mar 11 12:42 ace.5  
-rw------- 1 root root 512M Mar 11 12:42 ace.3

Через пару месяцев эти файлы вырастают больше диска (24 ГБ), и тогда приходится удалять/чистить UniFi, переустанавливать и восстанавливать из бэкапа.

Есть ли способ обрезать эти файлы базы данных? Мне совсем не важно, кто был в сети 60 дней назад, не важно, сколько данных они передали и к какой точке доступа были подключены. Меня устроило бы решение, которое хранит данные 30 дней, а потом удаляет их.

Немного помощи от команды Ubiquiti, пожалуйста?
 
Скрипт работает отлично. Всегда так и работал. Те, у кого возникли проблемы, просто не следовали инструкциям по установке и у них устаревшая версия mongo.  
Требуется версия v2+. Это не должно стать проблемой, так как у вас должен быть настроен репозиторий mongo 10gen и установлены обновления (это касается только Linux, для Windows и Mac уже идет правильная версия в пакете). Плюс, так как контроллер зависит от mongo, у вас могут быть другие проблемы, если обновление проведено некорректно. На данный момент в deb-пакете версии v3.2.1 нет проверки зависимостей, но я гарантирую, что у вас будут проблемы с контроллером в целом, если вы используете mongo 1.x.  
С уважением, Mike
 
Кто-нибудь проверял этот скрипт на версии 3.2.1? Хочу скоро обновиться и интересно, будет ли скрипт по-прежнему работать.
 
Я пытаюсь установить этот скрипт очистки на свой ReadyNAS с Debian Wheezy. Но я даже не могу подключиться к mongodb:

# mongo --port 27117  
Версия MongoDB shell: 2.0.6  
подключение к: 127.0.0.1:27117/test  
Пн 23 июн 20:45:49 Ошибка: не удалось подключиться к серверу 127.0.0.1:27117 shell/mongo.js:86  
исключение: connect failed  

Есть какие-нибудь идеи? Спасибо.  
П.С. Или еще лучше: есть ли хороший способ указать расположение базы данных? Чтобы я мог поместить её на другой раздел.
 
Если честно, я хочу сказать, что если у вас 64-битная ОС и 64-битная версия MongoDB, вам не придется постоянно сбрасывать данные, которые потом могли бы пригодиться. 2 ГБ — это совсем немного в современном мире, меньше, чем небольшой фильм в среднем качестве. R+C
 
Привет, @Uberseehandel! Понял. Значит, чтобы включить prune, нужно установить 64-битную ОС? В любом случае, всегда приятно иметь базу данных небольшого размера. С уважением.
 
Спасибо за ответы. @oojoshua: вот что я получил, запустив prune.

# mongo --port=27117 < prune.js  
Версия MongoDB shell: 2.4.1  
подключение к: 127.0.0.1:27117/tests  
переключено на базу ace  
["admin", "alarm", "alarmdef", "device", "event", "guest", "map", "map.chunks", "map.files", "scan", "session", "setting", "stat", "stat.daily.ap.00:27:22:7a:f0:7f", "stat.daily.ap.00:27:22:7a:f1:dc", "stat.daily.ap.00:27:22:aa:d9:d2", "stat.daily.ap.00:27:22:aa:d9:f2", "stat.daily.ap.00:27:22:aa:da:0d", "stat.daily.ap.00:27:22:aa:da:46", "stat.daily.ap.00:27:22:aa:da:64", "stat.daily.ap.00:27:22:aa:da:6a", "stat.daily.ap.00:27:22:aa:da:de", "stat.daily.map.4f51405f92ba5edf510dccca", "stat.daily.system", "stat.hourly.ap.00:27:22:7a:f0:7f", "stat.hourly.ap.00:27:22:7a:f1:dc", "stat.hourly.ap.00:27:22:aa:d9:d2", "stat.hourly.ap.00:27:22:aa:d9:f2", "stat.hourly.ap.00:27:22:aa:da:0d", "stat.hourly.ap.00:27:22:aa:da:46", "stat.hourly.ap.00:27:22:aa:da:64", "stat.hourly.ap.00:27:22:aa:da:6a", "stat.hourly.ap.00:27:22:aa:da:de", "stat.hourly.map.4f51405f92ba5edf510dccca", "stat.hourly.system", "system.indexes", "task", "user", "usergroup", "wlanconf"]

Среда, 30 апр., 12:56:48.769 Ошибка выполнения JavaScript: ReferenceError: name is not defined  
Среда, 30 апр., 12:56:48.772 Ошибка выполнения JavaScript: ReferenceError: name is not defined  
Среда, 30 апр., 12:56:48.777 Ошибка выполнения JavaScript: ReferenceError: query is not defined  
Среда, 30 апр., 12:56:48.780 Ошибка выполнения JavaScript: SyntaxError: Unexpected token }  
Среда, 30 апр., 12:56:48.784 Ошибка выполнения JavaScript: ReferenceError: dryrun is not defined  

Пока!

____________________________________________________________­_____________  
С уважением
 
Основная база данных — MongoDB. На сайте MongoDB советуют не использовать 32-битные версии в боевых системах. Поэтому в продакшене все контроллеры UniFi и mFi должны работать на 64-битной платформе, так как нельзя гарантировать, что вы всегда будете чистить базы данных, чтобы не допустить их роста больше 2 ГБ. Во многих случаях вы и не захотите чистить основную базу данных. Учтите, что MongoDB сильно ориентирован на чтение данных, а запись данных занимает время. Существуют удобные open source инструменты, которые позволяют работать с данными MongoDB для отчетности и BI-дашбордов. R+C
 
В Crontab — запускаем скрипт в 05:00 и перезагружаем систему (ежедневно) в 06:00. Перезагрузка, наверное, не обязательна, но мы заметили, что ежедневная перезагрузка всех радиоустройств UniFi и сервера решает много наших проблем.  
# m h dom mon dow command  
0 5 * * * /usr/bin/mongo --port=27117 < /usr/lib/unifi/bin/prune.js  
0 6 * * * /sbin/reboot  

Вот сам скрипт:  
use ace;  
collectionNames = db.getCollectionNames();  
for (i=0; i<collectionNames.length; i++) {  
  name = collectionNames[i];
  query = null;  
  if (name.indexOf('stat') == 0 || name.indexOf('event') == 0 || name.indexOf('alarm') == 0) {  
    query = {time: {$lt: new Date().getTime() - days*86400*1000}};  
  }  
  if (name.indexOf('session') == 0) {  
    query = {assoc_time: {$lt: new Date().getTime() - days*86400}};  
  }  
  if (name.indexOf('user') == 0) {  
    query = {last_seen: {$lt: new Date().getTime() - days*86400}};  
  }  

  print("Компактируем базу данных " + name + "...");  
  db.runCommand({compact: name});  

  if (query) {  
    count = db.getCollection(name).find(query).count();  
    print((dryrun ? "[тестовый прогон] " : "") + "удаляем " + count + " записей из " + name + "...");
    if (!dryrun)  
      db.getCollection(name).remove(query);  
  }  
}  

if (!dryrun) db.repairDatabase();  

Права на файл должны быть 644.  
Надеюсь, это поможет.
 
Это сообщение, которое я получаю при запуске скрипта.  
# mongo --port=27117 < prune.js  
Версия MongoDB shell: 2.4.1  
Подключение к: 127.0.0.1:27117/test30  
true  
Подключение к: 127.0.0.1:27117/aceace  
[
"admin",  
"alarm",  
"alarmdef",  
"device",  
"event",  
"guest",  
"map",  
"map.chunks",  
"map.files",  
"scan",  
"session",  
"setting",  
"stat",  
"stat.daily.ap.00:27:22:7a:f0:7f",  
"stat.daily.ap.00:27:22:7a:f1:dc",  
"stat.daily.ap.00:27:22:aa:d9:d2",  
"stat.daily.ap.00:27:22:aa:d9:f2",  
"stat.daily.ap.00:27:22:aa:da:0d",  
"stat.daily.ap.00:27:22:aa:da:46",  
"stat.daily.ap.00:27:22:aa:da:64",  
"stat.daily.ap.00:27:22:aa:da:6a",  
"stat.daily.ap.00:27:22:aa:da:de",  
"stat.daily.map.4f51405f92ba5edf510dccca",  
"stat.daily.system",  
"stat.hourly.ap.00:27:22:7a:f0:7f",  
"stat.hourly.ap.00:27:22:7a:f1:dc",  
"stat.hourly.ap.00:27:22:aa:d9:d2",  
"stat.hourly.ap.00:27:22:aa:d9:f2",  
"stat.hourly.ap.00:27:22:aa:da:0d",  
"stat.hourly.ap.00:27:22:aa:da:46",  
"stat.hourly.ap.00:27:22:aa:da:64",  
"stat.hourly.ap.00:27:22:aa:da:6a",  
"stat.hourly.ap.00:27:22:aa:da:de",  
"stat.hourly.map.4f51405f92ba5edf510dccca",  
"stat.hourly.system",  
"system.indexes",  
"task",  
"user",  
"usergroup",  
"wlanconf"  
]  
Пн, 23 дек 08:25:36.052 Ошибка выполнения JavaScript: ReferenceError: query не определён  
Пн, 23 дек 08:25:36.056 Ошибка выполнения JavaScript: SyntaxError: Неожиданный токен  
Всего доброго!
 
Я все еще не могу запустить этот скрипт. Кто-нибудь, пожалуйста, помогите. С наилучшими пожеланиями.
 
Меня просто поражает, что MongoDB требует 4 ГБ и продолжает расти, а резервная копия контроллера (всё без исключений) занимает всего 2,2 МБ. Что там вообще происходит?! Очень жду UniFi Lite.
 
В crontab как сделать так, чтобы вывод отправлялся на почту через MAILTO="user@domain.com"?
 
Не могли бы вы уточнить, что именно вы изменили и где запускали скрипт (в mongodb shell или нет)? Я запускаю скрипт в mongodb shell, но размер базы данных не меняется. Заранее спасибо.
 
Можете, пожалуйста, добавить функцию очистки базы данных через графический интерфейс, которая недавно появилась в контроллере mFi, в контроллер UniFI? Там всё очень удобно сделано, и код у нас уже есть.
 
Привет, Майк. Какие именно статистические данные этот скрипт удаляет? Просто хочу знать об этом заранее, чтобы после запуска вернуть свой контроллер в рабочее состояние. С уважением.
 
Я добавил в свой скрипт строку «compact», и никакого изменения в размере не заметил 😀 Вот такое дело, у всех по-разному, у меня это ничего не изменило.
 
Официальная ссылка на статью больше не ведёт в нужное место, но если погуглить «unifi clean database», то вы найдёте https://help.ubnt.com/hc/en-us/articles/204911424-UniFi-Remove-prune-older-data-and-adjust-mongo-database-size. Хочу добавить, что из-за малого свободного места команда prune всё равно не позволяла мне обновиться и нормально запустить mongo (да, места было действительно очень мало). Я добавил команду compact в скрипт автора и получил ещё 2 ГБ свободного места поверх того, что дала prune, после чего всё прошло гладко. Сразу под строкой: db.getCollection(name).remove(query); я добавил: db.getCollection(name).runCommand({ compact: name, force: 1 }); Эта команда замедляет выполнение и блокирует ввод-вывод во время работы (у меня на скромной виртуальной машине с 5.2 ГБ базы mongo она заняла около 30 секунд), но зато вы освобождаете кучу дополнительного места, если оно вам нужно.
 
Это не проблема, которую нужно «исправлять» в прямом смысле. Просто нужна 64-битная установка MongoDB. С тех пор, как началась эта очень старая ветка, MongoDB решила все вопросы, связанные с многопоточной записью и блокировками, и теперь при полноценной установке с шардингом и репликацией поддерживает более 350 000 транзакций в базе данных в секунду. MongoDB постоянно повторяет, что 32-битная версия предназначена только для разработки. R+C
 
Нужно ли ещё запускать указанный выше скрипт для очистки базы данных Unifi или эта проблема уже решена? Поможет ли включение функции «historical data retention»? У меня стоит Unifi версии 4.6.3. Я стараюсь настроить сервер так, чтобы за ним нужно было следить как можно меньше. Спасибо!
Страницы: 1 2 След.
Читают тему (гостей: 1)