📣 极限科技诚招搜索运维工程师(Elasticsearch/Easysearch)- 全职/北京 👉 : 立即申请加入

配置项作用 #

repositories.fs.compress 配置项用于控制是否压缩文件系统仓库中的元数据文件

当启用压缩时,快照的元数据文件(包括集群元数据、索引元数据、快照元数据等)会被压缩存储,从而减少存储空间占用。但实际的数据文件不会被压缩。

配置项属性 #

  • 配置路径: repositories.fs.compress
  • 数据类型: Boolean(布尔值)
  • 默认值: false
  • 是否可选: 是
  • 作用域: NodeScope(节点级别)
  • 动态更新: (需要重启节点生效)
  • 废弃状态: 已废弃

配置项详解 #

工作机制 #

压缩工作机制

禁用压缩 (false, 默认):
元数据文件:
├── cluster metadata.meta
├── index-N metadata.meta
├── snap-N.meta
└── ...


存储:
├── 未压缩格式
├── 文件较大
└── 读写速度快 ✅


启用压缩 (true):
元数据文件:
├── cluster metadata.meta (压缩)
├── index-N metadata.meta (压缩)
├── snap-N.meta (压缩)
└── ...


存储:
├── 压缩格式
├── 文件较小 ✅
├── 读写需要解压
└── CPU 开销


数据文件:
├── 索引数据
├── 始终保持未压缩
└── 不受此配置影响

压缩的文件类型 #

被压缩的文件类型

1. 集群元数据 (Global Metadata)
   ├── cluster state
   ├── 全局设置
   ├── 索引模板
   └── 压缩存储 ✅


2. 索引元数据 (Index Metadata)
   ├── mapping 定义
   ├── index settings
   ├── 别名信息
   └── 压缩存储 ✅


3. 快照元数据 (Snapshot Metadata)
   ├── 快照信息
   ├── 包含的索引
   ├── 快照状态
   └── 压缩存储 ✅


4. 分片快照 (Index Shard Snapshots)
   ├── 分片元数据
   ├── 段信息
   └── 压缩存储 ✅


5. 实际数据文件
   ├── 索引数据
   ├── translog
   ├── 段文件
   └── 不压缩 ❌

压缩算法 #

压缩实现

启用压缩时:
├── 使用 CompressorFactory.COMPRESSOR
├── SMILE XContent 格式
├── 线程本地输出流
└── 标准压缩算法


压缩流程:
1. 序列化元数据
    │
    ├── SMILE 格式
    │
    ↓
2. 压缩数据
    │
    ├── 压缩算法
    │
    ↓
3. 写入磁盘
    │
    └── 压缩的文件


解压流程:
1. 读取磁盘
    │
    ├── 压缩的文件
    │
    ↓
2. 解压数据
    │
    ├── 解压缩算法
    │
    ↓
3. 反序列化
    │
    ├── SMILE 格式
    └── 元数据对象

配置建议 #

生产环境(默认) #

# 不配置,使用默认值
# repositories.fs.compress: false

建议: 保持默认值 false。性能优先。

存储受限环境 #

repositories:
  fs_backup:
    type: fs
    location: /backup/easysearch
    compress: true  # 启用压缩

建议: 存储空间受限时启用。

远程存储 #

repositories:
  fs_remote:
    type: fs
    location: /mnt/nfs/snapshots
    compress: true  # 减少网络传输

建议: NFS 等远程存储可考虑启用。

创建仓库时指定 #

PUT /_snapshot/my_backup
{
  "type": "fs",
  "settings": {
    "location": "/backup/easysearch",
    "compress": true
  }
}

代码示例 #

创建仓库(不压缩) #

PUT /_snapshot/my_fs_repo
{
  "type": "fs",
  "settings": {
    "location": "/backup/easysearch"
  }
}

创建仓库(压缩) #

PUT /_snapshot/my_fs_repo
{
  "type": "fs",
  "settings": {
    "location": "/backup/easysearch",
    "compress": true
  }
}

全局配置 #

# easysearch.yml
repositories:
  fs:
    compress: true

查看仓库信息 #

GET /_snapshot/_all

// 响应
{
  "my_fs_repo": {
    "type": "fs",
    "settings": {
      "location": "/backup/easysearch",
      "compress": false
    }
  }
}

相关配置 #

配置项作用默认值
compress元数据压缩false
location仓库位置-
chunk_size分块大小Long.MAX_VALUE

性能影响分析 #

compress 设置优点缺点
false(默认)读写速度快占用更多空间
true节省存储空间CPU 开销、读写慢

存储空间对比 #

存储空间对比

场景: 1000 个快照

不压缩:
├── 元数据文件: 每个 10KB
├── 总计: 10MB
├── 实际占用: 10MB
└── 读写: 快速 ✅


压缩 (50% 压缩率):
├── 元数据文件: 每个 5KB
├── 总计: 5MB
├── 节省: 5MB ✅
├── 读取: 需要解压
└── 写入: 需要压缩


收益:
├── 小集群: 节省有限
├── 大集群: 节省显著 ✅
└── 长期累积: 节省越来越多

使用场景 #

推荐启用压缩的场景 #

  • 存储受限: 备份存储空间有限
  • 大量快照: 频繁创建快照
  • 远程存储: NFS 等网络存储
  • 长期保留: 快照长期保存

推荐禁用压缩的场景 #

  • 性能优先: 需要最快的快照/恢复速度
  • 存储充足: 有足够的存储空间
  • CPU 有限: CPU 资源紧张
  • 频繁操作: 频繁进行快照和恢复

注意事项 #

  1. 默认值: 默认值为 false,不启用压缩。

  2. 需要重启: 修改此配置需要重启节点。

  3. 仅元数据: 只压缩元数据文件,不压缩数据文件。

  4. 废弃状态: 此配置项已被废弃。

  5. CPU 开销: 压缩会增加 CPU 使用。

  6. 读写延迟: 压缩后读写会稍微变慢。

  7. 存储节省: 压缩率通常在 30-70%。

  8. 不可逆: 已压缩的文件不能直接读取。

  9. 备份建议: 压缩配置应在创建仓库时确定。

  10. 监控建议: 监控存储空间和 CPU 使用。

故障排查 #

常见问题排查

问题 1: 压缩后读取变慢

检查:
├── compress 设置
├── CPU 使用率
├── 磁盘 I/O
└── 快照大小


解决:
├── 禁用 compress
├── 升级 CPU
├── 优化磁盘
└── 或接受小延迟


问题 2: 存储空间不足

检查:
├── 快照数量
├── 元数据大小
├── compress 设置


解决:
├── 启用 compress
├── 清理旧快照
├── 增加存储
└── 或压缩已有快照


问题 3: CPU 使用率高

检查:
├── compress 设置
├── 快照操作频率
└── CPU 核心数


解决:
├── 禁用 compress
├── 减少快照频率
├── 增加 CPU
└── 或错峰操作

最佳实践 #

压缩配置最佳实践

1. 标准场景
   compress: false

   ├── 性能优先
   ├── 存储充足
   └── 推荐 ✅


2. 存储受限
   compress: true

   ├── 节省空间
   ├── 可接受性能下降
   └── 必要时使用 ✅


3. 大量快照
   compress: true

   ├── 累积节省
   ├── 长期效益
   └── 推荐 ✅


4. 远程存储
   compress: true

   ├── 减少网络传输
   ├── 节省带宽
   └── 推荐使用 ✅


5. 性能关键
   compress: false

   ├── 最快速度
   ├── 最小延迟
   └── 高性能场景 ✅