Создание архивной базы данных

В случае ухудшения работы сервера Staffcop Enterprise из-за большого объёма накопленных данных, можно разделить текущую базу данных на две: актуальную и архивную. В актуальной можно оставить данные за текущий календарный год, а в архивную поместить данные за всё предыдущее время работы.

Примечание

Начиная с версии 5.6 скрипт поддерживает создание архивной БД для основной БД, расположенной на другом хосте. См. параметр [DATABASE HOST] в п. 6 инструкции.

Итогом выполнения всех операций данной инструкции станут:

  • две базы данных:

    • архивная, в которой будут содержаться данные с года хххх до прошлого года включительно;

    • текущая, в которой будут храниться данные за текущий год;

  • возможность выбора базы данных для просмотра.

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

Перед созданием архивной базы данных сделайте бэкап БД. Резервное копирование гарантирует восстановление данных при потере.

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

Перед архивированием БД закройте старые инциденты или отключите защиту инцидентов. Если защита от удаления включена и есть открытые инциденты за текущий год, связанные с этими инцидентами шарды из архивной БД не удалятся.

Создать архив данных можно двумя способами:

  1. Скриптом.

  2. Командами.

Примечание

Скрипт ускоряет работу, но находится на стадии тестирования и доработки. По всем вопросам обращайтесь в поддержку за последней информацией.

Подготовка к архивации

  1. Убедитесь, что на вашем диске есть около 150% свободного места от размера текущей базы данных.

Примечание

При недостатке доступного пространства воспользуйтесь скриптом compact из п.4 инструкции в соседней вкладке.

  1. Если вы используете ClickHouse, создайте в нём базу данных ClickHouse по инструкции из раздела Создание архивной базы данных в соседней вкладке.

  2. Создайте папку для архива с правами доступа для PostgreSQL. Желательно сделать это на отдельном носителе:

sudo mkdir /mnt/separate_disk/<archive_name>
sudo chmod 700 /mnt/separate_disk/<archive_name>
sudo chown postgres:postgres /mnt/separate_disk/<archive_name>

где <archive_name> – имя архивной базы данных.

Примечание

Используйте для папок и баз данных простые имена, основанные на датах архивов. Например, archive_2022.

  1. Создайте папку archives, если она отсутствует:

sudo mkdir /var/lib/staffcop/archives
  1. Создайте символическую ссылку на новую папку:

cd /var/lib/staffcop/archives
sudo ln -s /mnt/separate_disk/<archive_name> <archive_name>
  1. Создайте новое табличное пространство и скопируйте в него базу данных:

bash /usr/share/staffcop/bin/db/experimental/copy_db_to_tablespace <ARCHIVE NAME> [DATABASE HOST] [--remote]

где:

<ARCHIVE NAME> — имя новой архивной базы данных;

[DATABASE HOST] — укажите этот параметр, только если база данных находится на другом хосте.

[--remote]— флаг, который указывает на необходимость удаленного подключения к БД.

Примечание

Скрипт экспериментальный и требует внимания оператора. По окончанию работы будет предложено создать архивную БД Clickhouse. Этот процесс выполняется долго, но уже не требует внимания. Копирование базы 13 ГБ занимает 39 минут, копирование базы 3,3 ТБ занимает 4 часа.

Удаление устаревших данных

  1. Запустите скрипт, который удаляет из основной базы данных шарды (месяцы), предшествующие текущему году:

bash /usr/share/staffcop/bin/db/experimental/drop_shards -d <MAIN DB NAME> [-n 100 (default 3)] [-o ASC (default)] -md true

где:

-d указывает на базу данных, из которой нужно удалить данные;

-n определяет количество шардов, значение по умолчанию — 3;

-o указывает порядок удаления шардов. ASC применяет порядок по возрастанию от самых старых данных до начала текущего года (значение по умолчанию);

-md при указании true отмечает указанную в параметре -d базу данных как основную, что влияет на получение списка шардов для удаления (по умолчанию false);

Пример: чтобы стереть данные за два предыдущих года, укажите -n 24 -md true. Порядок ASC применяется автоматически.

  1. Удалите шарды текущего года из архивной базы данных:

bash /usr/share/staffcop/bin/db/experimental/drop_shards -d <ARCHIVE NAME> [-n 100 (default 3)] -o DESC

где -o DESC означает, что вы удаляете данные в порядке убывания с последнего по первый месяц текущего года. Например, чтобы удалить все шарды текущего года, укажите -n 12 -o DESC.

  1. Удалите данные из PostgreSQL и ClickHouse архивной и основной БД:

./bin/db/experimental/cleanup_archive_data

Готово! При входе в Staffcop вы увидите новый архив в списке баз данных:

../_images/db_arch_1.png

Итоги работы

Итогом правильного выполнения всех операций станут:

  • основная и архивная базы данных, доступные для выбора при входе в веб-интерфейс;

  • возможность работы ClickHouse со всеми базами данных;

  • в основной базе данных будут выполняться политики, в архивной — нет.

Дата изменения: 10.07.2024