Шардирование

Начиная с версии StaffCop Enterprise 4.7, шардирование поддерживается из коробки.

Принцип работы

Шардирование — принцип проектирования базы данных, при котором логически независимые строки таблицы базы данных хранятся раздельно, заранее сгруппированные в секции. Эти секции, в свою очередь, размещаются на разных, физически и логически независимых серверах базы данных. При этом один физический узел кластера может содержать несколько серверов баз данных.

В Staffcop шардирование работает следующим образом:

  1. Создаётся несколько таблиц, разбитых по месяцам с 1 числа, таблица на следующий месяц и дефолтная таблица (agent_event_default).

  2. Таблица текущего месяца заполняется по мере поступления событий.

../_images/shard_1.png

Примечание

agent_event_default — таблица в которую попадают события, не попавшие ни в одну из созданных таблиц. Например, если на агенте выставлено неверное время (месяц, год).

Если agent_event_default увеличилась до большого размера, значит где-то возникла проблема или что-то работает некорректно.

Полезные команды

Список команд, с помощью которых можно произвести диагностику или посмотреть информацию.

Действие

Команда

Комментарий

Проверить, включено ли
шардирование

sudo staffcop shard install

Если шардирование включено, на экране появится сообщение
Sharding already enabled.

Вывести список шардов

sudo staffcop shard list

Выводит список всех таблиц, разбитых по месяцам;
указывает их размер.

Посмотреть, какие данные
хранятся в таблице table

echo "select count(*), min(local_time), max(local_time) from agent_event_2024_08_01 group by date_trunc('month', local_time)" | staffcop sql

где table заменить на:
agent_event, если требуется посмотреть данные по всем шардам;
agent_event_YYYY_MM_01, где YYYY — год, а MM — месяц, если требуется посмотреть данные за месячный шард.

Результатом вывода будет количество событий в выбранной таблице, локальное время первого события и последнего.

Создать «холодное» хранилище

sudo staffcop shard cold
/var/lib/staffcop/upload/coldbase

Создаёт «холодное» хранилище на другом диске, например для создания архива .

«Заморозить» таблицу

staffcop shard freeze <table_name>

Команда заморозит таблицу table_name и перенесёт её на медленный диск.


Внимание

Перед началом «заморозки» остановите nginx:

sudo service nginx stop

После завершения запустите nginx:

sudo service nginx start

Удалить данные за месяц

staffcop shard drop <table_name>

Удаляет таблицу table и привязанные к ней файлы.

Удалить данные за
несколько месяцев

staffcop shard cleanup n

Удаляет все таблицы, кроме n:

0 — удаляет все таблицы;
1 — оставляет только текущий месяц;
2 — оставляет текущий и предыдущий месяцы;
и т. д.

Команда удаляет шарды в PostgreSQL, партиции в ClickHouse и привязанные к ним файлы.

Удалить партицию в ClickHouse

staffcop clickhouse drop <partition>

Удаляет партицию <partition> в ClickHouse.

Удаление шарда через веб-интерфейс

Примечание

При удалении шарда, будут удалены все файлы, привязанные к указанной таблице.

Удалить шарды в PostgreSQL и ClickHouse можно из веб-интерфейса сервера Staffcop. Для этого в разделе Панель управления — Базы данных выберите интересующую вас базу и в выпадающем меню Выполнить действие выберите Удалить данные.

../_images/shard_cleanup_web.png