配置项作用 #
path.shared_data 配置项用于指定使用自定义数据路径的索引的共享存储根目录。
当索引使用 index.data_path 设置自定义数据路径时,该路径必须是 path.shared_data 的子路径。这允许将特定索引存储在不同的物理位置,实现数据隔离和灵活存储管理。
配置项属性 #
- 配置路径:
path.shared_data - 数据类型:
String(目录路径) - 默认值: 无(不配置则不允许使用自定义数据路径)
- 是否可选: 是
- 作用域: NodeScope(节点级别)
- 动态更新: 否(需要重启节点生效)
配置项详解 #
工作机制 #
共享数据目录工作机制
不配置 path.shared_data:
├── 不允许使用 index.data_path
├── 所有索引存储在 path.data
└── 标准存储模式 ✅
配置 path.shared_data:
path.shared_data: /shared/easysearch
│
├── 允许使用 index.data_path
├── 自定义路径必须是子路径
├── 验证路径安全性
└── 灵活存储模式 ✅
路径解析:
index.data_path: /hot_storage/logs
│
└── 实际存储路径:
/shared/easysearch/hot_storage/logs/
├── node-{nodeId}/
│ └── {indexUUID}/
│ └── {shardId}/
└── 数据文件
验证规则:
├── 自定义路径必须存在
├── 必须是 shared_data 的子路径
├── 防止路径遍历攻击
└── 不符合则拒绝创建索引
目录结构 #
目录结构示例
配置:
path:
data: /var/lib/easysearch # 默认数据目录
shared_data: /shared/easysearch # 共享数据目录
目录布局:
/var/lib/easysearch/ # path.data
└── nodes/
└── 0/
├── indices/ # 标准索引
│ ├── index-abc/
│ └── index-def/
└── ...
/shared/easysearch/ # path.shared_data
├── hot_storage/ # 自定义路径 1
│ └── logs/
│ └── node-0/
│ └── index-xyz/ # 自定义路径索引
├── cold_storage/ # 自定义路径 2
│ └── archive/
│ └── node-0/
│ └── index-old/
└── ssd_storage/ # 自定义路径 3
└── realtime/
└── node-0/
└── index-hot/
自定义数据路径 #
索引自定义数据路径
1. 配置共享数据目录:
path:
shared_data: /shared/easysearch
2. 创建索引时指定路径:
PUT /logs-2026
{
"settings": {
"index.data_path": "/hot_storage/logs"
}
}
3. 实际存储位置:
/shared/easysearch/hot_storage/logs/
├── node-0/
│ └── {indexUUID}/
│ ├── 0/
│ │ ├── index/
│ │ └── translog/
│ └── 1/
4. 路径验证:
├── /hot_storage/logs 是
├── /shared/easysearch 的子路径
├── 验证通过 ✅
└── 索引创建成功
错误示例:
index.data_path: /other/storage
│
├── 不是 /shared/easysearch 的子路径
├── 验证失败 ❌
└── 拒绝创建索引
配置建议 #
生产环境(不配置) #
# 不配置,使用标准数据目录
path:
data: /var/lib/easysearch
建议: 大多数情况下不需要配置,使用标准数据目录。
多存储层级 #
path:
data: /var/lib/easysearch
shared_data: /shared/easysearch
建议: 需要分层存储时配置,如热数据/冷数据分离。
自定义隔离 #
path:
data: /var/lib/easysearch
shared_data: /mnt/custom-storage
建议: 特殊隔离需求时使用。
代码示例 #
easysearch.yml 基础配置 #
path:
shared_data: /shared/easysearch
完整路径配置 #
path:
home: /usr/share/easysearch
data: /var/lib/easysearch
logs: /var/log/easysearch
shared_data: /shared/easysearch
多存储配置 #
# 用于不同存储层级的共享目录
path:
shared_data: /data/easysearch
# 热数据使用 SSD
# 冷数据使用 HDD
# 通过 index.data_path 指定
创建自定义路径索引 #
# 配置共享数据目录
path:
shared_data: /shared/easysearch
# 创建索引时指定自定义路径
PUT /hot-index
{
"settings": {
"index.data_path": "/ssd/hot"
}
}
PUT /cold-index
{
"settings": {
"index.data_path": "/hdd/cold"
}
}
索引模板配置 #
PUT _index_template/hot-data-template
{
"index_patterns": ["hot-*"],
"template": {
"settings": {
"index.data_path": "/ssd/hot"
}
}
}
PUT _index_template/cold-data-template
{
"index_patterns": ["cold-*"],
"template": {
"settings": {
"index.data_path": "/hdd/cold"
}
}
}
相关配置 #
| 配置项 | 作用 | 默认值 |
|---|---|---|
path.shared_data | 共享数据目录根路径 | 无 |
path.data | 默认数据目录 | - |
index.data_path | 索引级别的自定义路径 | - |
使用场景 #
热数据分离 #
热数据分离场景
配置:
path.shared_data: /data/easysearch
创建热数据索引:
PUT /realtime-logs
{
"settings": {
"index.data_path": "/nvme/hot"
}
}
# 存储到: /data/easysearch/nvme/hot/...
创建冷数据索引:
PUT /archive-logs
{
"settings": {
"index.data_path": "/hdd/cold"
}
}
# 存储到: /data/easysearch/hdd/cold/...
优势:
├── 热数据使用快速存储
├── 冷数据使用经济存储
├── 性能优化
└── 成本优化
多租户隔离 #
多租户隔离场景
配置:
path.shared_data: /shared/easysearch
租户 A:
PUT /tenant-a-logs
{
"settings": {
"index.data_path": "/tenants/a"
}
}
租户 B:
PUT /tenant-b-logs
{
"settings": {
"index.data_path": "/tenants/b"
}
}
目录结构:
/shared/easysearch/
├── /tenants/a/
│ └── node-0/tenant-a-indices/
└── /tenants/b/
└── node-0/tenant-b-indices/
优势:
├── 物理隔离
├── 便于管理
├── 安全性高
└── 计费清晰
存储生命周期 #
存储生命周期管理
1. 新数据 (SSD)
index.data_path: "/ssd/new"
2. 成熟数据 (SATA SSD)
→ 迁移到 "/sata/mature"
3. 归档数据 (HDD)
→ 迁移到 "/hdd/archive"
4. 删除
→ 释放存储
使用:
├── ILM 策略配合
├── 自动迁移
├── 优化成本
└── 满足性能要求
性能考虑 #
性能考虑因素
1. 存储类型
├── NVMe SSD: 最高性能
├── SATA SSD: 高性能
├── HDD: 低成本
└── 混合: 平衡
2. 数据访问模式
├── 热数据 → 快速存储
├── 温数据 → 标准存储
└── 冷数据 → 经济存储
3. 分片分配
├── 感知存储位置
├── 路由到合适节点
└── 避免跨存储查询
4. 集群规划
├── 分离存储层
├── 专用数据节点
└── 优化分配策略
注意事项 #
必须配置: 使用
index.data_path前必须配置此选项。子路径限制: 自定义路径必须是
shared_data的子路径。路径验证: 创建索引时会验证路径合法性。
目录权限: 确保运行用户有权限访问共享目录。
磁盘管理: 需要监控各个存储位置的空间使用。
数据迁移: 修改路径需要重新索引数据。
备份策略: 不同路径的索引需要分别备份。
快照恢复: 恢复时需要考虑自定义路径。
故障排查: 路径错误会导致索引创建失败。
规划建议: 提前规划存储层级和路径结构。
故障排查 #
常见问题排查
问题 1: 创建索引失败
错误:
"path.shared_data must be set in order to use custom data paths"
原因:
├── 未配置 path.shared_data
├── 尝试使用 index.data_path
└── 验证失败
解决:
├── 配置 path.shared_data
├── 或不使用 index.data_path
└── 重启节点
问题 2: 路径验证失败
错误:
"custom data path must be a child of path.shared_data"
原因:
├── 自定义路径不是子路径
├── 路径包含 ..
└── 安全验证失败
解决:
├── 使用相对路径
├── 确保是 shared_data 子路径
└── 验证路径格式
问题 3: 权限错误
错误:
"Permission denied"
原因:
├── 目录权限不足
├── 用户无访问权限
└── SELinux/AppArmor 限制
解决:
├── 检查目录权限
├── 修改所有者
├── 设置正确权限
└── 检查安全策略
最佳实践 #
path.shared_data 最佳实践
1. 标准部署
├── 不配置 shared_data
├── 使用 path.data
├── 简化维护
└── 推荐 ✅
2. 分层存储
├── 规划存储层级
├── 明确路径结构
├── 配置共享根目录
└── 使用 ILM 自动迁移
3. 多租户
├── 按租户划分路径
├── 物理隔离
├── 独立配额
└── 便于管理
4. 存储规划
├── 提前规划容量
├── 预留扩展空间
├── 监控使用率
└── 及时扩容
5. 安全配置
├── 正确设置权限
├── 限制访问范围
├── 定期审计
└── 保护数据安全





