在日常运维 Easysearch 的过程中,备份数据是一项重要工作。为了确保数据安全和业务连续性,我们可能需要了解并掌握多种备份索引的方法,以便应对不同的场景。我们先梳理下常用的备份方法有哪些。
Snapshot #
Easysearch 的 Snapshot(快照) 是一种官方支持的集群数据备份与恢复机制,通过将索引数据、集群状态(如设置、模板)和分片分配信息保存到外部存储仓库(如本地文件系统、AWS S3、华为云 OBS 等)实现全量或增量备份。其核心原理是复制索引的 Lucene 分片文件,并利用段文件(Segment)的不可变性实现增量存储优化。
快照的优点包括:
- 高效性:增量备份仅存储新增或修改的段文件,显著节省存储空间和网络传输成本;
- 可靠性:支持跨集群恢复和灾难性故障修复,避免直接拷贝数据目录导致的数据不一致风险;
- 灵活性:可指定备份特定索引,并支持版本兼容性恢复(需遵循版本匹配规则);
- 自动化:通过策略(Snapshot Policy)实现定时备份管理。
缺点则包括:
- 时效性限制:无法实现实时备份,是一种 PIT (Point in Time) 备份;
- 需预先配置:需预先注册仓库并确保存储系统可用性;
- 恢复约束:恢复时需关闭或删除目标索引,或恢复时修改索引名称;
- 依赖主分片状态:若主分片不可用(如节点故障),快照任务会失败。
总体而言,Snapshot 是生产环境首选的备份方案,尤其适合大规模数据归档和跨环境迁移,但需权衡备份频率与存储成本。详情可以参考 文档。
Reindex #
Easysearch 的 Reindex 是一种通过 API 将数据从一个索引复制到另一个索引的备份方法,适用于同集群或跨集群的数据迁移与重建。其核心操作是使用 POST _reindex
命令将源索引的文档批量读取并写入目标索引。备份时需确保目标索引的 Mapping 与源索引兼容(字段类型一致),并通过 size
参数控制批量处理量(如 "size": 2000
)以优化性能。对于跨集群备份,需在目标集群配置文件中添加源集群 IP 白名单(reindex.remote.whitelist
)并提供认证信息,详情可以参考
文档。
优点:
- 灵活性:支持通过
query
参数筛选特定数据备份(如仅迁移某字段值符合条件的数据); - 无缝整合:可在目标索引中修改索引结构(如分片数、字段类型);
- 并发及限流:支持设置并发度和限流阈值,适应不同的场景;
- 操作便捷:无需额外存储配置,适合临时备份或小规模迁移。
缺点:
- 资源消耗大:reindex 本质是数据写入,要占用 CPU、内存和磁盘 IO,可能影响集群性能;
- 网络依赖:跨集群备份依赖网络带宽,高延迟或带宽不足会显著拖慢速度;
- 中断风险:reindex 一旦中途报错,无法继续重试,只能从头再来;
- 时效性局限:备份完成后新增数据需手动触发二次迁移,无法实现实时同步。
建议在低峰期执行 Reindex,并优先采用快照(Snapshot)进行生产环境长期备份,Reindex 更适合索引结构调整或小规模数据迁移场景。
工具备份 #
还有些工具支持将 Easyearch 的索引数据备份成一个文件,比如 elasticsearch-dump、Logstash 等。数据量较大的情况下,这些工具可能会有效率问题,一般在特定场景下有用,在此不展开介绍。
Clone API #
Easysearch 的 Clone API 并不是传统意义上的备份工具,其核心设计目标是通过复制索引的底层段文件(Segment)快速生成一个与原索引数据一致的新索引,包括源索引是 Mapping 和 Setting 也一起复制。
具体操作步骤如下:
- 设置源索引为只读状态
PUT /.infini_metrics-000004/_settings
{
"settings": {
"index.blocks.write": true
}
}
- 执行 Clone 操作
POST .infini_metrics-000004/_clone/backup_infini_metrics-000004
- 设置源索引和新索引为可读写状态
复制是新索引也会是只可读状态,大家根据需要选择是否都改成可读写状态。
PUT /.infini_metrics-000004,backup_infini_metrics-000004/_settings
{
"settings": {
"index.blocks.write": null
}
}
优点:
- 极速复制:直接复用底层段文件,无需重写数据,适用于大数据量快速复制。
- 保留定义: 直接使用源索引的 Setting 和 Mapping。
- 存储优化:可调整目标索引的副本数,节省资源。
缺点:
- 业务影响:克隆前需修改源索引为只可读,导致写入中断,影响服务可用性。
- 不够灵活:沿用源索引 Setting 和 Mapping 无法修改(副本数可修改)。
- 扩展性不足:不能跨集群,目标索引只能在本集群。
Clone API 有自己鲜明的特点,对比 Snapshot,它不用恢复过程,目标索引直接在集群中了。对比 Reindex,它无需重写数据和先创建索引,更加高效。在特定场景下非常有用,也可以搭配其他备份方法一起使用。
有任何问题,欢迎加我微信沟通。