Перейти к содержанию

Таблицы и роли плагина

Справочник для администратора, который читает состояние S3R запросами SQL или выдаёт права: какие таблицы создаёт плагин, как они называются и где размещены, и какие роли Picodata открывают доступ к таблицам и к API управления.

Имена таблиц

Вид таблицы Имя Пример
глобальная постоянное s3r_tenant
таблица пространства имён, создаётся отдельно для каждого тенанта s3r_t<tenant_id>_<суффикс> s3r_t0_object для тенанта 0, s3r_t7_dir для тенанта 7

Обозначение <N> ниже — числовой tenant_id, а не часть имени таблицы.

Таблицы кластера

Каталог, учётные данные и квоты:

Таблица Размещение Содержимое
s3r_tenant глобальная тенанты, их FQDN, состояние, сертификаты и параметры сжатия
s3r_seq глобальная счётчики выдаваемых идентификаторов
s3r_bucket глобальная бакеты: владельцы, права, политика, версионирование, правила жизненного цикла, блокировка объектов, теги
s3r_bucket_gc глобальная бакеты, помеченные удалёнными, которые ещё очищает процесс bucketgc; пометка хранится в столбце deleted_at таблицы s3r_bucket
s3r_credential глобальная ключи доступа и сопоставление с пользователями
s3r_token_denylist глобальная отзыв токенов API управления: отдельный токен либо все токены субъекта, выпущенные до заданного момента
s3r_quota глобальная ограничения ресурсов
s3r_quota_usage шардированная по тенанту учтённое потребление хранимого объёма и числа объектов

Диски, группы размещения и состояние кластера:

Таблица Размещение Содержимое
s3r_cluster глобальная одна строка с состоянием и настройками кластера, см. Строка s3r_cluster
s3r_instance глобальная регистрация инстансов при начальном формировании: репликасет и домен отказа инстанса, причина отказа в регистрации, признак регистрации до перехода к формированию
s3r_disk глобальная диски кластера: инстанс (имя и UUID), путь, ярус, поддомен, ёмкость, состояние, номер форматирования и признак ожидающего форматирования
s3r_pg глобальная группы размещения: состав, геометрия, эпоха, раскладка, номер в цепочке, позиции плана, выбывающие диски, признак запрошенного восстановления размещения
s3r_tier глобальная действующая карта классов: ярус хранения, его класс хранения S3 и место в порядке ярусов
s3r_scrub_pg глобальная время последней полной проверки данных и чётности каждой группы размещения и итоги завершённых проверок
s3r_scrub_pg_cursor шардированная по номеру группы ход идущих сканирований проверки целостности: последняя проверенная полоса и найденное с начала сканирования

Дедупликация:

Таблица Размещение Содержимое
s3r_content_fingerprint шардированная по SHA-256 индекс дедупликации: отпечатки содержимого частей объектов, по одной строке на часть
s3r_dedup_ref шардированная по размещению общего объекта ссылки на общие объекты: по одной строке на каждый объект, который читает через общую копию

Строка s3r_cluster

Таблица содержит одну строку. В ней записаны:

  • состояние кластера и шаг начального формирования;
  • набор площадок;
  • шаблон, схема и классы блоков каждого яруса;
  • режим фонового контроля целостности (running или paused), автор и время его изменения;
  • последний запрос проверки;
  • период сканирования каталога и автор его изменения.

Таблицы тенанта

Все таблицы тенанта шардированные.

Таблица Содержимое
s3r_t<N>_object версии объектов: метаданные, теги, блокировка, внутренний способ размещения, класс хранения и карта размещения; part_no = 0 означает строку целого объекта
s3r_t<N>_dir директории для перечисления с разделителем
s3r_t<N>_mpu начатые составные загрузки
s3r_t<N>_mpu_part принятые части составных загрузок
s3r_t<N>_dir_gc очередь проверки опустевших директорий
s3r_t<N>_siterepl объекты, которые есть не на всех площадках
s3r_t<N>_damage реестр повреждённых полос: полосы, которые не удалось восстановить или согласовать, по объектам
s3r_t<N>_transition очередь переходов между классами хранения
s3r_t<N>_dedup_queue очередь дедупликации: записи для обновления индекса дедупликации

Размещение и доступ SQL

  • Таблицы пространства имён распределены по производным от бакета, директории и фрагмента ключам; таблицы блокового хранилища — по диску.
  • Шардированные таблицы размещаются в тире Picodata, указанном параметром storage_tier. Строки видны запросу SQL, выполненному на инстансе этого тира.
  • Доступ к перечисленным таблицам дают связки табличных разрешений s3r_table_reader и s3r_table_writer. Их не выдают человеку: они входят в роли s3r_observer и s3r_superuser, см. Ролевая модель тенантов.

Столбцы таблицы s3r_tenant

Основные столбцы:

Столбец Назначение
tenant_id малое постоянное число; входит в имена таблиц и в заголовки фрагментов, поэтому переименование тенанта эти данные не меняет
name уникальное имя, которое задаёт администратор
fqdn FQDN, по которому отвечает тенант (см. Адресация тенанта), или NULL. Хранится только доменное имя в нижнем регистре: значение со схемой, портом или путём, IP-адрес и localhost отклоняются с ответом 400
cert_chain, cert_key, mtls_ca материал TLS (см. Сертификат тенанта и выбор по SNI)
state одно из значений new, active, draining, dropped (см. Состояния тенанта)
default_cors правила CORS, с которыми создаются новые бакеты тенанта, в формате JSON, или NULL (см. Правила CORS тенанта по умолчанию)
appliance поля описания оборудования (см. ниже)

Запись default_cors командой SQL обходит проверку

Если документ некорректен, бакет создаётся без правил, в журнал инстанса пишется предупреждение s3r_tenant.default_cors is not a valid CORS configuration, а GET /v3/tenants/{id} и консоль показывают, что набор не задан.

Поля описания оборудования

Столбец appliance хранит поля, которые описывают развёртывание тенанта на программно-аппаратном комплексе: ns_count, os_count, s3gw_count, storage_lvl и failure_domain.

Плагин эти поля не применяет

API управления принимает эти поля при создании и изменении тенанта и возвращает их в том же виде. Применить их нельзя: все тенанты S3R делят один кластер и один набор инстансов, а сервисы s3r_api, s3r_meta и s3r_storage работают на одном тире. Поля сохраняются, чтобы клиент, который их задал, мог прочитать их обратно.

Исключение — поле redundancy_lvl: оно проверяется.

  • Значение задаётся строкой k+m, например 2+2, из числа уровней, которые возвращает запрос GET /v2/cluster/tiers-redundancy-levels.
  • Уровень, которого в кластере нет, отклоняется при создании тенанта ответом 400 с перечнем доступных уровней. Иначе ошибка возникала бы только при первой записи.
  • Размещение объектов к этому уровню не привязывается: объекты по-прежнему размещаются в соответствии с классом хранения.