配置参考
请求路由
集群自动将客户端请求转发到合适的节点:
| 请求类型 | 路由策略 |
|---|---|
| 写入(MsgPack/LP/TLE) | → Primary Writer |
| 查询(SQL) | → Reader(轮询/最少连接/随机) |
| 管理类 API | → 本地处理,广播到集群 |
负载均衡策略
| 策略 | 说明 |
|---|---|
round_robin | 轮询(默认) |
least_connections | 最少连接数 |
random | 随机选择 |
[cluster]
route_strategy = "least_connections"
route_timeout = 5000 # 转发超时(毫秒)
route_retries = 3 # 重试次数
循环防护:转发请求会携带 X-iedb-Forwarded-By 头标记,防止无限转发。
WAL 复制
WAL(Write-Ahead Log)复制确保 Reader 节点能快速获取最新写入的数据,降低读取延迟。
Writer (Primary)
│ WAL Entry
▼
[Replication Sender] ──► broadcast ──► [Replication Receiver] Reader-01
──► entries ──► [Replication Receiver] Reader-02
- Writer 将每个 WAL 条目广播到所有已连接的 Reader
- Reader 写入本地 WAL,然后应用到内存缓冲区(ArrowBuffer)
- Reader 定期向 Writer 发送 ACK 确认位点
[cluster]
replication_enabled = true
replication_lag_limit = 5000 # 最大复制延迟(毫秒)
replication_buffer_size = 10000 # 发送缓冲区大小
replication_ack_interval = 100 # ACK 间隔(毫秒)
全部配置项
集群标识
| 配置项 | 环境变量 | 默认值 | 说明 |
|---|---|---|---|
cluster.enabled | IEDB_CLUSTER_ENABLED | false | 启用集群 |
cluster.node_id | IEDB_CLUSTER_NODE_ID | 自动生成 | 节点唯一标识 |
cluster.role | IEDB_CLUSTER_ROLE | standalone | writer / reader / compactor |
cluster.cluster_name | IEDB_CLUSTER_CLUSTER_NAME | iedb-cluster | 集群名称 |
服务发现
| 配置项 | 环境变量 | 默认值 | 说明 |
|---|---|---|---|
cluster.seeds | IEDB_CLUSTER_SEEDS | [] | 种子节点列表(逗号分隔) |
cluster.coordinator_addr | IEDB_CLUSTER_COORDINATOR_ADDR | :9100 | 协调器绑定地址 |
cluster.advertise_addr | IEDB_CLUSTER_ADVERTISE_ADDR | 自动检测 | 对外广播地址 |
健康检查
| 配置项 | 环境变量 | 默认值 | 说明 |
|---|---|---|---|
cluster.health_check_interval | IEDB_CLUSTER_HEALTH_CHECK_INTERVAL | 5 | 检查间隔(秒) |
cluster.health_check_timeout | IEDB_CLUSTER_HEALTH_CHECK_TIMEOUT | 3 | 单次检查超时(秒) |
cluster.unhealthy_threshold | IEDB_CLUSTER_UNHEALTHY_THRESHOLD | 3 | 标记为不健康的连续失败次数 |
Raft 共识
| 配置项 | 环境变量 | 默认值 | 说明 |
|---|---|---|---|
cluster.raft_data_dir | IEDB_CLUSTER_RAFT_DATA_DIR | ./data/raft | Raft 持久化目录 |
cluster.raft_bind_addr | IEDB_CLUSTER_RAFT_BIND_ADDR | :9200 | Raft 传输绑定地址 |
cluster.raft_bootstrap | IEDB_CLUSTER_RAFT_BOOTSTRAP | false | 首个节点设为 true |
cluster.raft_election_timeout | IEDB_CLUSTER_RAFT_ELECTION_TIMEOUT | 1000 | 选举超时(毫秒) |
cluster.raft_heartbeat_timeout | IEDB_CLUSTER_RAFT_HEARTBEAT_TIMEOUT | 500 | 心跳间隔(毫秒) |
cluster.raft_snapshot_interval | IEDB_CLUSTER_RAFT_SNAPSHOT_INTERVAL | 300 | 快照间隔(秒) |
安全
| 配置项 | 环境变量 | 默认值 | 说明 |
|---|---|---|---|
cluster.shared_secret | IEDB_CLUSTER_SHARED_SECRET | "" | HMAC-SHA256 共享密钥 |
cluster.tls_enabled | IEDB_CLUSTER_TLS_ENABLED | false | 节点间 TLS |
cluster.tls_cert_file | IEDB_CLUSTER_TLS_CERT_FILE | "" | PEM 证书路径 |
cluster.tls_key_file | IEDB_CLUSTER_TLS_KEY_FILE | "" | PEM 私钥路径 |
cluster.tls_ca_file | IEDB_CLUSTER_TLS_CA_FILE | "" | CA 证书(双向验证) |
API 端点
| 方法 | 路径 | 说明 |
|---|---|---|
GET | /api/v1/cluster | 集群概览(运行状态、节点数、Raft 状态) |
GET | /api/v1/cluster/nodes | 所有节点列表,支持 ?role= 和 ?state= 过滤 |
GET | /api/v1/cluster/nodes/:id | 单个节点详情 |
GET | /api/v1/cluster/local | 本地节点信息及能力 |
GET | /api/v1/cluster/health | 健康摘要(healthy/unhealthy/total) |
GET | /api/v1/cluster/files | 文件清单(需 admin,支持 ?database= 过滤) |
DELETE | /api/v1/cluster/nodes/:id | 移除节点(admin) |
集群未启用时的响应:
{
"enabled": false,
"mode": "standalone",
"reason": "Clustering not enabled in configuration (cluster.enabled=false)"
}