375 lines
13 KiB
TOML
375 lines
13 KiB
TOML
#
|
|
# 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"
|
|
node_port = 9876
|
|
raft_port = 9878
|
|
raft_data_dir = "raft_data"
|
|
bootstrap = true
|
|
nodes = [
|
|
"192.168.0.103:9878",
|
|
]
|
|
heartbeat_timeout_ms = 1000
|
|
election_timeout_ms = 1000
|
|
commit_timeout_ms = 500
|
|
snapshot_interval_min = 30
|
|
snapshot_threshold = 1000
|
|
split_brain_prevention = true
|
|
recovery_timeout_sec = 30
|
|
region = "default"
|
|
priority_zone = 0
|
|
|
|
# ============================================================================
|
|
# [storage] - НАСТРОЙКИ ХРАНИЛИЩА
|
|
# ============================================================================
|
|
[storage]
|
|
page_size_mb = 64
|
|
max_collections = 100
|
|
max_documents_per_collection = 1000000
|
|
default_engine = "row"
|
|
enable_custom_engines = true
|
|
|
|
# ============================================================================
|
|
# [repl] - НАСТРОЙКИ REPL
|
|
# ============================================================================
|
|
[repl]
|
|
prompt_color = "#00bfff"
|
|
history_size = 1000
|
|
migration_commands = true
|
|
|
|
# ============================================================================
|
|
# [log] - НАСТРОЙКИ ЛОГИРОВАНИЯ
|
|
# ============================================================================
|
|
[log]
|
|
log_file = "futriix.log"
|
|
log_level = "debug"
|
|
|
|
# ============================================================================
|
|
# [api] - НАСТРОЙКИ HTTP API
|
|
# ============================================================================
|
|
[api]
|
|
port = 8080
|
|
|
|
# ============================================================================
|
|
# [replication] - НАСТРОЙКИ РЕПЛИКАЦИИ
|
|
# ============================================================================
|
|
[replication]
|
|
enabled = false
|
|
sync_replication = false
|
|
replication_timeout_ms = 5000
|
|
max_replica_lag_ms = 5000
|
|
|
|
# ============================================================================
|
|
# [compression] - НАСТРОЙКИ СЖАТИЯ
|
|
# ============================================================================
|
|
[compression]
|
|
enabled = true
|
|
algorithm = "snappy"
|
|
level = 3
|
|
min_size = 1024
|
|
|
|
# ============================================================================
|
|
# [webui] - НАСТРОЙКИ ВЕБ-ИНТЕРФЕЙСА
|
|
# ============================================================================
|
|
[webui]
|
|
enabled = true
|
|
port = 9080
|
|
theme = "dark"
|
|
|
|
# ============================================================================
|
|
# [performance] - НАСТРОЙКИ ПРОИЗВОДИТЕЛЬНОСТИ
|
|
# ============================================================================
|
|
[performance]
|
|
enable_pipeline = true
|
|
batch_size = 100
|
|
read_from_follower = true
|
|
max_connections = 1000
|
|
read_replica_delay_ms = 100
|
|
|
|
# ============================================================================
|
|
# [security] - НАСТРОЙКИ БЕЗОПАСНОСТИ
|
|
# ============================================================================
|
|
[security]
|
|
enable_tls = false
|
|
cert_file = ""
|
|
key_file = ""
|
|
ca_file = ""
|
|
min_version = "1.2"
|
|
|
|
# ============================================================================
|
|
# [monitoring] - НАСТРОЙКИ МОНИТОРИНГА
|
|
# ============================================================================
|
|
[monitoring]
|
|
enable_metrics = true
|
|
metrics_port = 9090
|
|
enable_tracing = false
|
|
trace_sample_rate = 0.01
|
|
|
|
# ============================================================================
|
|
# [recovery] - НАСТРОЙКИ ВОССТАНОВЛЕНИЯ
|
|
# ============================================================================
|
|
[recovery]
|
|
auto_rejoin = true
|
|
max_retry_sec = 300
|
|
data_replication_timeout_sec = 60
|
|
stale_read_timeout_sec = 30
|
|
|
|
# ============================================================================
|
|
# [wal] - НАСТРОЙКИ WAL
|
|
# ============================================================================
|
|
[wal]
|
|
segment_size_mb = 64
|
|
sync_interval_sec = 5
|
|
batch_size = 100
|
|
recovery_workers = 4
|
|
enabled = true
|
|
async_recovery = true
|
|
async_recovery_workers = 4
|
|
async_recovery_buffer = 10000
|
|
|
|
# ============================================================================
|
|
# [mvcc] - НАСТРОЙКИ MVCC
|
|
# ============================================================================
|
|
[mvcc]
|
|
max_versions_per_doc = 10
|
|
visibility_map_size = 1048576
|
|
prune_interval_min = 5
|
|
retention_days = 7
|
|
read_cache_size = 10000
|
|
read_cache_ttl_sec = 300
|
|
|
|
# ============================================================================
|
|
# [transactions] - НАСТРОЙКИ ТРАНЗАКЦИЙ
|
|
# ============================================================================
|
|
[transactions]
|
|
default_timeout_sec = 30
|
|
deadlock_check_interval_sec = 1
|
|
max_savepoints_per_tx = 100
|
|
enabled = true
|
|
checkpoint_interval_sec = 300
|
|
|
|
# ============================================================================
|
|
# [saga] - НАСТРОЙКИ SAGA ОРКЕСТРАТОРА
|
|
# ============================================================================
|
|
[saga]
|
|
enabled = true
|
|
coordinator_count = 3
|
|
state_dir = "saga_states"
|
|
max_retries = 5
|
|
retry_backoff_ms = 100
|
|
saga_timeout_sec = 300
|
|
stuck_check_interval_sec = 10
|
|
leader_election_interval_sec = 5
|
|
recovery_interval_sec = 30
|
|
metrics_interval_sec = 60
|
|
cleanup_period_hours = 24
|
|
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
|
|
# ============================================================================
|
|
[acl]
|
|
max_denied_log_size = 10000
|
|
temporary_grant_ttl_hours = 24
|
|
enable_role_hierarchy = true
|
|
cache_ttl_sec = 60
|
|
|
|
# ============================================================================
|
|
# [plugins] - НАСТРОЙКИ ПЛАГИНОВ
|
|
# ============================================================================
|
|
[plugins]
|
|
enabled = true
|
|
script_dir = "plugins"
|
|
allow_list = ["print", "math", "string", "table", "engine"]
|
|
max_lua_states = 100
|
|
lua_state_ttl_sec = 600
|
|
max_cpu_time_ms = 100
|
|
max_memory_mb = 50
|
|
max_execution_time_sec = 5
|
|
max_instructions = 1000000
|
|
hot_reload_interval_sec = 30
|
|
max_event_log_size = 1000
|
|
load_timeout_sec = 10
|
|
engine_plugin_dir = "engines"
|
|
|
|
# ============================================================================
|
|
# [engines] - НАСТРОЙКИ КАСТОМНЫХ ДВИЖКОВ ← РЕАЛИЗОВАНО
|
|
# ============================================================================
|
|
[engines]
|
|
[engines.row]
|
|
enabled = true
|
|
description = "Row-based storage engine (default)"
|
|
config = {}
|
|
|
|
[engines.columnar]
|
|
enabled = false
|
|
description = "Columnar storage engine for analytics"
|
|
config = { compression = "zstd", block_size = 65536 }
|
|
|
|
[engines.document]
|
|
enabled = false
|
|
description = "Document-oriented storage engine"
|
|
config = { auto_index = true, max_nesting = 32 }
|
|
|
|
[engines.kv]
|
|
enabled = false
|
|
description = "Key-Value storage engine"
|
|
config = { ttl_enabled = true, ttl_default_seconds = 86400 }
|
|
|
|
[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
|
|
cert_file = "certs/node.crt"
|
|
key_file = "certs/node.key"
|
|
ca_file = "certs/ca.crt"
|
|
min_version = "1.2"
|
|
mutual_auth = false
|
|
key_rotation_days = 30
|
|
auto_generate = false
|
|
|
|
# ============================================================================
|
|
# [backpressure] - НАСТРОЙКИ BACKPRESSURE
|
|
# ============================================================================
|
|
[backpressure]
|
|
enabled = true
|
|
cpu_threshold = 0.80
|
|
memory_threshold = 0.85
|
|
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
|
|
global_max_docs_per_coll = 10000000
|
|
|
|
# ============================================================================
|
|
# [autoscaling] - НАСТРОЙКИ АВТОМАСШТАБИРОВАНИЯ ← РЕАЛИЗОВАНО
|
|
# ============================================================================
|
|
[autoscaling]
|
|
enabled = false
|
|
min_nodes = 1
|
|
max_nodes = 10
|
|
scale_up_threshold = 0.75
|
|
scale_down_threshold = 0.30
|
|
scale_up_cooldown_sec = 300
|
|
scale_down_cooldown_sec = 600
|
|
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
|
|
# Дополнительные поля, используемые BackupScheduler (см. backup_scheduler.go):
|
|
include_saga_state = true
|
|
enable_incremental = true
|
|
|
|
# ============================================================================
|
|
# [migration] - CROSS-DATACENTER MIGRATION
|
|
# ============================================================================
|
|
[migration]
|
|
enabled = false
|
|
mode = "semi_auto"
|
|
|
|
[migration.source]
|
|
name = "dc-primary"
|
|
endpoint = "localhost:8080"
|
|
api_key = ""
|
|
timeout_sec = 30
|
|
|
|
[migration.target]
|
|
name = "dc-secondary"
|
|
endpoint = "localhost:8081"
|
|
api_key = ""
|
|
timeout_sec = 30
|
|
|
|
[migration.settings]
|
|
batch_size = 1000
|
|
workers = 4
|
|
compression = "snappy"
|
|
resume_enabled = true
|
|
checkpoint_interval_sec = 30
|
|
max_retries = 3
|
|
retry_backoff_sec = 5
|
|
collections = []
|
|
exclude_collections = []
|
|
|
|
[migration.delta]
|
|
enabled = true
|
|
interval_sec = 60
|
|
max_lag_sec = 300
|
|
|
|
[migration.validation]
|
|
enabled = true
|
|
sample_percent = 10
|
|
max_errors = 100
|
|
|
|
# ============================================================================
|
|
# [metrics] - НАСТРОЙКИ МЕТРИК
|
|
# ============================================================================
|
|
[metrics]
|
|
enabled = true
|
|
collect_interval_sec = 15
|