搭建集群
本文档介绍如何从零搭建 IEDB 集群,包含共享存储和本地存储两种模式。
共享存储模式(推荐)
所有节点共享同一个对象存储(S3/MinIO/Azure),Writer 写入 Parquet 文件后,Reader 通过 DuckDB httpfs 扩展直接读取。
第一步:配置并启动首个 Writer 节点(Bootstrap)
# writer-01.toml
[license]
key = "IEDB-XXXX-XXXX-XXXX-XXXX"
[server]
port = 8000
[storage]
backend = "s3"
s3_bucket = "iedb-production"
s3_region = "us-east-1"
[cluster]
enabled = true
node_id = "writer-01"
role = "writer"
cluster_name = "production"
raft_bootstrap = true # 仅首个节点
raft_data_dir = "./data/raft"
coordinator_addr = ":9100"
raft_bind_addr = ":9200"
advertise_addr = "10.0.1.10:9100" # 其他节点可访问的地址
raft_advertise_addr = "10.0.1.10:9200"
# 安全配置
shared_secret = "your-secret-key"
tls_enabled = true
tls_cert_file = "/etc/iedb/certs/cert.pem"
tls_key_file = "/etc/iedb/certs/key.pem"
[auth]
enabled = true
启动:
./iedb --config writer-01.toml
第二步:添加 Reader 节点
# reader-01.toml
[license]
key = "IEDB-XXXX-XXXX-XXXX-XXXX"
[server]
port = 8000
[storage]
backend = "s3"
s3_bucket = "iedb-production"
s3_region = "us-east-1"
[cluster]
enabled = true
node_id = "reader-01"
role = "reader"
cluster_name = "production"
raft_bootstrap = false # 非首个节点
seeds = "10.0.1.10:9100" # Writer 的 coordinator 地址
raft_data_dir = "./data/raft"
coordinator_addr = ":9100"
raft_bind_addr = ":9200"
advertise_addr = "10.0.1.11:9100"
raft_advertise_addr = "10.0.1.11:9200"
shared_secret = "your-secret-key"
# 开启 WAL 复制以降低读取延迟
replication_enabled = true
[auth]
enabled = true
第三步:添加 Compactor 节点
# compactor-01.toml
[license]
key = "IEDB-XXXX-XXXX-XXXX-XXXX"
[server]
port = 8000
[storage]
backend = "s3"
s3_bucket = "iedb-production"
s3_region = "us-east-1"
[cluster]
enabled = true
node_id = "compactor-01"
role = "compactor"
cluster_name = "production"
raft_bootstrap = false
seeds = "10.0.1.10:9100"
raft_data_dir = "./data/raft"
coordinator_addr = ":9100"
raft_bind_addr = ":9200"
advertise_addr = "10.0.1.12:9100"
shared_secret = "your-secret-key"
[compaction]
enabled = true
hourly_enabled = true
第四步:启用高可用(添加 Standby Writer)
再部署一个 Writer 节点作为热备(raft_bootstrap = false):
[cluster]
enabled = true
node_id = "writer-02"
role = "writer"
cluster_name = "production"
raft_bootstrap = false
seeds = "10.0.1.10:9100"
# 启用自动故障转移
failover_enabled = true
failover_timeout = 30
failover_cooldown = 60
第五步:验证集群状态
# 查看集群概览
curl http://10.0.1.10:8000/api/v1/cluster
# 查看所有节点
curl http://10.0.1.10:8000/api/v1/cluster/nodes
# 查看健康状态
curl http://10.0.1.10:8000/api/v1/cluster/health
本地存储模式
在本地存储模式下,每个节点使用自己的本地磁盘。Writer 写入本地 Parquet 文件,通过 Raft 文件清单和节点间复制同步到 Reader。
[storage]
backend = "local"
local_path = "./data/iedb"
[cluster]
enabled = true
role = "writer"
# 开启文件复制
replication_enabled = true
本地存储模式需要
shared_secret配置,用于节点间复制的安全认证。