diff --git a/config.toml b/config.toml new file mode 100644 index 0000000..132977d --- /dev/null +++ b/config.toml @@ -0,0 +1,255 @@ +# +# 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 + +[cluster] + name = "test_cluster" + node_ip = "192.168.0.103" # Укажите ваш реальный IP + node_port = 9876 + raft_port = 9878 + raft_data_dir = "raft_data" + bootstrap = true # Флаг для первого узла в кластере + nodes = [ # Список узлов кластера + "192.168.0.103:9878", # Текущий узел + # "192.168.0.104:9878", # Другие узлы кластера + # "192.168.0.105:9878", + ] + + # Таймауты 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] + page_size_mb = 64 + max_collections = 100 + max_documents_per_collection = 1000000 + default_engine = "row" # Движок хранения по умолчанию: row, columnar, document, kv, ts, graph + enable_custom_engines = true # Включить поддержку кастомных движков + +[repl] + prompt_color = "#00bfff" + history_size = 1000 + +[log] + log_file = "futriix.log" + log_level = "debug" + +[api] + port = 8080 # Порт для HTTP API сервера + +[replication] + enabled = false + master_master = false + sync_replication = false + replication_timeout_ms = 5000 + +[compression] + enabled = true # Включить сжатие данных + algorithm = "snappy" # Алгоритм: snappy, lz4, zstd + level = 3 # Уровень сжатия (1-9, зависит от алгоритма) + min_size = 1024 # Минимальный размер документа для сжатия (байт) + +[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 # Максимум соединений + +# ========== ПАРАМЕТРЫ БЕЗОПАСНОСТИ ========== +[security] + enable_tls = false # Включить TLS + cert_file = "" # Путь к сертификату + key_file = "" # Путь к ключу + ca_file = "" # Путь к CA + min_version = "1.2" # Минимальная версия TLS + +# ========== ПАРАМЕТРЫ МОНИТОРИНГА ========== +[monitoring] + enable_metrics = true # Включить Prometheus метрики + metrics_port = 9090 # Порт для метрик + enable_tracing = false # Включить распределённый трейсинг + trace_sample_rate = 0.01 # Частота сэмплирования (0-1) + +# ========== ПАРАМЕТРЫ ВОССТАНОВЛЕНИЯ ========== +[recovery] + auto_rejoin = true # Автоматическое переподключение + max_retry_sec = 300 # Максимальное время повторов + data_replication_timeout_sec = 60 # Таймаут репликации данных + stale_read_timeout_sec = 30 # Таймаут для устаревших чтений + +# ========== НАСТРОЙКИ WAL ========== +[wal] + segment_size_mb = 64 # Размер сегмента WAL (MB) + sync_interval_sec = 5 # Интервал синхронизации с диском + batch_size = 100 # Размер пакета записи + recovery_workers = 4 # Количество воркеров для parallel recovery + enabled = true # Включить WAL + async_recovery = true # Асинхронное восстановление + async_recovery_workers = 4 # Количество воркеров + async_recovery_buffer = 10000 # Размер буфера + +# ========== НАСТРОЙКИ MVCC ========== +[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 кэша (5 минут) + +# ========== НАСТРОЙКИ ТРАНЗАКЦИЙ ========== +[transactions] + default_timeout_sec = 30 # Таймаут транзакции по умолчанию + deadlock_check_interval_sec = 1 # Интервал проверки дедлоков + max_savepoints_per_tx = 100 # Максимум точек сохранения + two_phase_commit_timeout_sec = 10 # Таймаут 2-phase commit + enabled = true # Включить поддержку транзакций + checkpoint_interval_sec = 300 # Интервал чекпоинтов (сек) + +# ========== НАСТРОЙКИ ACL ========== +[acl] + max_denied_log_size = 10000 # Максимум записей в логе отказов + temporary_grant_ttl_hours = 24 # TTL временных разрешений + enable_role_hierarchy = true # Включить иерархию ролей + cache_ttl_sec = 60 # TTL кэша ACL + +# ========== НАСТРОЙКИ ПЛАГИНОВ (расширенные) ========== +[plugins] + enabled = true # Включить плагины (включено для движков) + script_dir = "plugins" # Директория плагинов + allow_list = ["print", "math", "string", "table", "engine"] + max_lua_states = 100 # Максимум Lua-состояний + lua_state_ttl_sec = 600 # TTL неиспользуемого состояния (сек) + max_cpu_time_ms = 100 # Лимит CPU на плагин (ms) + max_memory_mb = 50 # Лимит памяти на плагин (MB) + 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] + # Встроенный 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" } + +# ========== НОВЫЕ СЕКЦИИ КОНФИГУРАЦИИ ========== + +# Настройки 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 # Взаимная аутентификация + key_rotation_days = 30 # Дни до ротации ключей + auto_generate = false # Автогенерация сертификатов + +# Настройки 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-ограничений +[runtime_limits] + enabled = true # Включить ограничения + global_max_doc_size_mb = 16 # Макс. размер документа (MB) + global_max_coll_size_mb = 10240 # Макс. размер коллекции (MB) (10 GB) + global_max_docs_per_coll = 10000000 # Макс. документов в коллекции + +# Настройки автомасштабирования +[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] + enabled = true # Включить миграции + migration_dir = "migrations" # Директория с миграциями + auto_migrate = true # Автоматическая миграция при старте + target_version = "2.1.0" # Целевая версия схемы + +# Настройки бэкапов +[backup] + enabled = true # Включить планировщик бэкапов + backup_dir = "backups" # Директория для бэкапов + max_concurrent = 1 # Макс. одновременных бэкапов + compress_enabled = true # Сжатие бэкапов + retention_days = 7 # Дни хранения бэкапов