# # 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 # Размер истории команд # ============================================================================ # [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 # Интервал чекпоинтов (сек) # ============================================================================ # [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 # Дни хранения бэкапов