diff --git a/config.toml b/config.toml new file mode 100644 index 0000000..f5371d1 --- /dev/null +++ b/config.toml @@ -0,0 +1,472 @@ +# +# 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 + +