配置项作用 #
gateway.auto_import_dangling_indices 配置项用于控制是否自动检测并导入悬空索引(dangling indices)。
悬空索引是指那些数据已写入磁盘,但不存在于当前集群元数据中的索引。这通常发生在集群出现分区、节点故障等异常情况后。
配置项属性 #
- 配置路径:
gateway.auto_import_dangling_indices - 数据类型:
boolean - 默认值:
false - 是否可选: 是
- 弃用状态: ⚠️ 已弃用,建议使用
_danglingAPI
配置项详解 #
什么是悬空索引 #
正常情况:
集群元数据 ────────→ 索引 A, B, C
磁盘数据 ──────────→ 索引 A, B, C
一致 ✓
悬空索引情况:
集群元数据 ────────→ 索引 A, C
磁盘数据 ──────────→ 索引 A, B, C
索引 B 是悬空索引 ✗
工作机制 #
启用自动导入(auto_import_dangling_indices = true) #
节点启动
↓
扫描磁盘上的所有索引
↓
与集群元数据对比
↓
发现悬空索引
↓
自动导入到集群状态
↓
移除所有别名(防止冲突)
↓
索引可正常使用
禁用自动导入(auto_import_dangling_indices = false,默认) #
节点启动
↓
不扫描悬空索引
↓
悬空索引数据存在但不可访问
↓
需要使用 _dangling API 手动处理
配置建议 #
⚠️ 重要提示 #
此配置项已被标记为弃用,建议使用 _dangling API 进行手动管理。
使用新 API 管理(推荐) #
# 1. 列出所有悬空索引
GET _dangling
# 2. 导入指定的悬空索引
POST _dangling/<index_uuid>
# 3. 删除指定的悬空索引
DELETE _dangling/<index_uuid>
如果必须使用旧配置 #
# 开发环境:可以启用自动导入
gateway.auto_import_dangling_indices: true
建议: 仅在开发环境中使用,生产环境建议使用 API 手动管理。
代码示例 #
easysearch.yml 配置(已弃用) #
# 不推荐使用此配置
gateway:
auto_import_dangling_indices: false # 默认值
使用 _dangling API(推荐) #
# 列出所有悬空索引
GET _dangling
# 响应示例
{
"dangling_indices": [
{
"index_name": "my_index",
"index_uuid": "abc123xyz",
"creation_date": "2023-01-01T00:00:00Z",
"path": "/path/to/index/data"
}
]
}
# 导入悬空索引
POST _dangling/abc123xyz
{
"accept_data_loss": true,
"timeout": "5m"
}
# 删除悬空索引
DELETE _dangling/abc123xyz
{
"accept_data_loss": true
}
批量导入悬空索引 #
# 导入所有悬空索引
POST _dangling/_import
{
"accept_data_loss": true
}
使用场景 #
悬空索引产生原因 #
| 场景 | 说明 |
|---|---|
| 集群分区 | 网络分区导致部分节点无法同步元数据 |
| 节点故障 | 主节点故障期间,其他节点创建了新索引 |
| 元数据丢失 | 集群状态损坏或丢失 |
| 人为操作 | 误删除索引但磁盘数据未清除 |
推荐处理方式 #
- 生产环境: 使用
_danglingAPI 手动审查和导入 - 开发环境: 可考虑启用自动导入
- 测试环境: 根据需求决定
安全考虑 #
自动导入的风险 #
场景:集群中已存在同名索引
磁盘: 索引 A (uuid=abc)
集群: 索引 A (uuid=def)
如果自动导入:
❌ 可能导致数据混淆
❌ 两个相同名称的索引
正确的做法:
1. 检查 UUID
2. 手动决定导入或删除
3. 避免数据混淆
内置安全机制 #
系统内置了一些安全检查:
- 同名检查: 如果集群中已存在同名索引,不会自动导入
- 墓碑检查: 如果索引在墓碑区(已删除记录),不会被导入
- 别名清理: 导入时自动移除所有别名,防止冲突
注意事项 #
已弃用: 此配置已被弃用,应使用
_danglingAPI 替代。数据丢失风险: 自动导入可能导致数据混淆或覆盖,建议手动审查。
别名冲突: 导入时会移除所有别名,需要手动重新配置。
生产环境: 强烈建议在生产环境中使用 API 手动管理悬空索引。
定期检查: 定期使用
GET _dangling检查是否有悬空索引。备份优先: 在处理悬空索引前,建议先备份相关数据。





