Files
futriix/config.toml

473 lines
30 KiB
TOML
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
#
# Copyright 2026 Grigorii Safronov
#
# Licensed under the CDDL, Version 1.0 (the "License");
# you may not use this file except in compliance with the License.
#
# You may obtain a copy of the License at
# https://opensource.org/licenses/CDDL-1.0
#
# ============================================================================
# КОНФИГУРАЦИОННЫЙ ФАЙЛ СУБД futriiX
# ============================================================================
# Данный файл содержит все настройки для работы кластерной СУБД futriiX.
# Формат: TOML (Tom's Obvious, Minimal Language)
# ============================================================================
# ============================================================================
# [cluster] - НАСТРОЙКИ КЛАСТЕРА
# ============================================================================
# Определяет конфигурацию узла в распределённом кластере.
# Все узлы должны иметь одинаковое имя кластера для взаимодействия.
# ============================================================================
[cluster]
name = "test_cluster" # Имя кластера (должно совпадать на всех узлах)
node_ip = "192.168.0.103" # IP-адрес узла (0.0.0.0 - все интерфейсы)
node_port = 9876 # Порт для коммуникации между узлами
raft_port = 9878 # Порт для Raft консенсус-протокола
raft_data_dir = "raft_data" # Директория для данных Raft (логи, снапшоты)
bootstrap = true # Первый узел в кластере (только для инициализации)
nodes = [ # Список всех узлов кластера
"192.168.0.103:9878", # Формат: "IP:RaftPort"
]
# ---------- Таймауты Raft ----------
heartbeat_timeout_ms = 1000 # Интервал heartbeat от лидера (мс)
election_timeout_ms = 1000 # Таймаут до начала выборов (мс)
commit_timeout_ms = 500 # Таймаут коммита (мс)
# ---------- Snapshot настройки ----------
snapshot_interval_min = 30 # Интервал создания снапшотов (минут)
snapshot_threshold = 1000 # Количество логов до создания снапшота
# ---------- Split-brain защита ----------
split_brain_prevention = true # Включить защиту от split-brain
recovery_timeout_sec = 30 # Таймаут восстановления (сек)
# ---------- Региональные настройки ----------
region = "default" # Регион узла (для географического распределения)
priority_zone = 0 # Приоритетная зона (0-9, меньше = выше приоритет)
# ============================================================================
# [storage] - НАСТРОЙКИ ХРАНИЛИЩА
# ============================================================================
# Определяет параметры физического хранения данных.
# ============================================================================
[storage]
page_size_mb = 64 # Размер страницы памяти (МБ)
max_collections = 100 # Максимальное количество коллекций в БД
max_documents_per_collection = 1000000 # Максимум документов в коллекции
default_engine = "row" # Движок хранения по умолчанию
enable_custom_engines = true # Включить поддержку кастомных движков
# ============================================================================
# [repl] - НАСТРОЙКИ REPL (Read-Eval-Print Loop)
# ============================================================================
# Настройки интерактивной командной строки для управления СУБД.
# ============================================================================
[repl]
prompt_color = "#00bfff" # Цвет приглашения (HEX)
history_size = 1000 # Размер истории команд
migration_commands = true # Enable migration commands in REPL
# ============================================================================
# [log] - НАСТРОЙКИ ЛОГИРОВАНИЯ
# ============================================================================
# Определяет, куда и с какой детализацией сохранять логи.
# ============================================================================
[log]
log_file = "futriix.log" # Путь к файлу логов
log_level = "debug" # Уровень: debug, info, warn, error, fatal
# ============================================================================
# [api] - НАСТРОЙКИ HTTP API
# ============================================================================
# Порт для REST API сервера.
# ============================================================================
[api]
port = 8080 # Порт HTTP API
# ============================================================================
# [replication] - НАСТРОЙКИ РЕПЛИКАЦИИ
# ============================================================================
# Управляет репликацией данных между узлами кластера.
# Мастер-мастер репликация НЕ ИСПОЛЬЗУЕТСЯ (удалена из архитектуры).
# ============================================================================
[replication]
enabled = false # Включить репликацию
sync_replication = false # Синхронная репликация (ждёт подтверждения)
replication_timeout_ms = 5000 # Таймаут репликации (мс)
max_replica_lag_ms = 5000 # Максимальная задержка для чтения с реплик
# ============================================================================
# [compression] - НАСТРОЙКИ СЖАТИЯ
# ============================================================================
# Алгоритмы и параметры сжатия данных для экономии места.
# ============================================================================
[compression]
enabled = true # Включить сжатие данных
algorithm = "snappy" # Алгоритм: snappy, lz4, zstd
level = 3 # Уровень сжатия (1-9)
min_size = 1024 # Минимальный размер документа для сжатия (байт)
# ============================================================================
# [webui] - НАСТРОЙКИ ВЕБ-ИНТЕРФЕЙСА
# ============================================================================
# Встроенный веб-интерфейс для мониторинга и управления.
# ============================================================================
[webui]
enabled = true # Включить веб-интерфейс
port = 9080 # Порт веб-интерфейса
theme = "dark" # Тема: dark, light
# ============================================================================
# [performance] - НАСТРОЙКИ ПРОИЗВОДИТЕЛЬНОСТИ
# ============================================================================
# Оптимизация производительности системы.
# ============================================================================
[performance]
enable_pipeline = true # Pipeline репликация (группировка команд)
batch_size = 100 # Размер батча операций
read_from_follower = true # Чтение из реплик (асинхронная репликация)
max_connections = 1000 # Максимум соединений
read_replica_delay_ms = 100 # Максимальная задержка для чтения с реплик
# ============================================================================
# [security] - НАСТРОЙКИ БЕЗОПАСНОСТИ
# ============================================================================
# TLS шифрование и аутентификация клиентов.
# ============================================================================
[security]
enable_tls = false # Включить TLS
cert_file = "" # Путь к сертификату (.crt)
key_file = "" # Путь к ключу (.key)
ca_file = "" # Путь к CA (.crt)
min_version = "1.2" # Минимальная версия TLS
# ============================================================================
# [monitoring] - НАСТРОЙКИ МОНИТОРИНГА
# ============================================================================
# Сбор метрик и распределённый трейсинг.
# ============================================================================
[monitoring]
enable_metrics = true # Включить Prometheus метрики
metrics_port = 9090 # Порт для метрик
enable_tracing = false # Включить распределённый трейсинг
trace_sample_rate = 0.01 # Частота сэмплирования (0-1)
# ============================================================================
# [recovery] - НАСТРОЙКИ ВОССТАНОВЛЕНИЯ
# ============================================================================
# Автоматическое восстановление после сбоев.
# ============================================================================
[recovery]
auto_rejoin = true # Автоматическое переподключение к кластеру
max_retry_sec = 300 # Максимальное время повторов (сек)
data_replication_timeout_sec = 60 # Таймаут репликации данных (сек)
stale_read_timeout_sec = 30 # Таймаут для устаревших чтений (сек)
# ============================================================================
# [wal] - НАСТРОЙКИ WAL (Write-Ahead Log)
# ============================================================================
# Журнал предзаписи для обеспечения целостности данных.
# Поддерживает сегментирование и асинхронное восстановление.
# ============================================================================
[wal]
segment_size_mb = 64 # Размер сегмента WAL (МБ)
sync_interval_sec = 5 # Интервал синхронизации с диском (сек)
batch_size = 100 # Размер пакета записи
recovery_workers = 4 # Количество воркеров для восстановления
enabled = true # Включить WAL
async_recovery = true # Асинхронное восстановление
async_recovery_workers = 4 # Количество воркеров для асинхронного восстановления
async_recovery_buffer = 10000 # Размер буфера для асинхронного восстановления
# ============================================================================
# [mvcc] - НАСТРОЙКИ MVCC
# ============================================================================
# Multi-Version Concurrency Control для управления версиями документов.
# ============================================================================
[mvcc]
max_versions_per_doc = 10 # Максимум версий документа (0 = отключено)
visibility_map_size = 1048576 # Размер карты видимости (1M)
prune_interval_min = 5 # Интервал очистки версий (минут)
retention_days = 7 # Дни хранения старых версий
read_cache_size = 10000 # Размер кэша чтения
read_cache_ttl_sec = 300 # TTL кэша (сек)
# ============================================================================
# [transactions] - НАСТРОЙКИ ТРАНЗАКЦИЙ
# ============================================================================
# Управление транзакциями с поддержкой Saga и TCC.
# 2PC (Two-Phase Commit) НЕ ИСПОЛЬЗУЕТСЯ (удалён из архитектуры).
# ============================================================================
[transactions]
default_timeout_sec = 30 # Таймаут транзакции по умолчанию (сек)
deadlock_check_interval_sec = 1 # Интервал проверки дедлоков (сек)
max_savepoints_per_tx = 100 # Максимум точек сохранения в транзакции
enabled = true # Включить поддержку транзакций
checkpoint_interval_sec = 300 # Интервал чекпоинтов (сек)
# ============================================================================
# [saga] - НАСТРОЙКИ SAGA ОРКЕСТРАТОРА
# ============================================================================
# Отказоустойчивый оркестратор распределённых транзакций по протоколу SAGA.
# Обеспечивает выполнение длительных транзакций с компенсацией шагов.
# ============================================================================
[saga]
# Основные настройки
enabled = true # Включить SAGA оркестратор
coordinator_count = 3 # Количество координаторов (>= 3 для отказоустойчивости)
state_dir = "saga_states" # Директория для хранения состояний SAGA
# Настройки выполнения
max_retries = 5 # Максимальное количество попыток выполнения шага
retry_backoff_ms = 100 # Базовая задержка между повторными попытками (мс)
saga_timeout_sec = 300 # Таймаут выполнения SAGA (сек)
stuck_check_interval_sec = 10 # Интервал проверки зависших SAGA (сек)
# Настройки оркестрации
leader_election_interval_sec = 5 # Интервал выбора лидера (сек)
recovery_interval_sec = 30 # Интервал восстановления незавершённых SAGA (сек)
metrics_interval_sec = 60 # Интервал сбора метрик (сек)
# Настройки очистки и кэширования
cleanup_period_hours = 24 # Период очистки старых SAGA (часы)
max_cache_size = 10000 # Максимальное количество состояний в кэше
operation_retention_days = 7 # Время жизни выполненных операций (дни)
# Настройки производительности
channel_buffer_size = 10000 # Размер буфера каналов
async_recovery_workers = 4 # Количество воркеров для асинхронного восстановления
async_recovery_timeout_sec = 30 # Таймаут асинхронного восстановления (сек)
# Настройки синхронизации с диском
fsync_enabled = true # Принудительная синхронизация с диском
fsync_max_retries = 3 # Количество повторных попыток синхронизации
fsync_retry_delay_ms = 100 # Задержка между повторными попытками (мс)
# ============================================================================
# [acl] - НАСТРОЙКИ ACL (Access Control List)
# ============================================================================
# Управление доступом и ролями пользователей.
# ============================================================================
[acl]
max_denied_log_size = 10000 # Максимум записей в логе отказов
temporary_grant_ttl_hours = 24 # TTL временных разрешений (часы)
enable_role_hierarchy = true # Включить иерархию ролей
cache_ttl_sec = 60 # TTL кэша ACL (сек)
# ============================================================================
# [plugins] - НАСТРОЙКИ ПЛАГИНОВ
# ============================================================================
# Поддержка Lua скриптов и кастомных движков хранения.
# ============================================================================
[plugins]
enabled = true # Включить плагины
script_dir = "plugins" # Директория плагинов
allow_list = ["print", "math", "string", "table", "engine"] # Разрешённые Lua-библиотеки
max_lua_states = 100 # Максимум Lua-состояний
lua_state_ttl_sec = 600 # TTL неиспользуемого состояния (сек)
max_cpu_time_ms = 100 # Лимит CPU на плагин (мс)
max_memory_mb = 50 # Лимит памяти на плагин (МБ)
max_execution_time_sec = 5 # Лимит времени выполнения (сек)
max_instructions = 1000000 # Лимит инструкций Lua
hot_reload_interval_sec = 30 # Интервал проверки изменений (сек)
max_event_log_size = 1000 # Максимум записей в логе плагина
load_timeout_sec = 10 # Таймаут загрузки плагина (сек)
engine_plugin_dir = "engines" # Директория с движками-плагинами
# ============================================================================
# [engines] - НАСТРОЙКИ КАСТОМНЫХ ДВИЖКОВ
# ============================================================================
# Конфигурация различных движков хранения данных.
# ============================================================================
[engines]
# Встроенный row-based движок (всегда доступен)
[engines.row]
enabled = true
description = "Row-based storage engine (default)"
# Колоночный движок для аналитических нагрузок
[engines.columnar]
enabled = false
description = "Columnar storage engine for analytics"
config = { compression = "zstd", block_size = 65536 }
# Document-ориентированный движок (JSON-подобный)
[engines.document]
enabled = false
description = "Document-oriented storage engine"
config = { auto_index = true, max_nesting = 32 }
# Key-Value движок для простых операций
[engines.kv]
enabled = false
description = "Key-Value storage engine"
config = { ttl_enabled = true, ttl_default_seconds = 86400 }
# Time-series движок для временных рядов
[engines.ts]
enabled = false
description = "Time-series storage engine"
config = { chunk_interval_seconds = 3600, retention_days = 30 }
# Графовый движок для связей
[engines.graph]
enabled = false
description = "Graph storage engine"
config = { vertex_label = "node", edge_label = "relationship" }
# ============================================================================
# [cluster_tls] - TLS ДЛЯ МЕЖУЗЛОВОГО ОБЩЕНИЯ
# ============================================================================
# Шифрование трафика между узлами кластера.
# ============================================================================
[cluster_tls]
enabled = false # Включить TLS для межузлового общения
cert_file = "certs/node.crt" # Путь к сертификату узла
key_file = "certs/node.key" # Путь к ключу узла
ca_file = "certs/ca.crt" # Путь к CA (для взаимной аутентификации)
min_version = "1.2" # Минимальная версия TLS
mutual_auth = false # Взаимная аутентификация (mTLS)
key_rotation_days = 30 # Дни до ротации ключей
auto_generate = false # Автогенерация сертификатов при отсутствии
# ============================================================================
# [backpressure] - НАСТРОЙКИ BACKPRESSURE
# ============================================================================
# Защита системы от перегрузки.
# При достижении порогов начинает отклонять запросы или добавлять задержки.
# ============================================================================
[backpressure]
enabled = true # Включить backpressure
cpu_threshold = 0.80 # Порог CPU для срабатывания (0-1)
memory_threshold = 0.85 # Порог памяти для срабатывания (0-1)
queue_size_threshold = 10000 # Порог размера очереди
connection_threshold = 5000 # Порог количества соединений
check_interval_ms = 1000 # Интервал проверки (мс)
low_delay_ms = 100 # Задержка при низкой нагрузке (мс)
medium_reject_prob = 30 # Вероятность отклонения при средней (%%)
high_reject_prob = 70 # Вероятность отклонения при высокой (%%)
# ============================================================================
# [runtime_limits] - ОГРАНИЧЕНИЯ НА УРОВНЕ ВЫПОЛНЕНИЯ
# ============================================================================
# Жёсткие ограничения на размеры документов и коллекций.
# ============================================================================
[runtime_limits]
enabled = true # Включить ограничения
global_max_doc_size_mb = 16 # Макс. размер документа (МБ)
global_max_coll_size_mb = 10240 # Макс. размер коллекции (МБ) (10 GB)
global_max_docs_per_coll = 10000000 # Макс. документов в коллекции
# ============================================================================
# [autoscaling] - НАСТРОЙКИ АВТОМАСШТАБИРОВАНИЯ
# ============================================================================
# Автоматическое добавление/удаление узлов в зависимости от нагрузки.
# ============================================================================
[autoscaling]
enabled = false # Включить автомасштабирование
min_nodes = 1 # Минимум узлов
max_nodes = 10 # Максимум узлов
scale_up_threshold = 0.75 # Порог для увеличения (0-1)
scale_down_threshold = 0.30 # Порог для уменьшения (0-1)
scale_up_cooldown_sec = 300 # Cooldown после увеличения (сек)
scale_down_cooldown_sec = 600 # Cooldown после уменьшения (сек)
evaluation_interval_sec = 30 # Интервал оценки (сек)
predictive_enabled = true # Прогнозирование нагрузки
max_scale_up_nodes = 3 # Макс. узлов за одно увеличение
max_scale_down_nodes = 2 # Макс. узлов за одно уменьшение
# ============================================================================
# [schema_migration] - НАСТРОЙКИ МИГРАЦИИ СХЕМЫ
# ============================================================================
# Автоматическое обновление схемы данных при обновлении версии.
# ============================================================================
[schema_migration]
enabled = true # Включить миграции
migration_dir = "migrations" # Директория с миграциями
auto_migrate = true # Автоматическая миграция при старте
target_version = "2.1.0" # Целевая версия схемы
# ============================================================================
# [backup] - НАСТРОЙКИ БЭКАПОВ
# ============================================================================
# Планировщик резервного копирования данных.
# ============================================================================
[backup]
enabled = true # Включить планировщик бэкапов
backup_dir = "backups" # Директория для бэкапов
max_concurrent = 1 # Макс. одновременных бэкапов
compress_enabled = true # Сжатие бэкапов
retention_days = 7 # Дни хранения бэкапов
# =============================================================================
# CROSS-DATACENTER MIGRATION CONFIGURATION
# =============================================================================
[migration]
# Enable cross-datacenter migration
enabled = false
# Migration mode: "manual", "semi_auto", "auto"
mode = "semi_auto"
# Source datacenter configuration
[migration.source]
name = "dc-primary"
endpoint = "localhost:8080"
api_key = ""
timeout_sec = 30
# Target datacenter configuration
[migration.target]
name = "dc-secondary"
endpoint = "localhost:8081"
api_key = ""
timeout_sec = 30
# Migration settings
[migration.settings]
# Batch size for document transfer
batch_size = 1000
# Parallel workers
workers = 4
# Compression algorithm: "snappy", "lz4", "zstd"
compression = "snappy"
# Resume after interruption
resume_enabled = true
# Checkpoint interval (seconds)
checkpoint_interval_sec = 30
# Max retries for failed operations
max_retries = 3
# Retry backoff (seconds)
retry_backoff_sec = 5
# Collections to migrate (empty = all)
collections = []
# Exclude collections
exclude_collections = []
# Delta sync settings (incremental migration)
[migration.delta]
enabled = true
interval_sec = 60
max_lag_sec = 300
# Validation settings
[migration.validation]
enabled = true
sample_percent = 10
max_errors = 100