Таблицы и роли плагина¶
Справочник для администратора, который читает состояние 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с перечнем доступных уровней. Иначе ошибка возникала бы только при первой записи. - Размещение объектов к этому уровню не привязывается: объекты по-прежнему размещаются в соответствии с классом хранения.