... {toc} h2. Отказоустойчивость БД биллинга В 99% случаев БД повреждается при отключении питания. Поэтому, в [системных требованиях|http://docs.carbonsoft.ru/48693408] прописано обязательное наличие настроенного [UPS|http://docs.carbonsoft.ru/51380480] для штатного завершения работы сервера. Если UPS настроить в ближайшее время нет возможности воспользуйтесь [Как повысить выживаемость БД при сбоях питания|http://docs.carbonsoft.ru/68845609] h2. Система бэкапов # Бекап биллинга происходит раз в сутки с помощью команды /app/base/usr/local/bin/cron_backup.sh. Вручную. Вы можете выполнить данную операцию следующей командой {code}/etc/init.d/apps backup{code} # Лог бекапа лежит в файле {code}/app/base/var/log/cron_backup.sh.log{code} # Сам бекап состоит из последовательного вызова */app/* {color:red}*<имя app>*{color}*/service backup*, который создает бекап и */app/* {color:red}*<имя app>*{color}*/service backup_upload*, который занимается выгрузкой бекапа на ftp. Следовательно, если проблема с бекапом была во время создания бекапа, отлаживать можно именно /app/<имя app>/service backup. А если была проблема с выгрузкой бекапа, можно отлаживать /app/<имя app>/service backup_upload. Не выполняя полную процедуру бекапа всего. # На биллинге хранится только последний бекап. На Ftp старые бекапы не удаляются. # В процедуре backup_upload происходит не только выгрузка, но и чтение файлов с ftp, обновление файлов и создание директорий. Все эти действия должны быть разрешены на ftp-сервере. h2. Создание бэкапа вручную Запустить вручную создание бэкапа можно через консоль: {code} /app/asr_billing/service backup {code} Выгрузить на фтп: {code} /app/asr_billing/service backup_upload {code} h2. Настройка автоматического резервного копирования и выгрузки по FTP Настройка бэкпов производится меню Настройки платформы \-> Настройки резервного копирования... !0.png|border=1! !backupnew.png|border=1! Заполняете все нужные поля и сохраняете изменения. *IP-адрес FTP-сервера* \- адрес удаленнго FTP-сервера. На него будут копироваться копии БД. {info} Если порт на FTP сервере используется не стандартный (не 21й), то указывать его нужно через двоеточие. Например порт 1555 {code} 1.1.1.1:1555 {code} {info} *Бэкапить на FTP* \- выключает выгрузку на FTP. *Имя пользователя* \- логин для авторизации на FTP-сервере. *Пароль* \- пароль для авторизации на FTP-сервере. *Каталог на FTP-сервере* \- непосредственно в этот каталог будут записываться копии БД. *Ежедневная запись* \- включает резервное копирование. {color:#ff0000}Настоятельно рекомендуется активировать Ежедневную запись, без этой опции резервное копирование не будет происходить.{color} h3. Структура каталогов на ftp-сервере:
|
... h2. Восстановление БД из бэкапа {color:#000000}{*}Резервное копирование и восстановление из бекапов при помощи WinSCP{*}{color} В случае переноса данных системы на другой компьютер или переустановки системы с последующим восстановлением конфигурации и базы пользователей, необходимо сначала сделать полный бекап данных с работающей системы. Для того чтобы сделать полный бекап системы необходимо скопировать резервные копии самой базы пользователей и бекап конфигурационного файла системы. Это делается с помощью программы winscp, дистрибутив которой вы всегда можете найти в Интернете по адресу: [http://winscp.net/|http://winscp.net/+] Программа бесплатна. Процесс восстановления данных из бекапов можно разбить на два шага: *ШАГ 1: Копирование данных с сервера.* Подключаемся к серверу на 33 или 22 порт, либо иной порт, в зависимости от Ваших настроек !рез1.JPG|border=1! Убедитесь что данные введены верно и нажимайте "Login", после подключения вы увидите окно, похожее на обычный файловый менеджер с двумя панелями, слева будет ваш локальный компьютер, справа - файловая система Carbon Billing, вас интересует каталог BACKUP на ней. Путь такой: /app/asr_billing/mnt/backup/ Здесь хранятся ежедневные, ежемесячные и еженедельные бэкапы. Вы можете выбрать те, которые нужны Вам. *Примечание*: Статистика копируется отдельно из папки: /app/collector/var/stat/raw/ *Примечание*: Восстановиться можно из локальных бэкапов, которые хранятся в /mnt/backup/app/asr_billing/backup/ Эти бэкапы не архивированные, поэтому при восстановлении из бэкапа пункт 1 ШАГа 2 нужно пропустить. Данные бэкапы делаются автоматически каждый день, если в разделе /mnt/backup/ достаточно места. *ШАГ 2: Восстановление из бэкапа.* *1.* Подготовка Восстанавливать БД можно из локального бэкапа (Дневной, Недельный, Месячный) либо из бэкапа, который копируется на FTP сервер. На FTP сервере бэкапы хранятся в архиве, поэтому после копирования на сервер с биллингом их нужно распаковать. Например имя бэкапа backup_daily_2016-30-21_02-53_asr_billing.tar.gz, тогда команда распаковки будет выглядеть вот так: {code} tar xzf backup_daily_2016-30-21_02-53_asr_billing.tar.gz /app/asr_billing/var/backup_data/billing.gdb.gbk -O > /mnt/backup/app/asr_billing/backup/billing.gdb.gbk {code} *2.* Восстанавливаем БД из бэкапа. При восстановлении из локального бэкапа имя будет содержать дату и время, так вы поймете какой из бэкапов последний и наиболее актуальный. Допустим, что имя бэкапа billing.gdb.gbk, тогда сделать нужно следующее: {code} chroot /app/asr_billing/ gbk2gdb.sh /mnt/backup/billing.gdb.gbk /var/db/billing_prepare.gdb exit {code} *3.* Останавливаем биллинг {code} /app/asr_billing/service stop {code} {note} При появлении сообщения о переходе базы в safemode такого содержания: {code}error: asr_billing in safe mode. Check logs. /app/base/var/log/watchdog.log and other log You must fix the problem or get support from developer! status: safemode from chroot /app/asr_billing /sbin/init start prevstate=stop OK echo 'stop OK' >/app/asr_billing/var/lib/app.state {code} Переходите к пункту 4. В данном случае, биллинг уже является остановленным. {note} *4.* Проверяем, что в /app/asr_billing/var/db есть файл billing.gdb.stop (это файл текущей БД) Если он есть, то перемещаем его рядом (в этот же каталог) с указанием даты, например 2016-08-03 (позже можно будет удалить): {code} cd /app/asr_billing/var/db/ mv billing.gdb.stop blling.2016-08-03.gdb.stop {code} {note}Если же файла нет, то приступайте к пункту 5 Если произошел reset сервера (например по причине сбоя электропитания), то с высокой вероятностью база данных испортится, и файл БД переместится в /app/asr_billing/var/db/bad/billing.corrupt\*{note} *5.* Превращаем восстановленный бэкап в полноценную БД {code} chroot /app/asr_billing/ cd /var/db mv ./billing_prepare.gdb ./billing.gdb.stop chown firebird:firebird ./billing.gdb.stop exit {code} *6.* Запускаем биллинг {code} echo 'stop OK' > /app/asr_billing/var/lib/app.state /app/asr_billing/service restart {code} *7.* Проверяем что все демоны стартовали и не растут ошибки Для этого 2 раза подряд запускаем проверку сервера: {code} server_check {code} При этом могут быть записи вида: {code} - Критические ошибки в логе worker за последний час: 3 [СБОЙ] {code} или {code} - Ошибки в логе traf-reporter за последний час: 4 [СБОЙ] {code} Если в течение двух запусков проверки значения не меняются - все в порядке. Если растут значения "Критические ошибки в логе worker за последний час" - сразу обратитесь в техническую поддержку. Если растут значения "Ошибки в логе traf-reporter за последний час" - выполните команды {code} chroot /app/asr_billing/ yes | cp /skelet/var/db/buff_traf.gdb /var/db/ chown firebird:firebird /var/db/buff_traf.gdb chmod g+w /var/db/buff_traf.gdb /etc/init.d/radiusd_traf restart {code} *8.* Восстанавливаем финансовые операции, которые прошли после создания бэкапа, но до падения БД.\* Пример, нужно восстановить данные за сентябрь 2016 года после восстановления БД в этот день. {code} chroot /app/asr_billing/ /usr/local/bin/restore_pays.sh /var/db/raw.tmp/201609/pay/ {code} *9.* После восстановления всех финансовых операций, по-прежнему находясь в контейнере биллинга выполните следующую команду {code} python /usr/lib/python2.6/site-packages/python_tools/client_fix_scripts/fix_generators2.py {code} h2. Восстановление демонстрационной или пустой БД *1.* Останавливаем биллинг {code} /app/asr_billing/service stop {code} *2.* При необходимости сохраняем текущую БД {code} mv /app/asr_billing/var/db/billing.gdb.stop /root/ {code} *3.* Копируем в рабочий каталог: *a)* демо БД {code} yes | cp -p /app/asr_billing/skelet/var/db/billing.gdb /app/asr_billing/var/db/billing.gdb.stop {code} *b)* Или пустую БД {code} yes | cp -p /app/asr_billing/skelet/var/db/billing_system.gdb /app/asr_billing/var/db/billing.gdb.stop {code} А также обязательно пустую БД трафика {code} yes | cp -p /app/asr_billing/skelet/var/db/buff_traf.gdb /app/asr_billing/var/db/buff_traf.gdb.stop {code} *4.* Запускаем биллинг {code} /app/asr_billing/service start {code} h2. Свободного места на диске критично мало Если после выполнения команды {code}/app/asr_billing/service start {code} Вы получаете достаточно объемный вывод, в конце которого содержится абзац следующего содержания: {code} Свободного места на диске критично мало. Для предотвращения необратимых проблем, биллинг переходит в safe-mode. Освободите свободное место на диске и запустите команду /app/asr_billing/service start {code} Порядок действий по восстановлению будет иной. В таком случае БД биллинга не повреждена, а остановлена для сохранности. Произведите следующие действия: *ШАГ 1. Очистка свободного пространства* *ШАГ 2. Восстановление БД в работу* *1.* Зайтите в чрут биллинга {code}chroot /app/asr_billing{code} *2.* Найдите последний по времени создания файл в папке /var/db/safemode, для этого выполните команду {code}# ls -1trhd /var/db/safemode/* | tail -n 1 /var/db/safemode/billing.gdb.save_mode.2017-02-22_15-42-43.gdb{code} *3.* Скопируйте данный файл в папку, где он должен располагаться для запуска биллинга и выставьте правильные права доступа к файлу {code}# mv /var/db/safemode/billing.gdb.save_mode.2017-02-22_15-42-43.gdb /var/db/billing.gdb.stop # chmod firebird:firebird /var/db/billing.gdb.stop{code} *4.* Выйдите из чрута и снова выполните запуск биллинга {code}# exit # /app/asr_billing/service restart{code}
|