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

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

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

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

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

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

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

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

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

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

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

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

  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 <tablespace_name>

где <tablespace_name> – имя базы данных.

Примечание

Копирование базы 13 ГБ занимает 39 минут, копирование базы 3,3 ТБ занимает 4 часа.

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

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

bash /usr/share/staffcop/bin/db/experimental/drop_shards -d <основная бд> -n <кол-во шардов> -o ASC

где:

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

-n определяет количество шардов;

-o ASC удаляет шарды в порядке убывания с начала текущего года. Например, для удаления данных двух предыдущих годов укажите -n 24 -o ASC.

В результате основная база данных будет содержать только те данные, которые вы хотите оставить.

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

bash /usr/share/staffcop/bin/db/experimental/drop_shards -d <архивная бд> -n <кол-во шардов> -о DESC

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

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

./bin/db/experimental/cleanup_archive_data

Применение изменений

Перезапустите Staffcop:

sudo staffcop reinit

Перенесите данные в ClickHouse из PostgreSQL:

OVERRIDE_DBNAME=<архивная бд> staffcop clickhouse reinit
OVERRIDE_DBNAME=<архивная бд> staffcop clickhouse pump

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

../_images/db_arch_1.png

Итоги работы

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

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

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

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

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