• ElasticSearch的增量快照浅析


    前言

    ES的官方文档中关于增量快照的说明是:
    你的第一个快照会是一个数据的完整拷贝,但是所有后续的快照会保留的是已存快照和新数据之间的差异。
    看到这个解释后,脑海中产生出些许疑问:
    1. 删除历史快照会对新的快照造成影响吗?
    2. 如果每次保存的都是差异,那我的快照数据量是不是会越来越大?
    3. 恢复完整数据的时候要如何恢复?需要从第一个快照开始一个一个恢复吗?
    经过一番搜索和思考,总结一下我对这些问题的理解。
     

    基础知识

    首先,有一些关键知识点需要了解一下:
    • ES 的底层使用了 Lucene, ES 快照实际上是对 Lucene 快照文件的一次保存。
    • Lucene 快照包含了当前时间点上与需要快照的索引相关的全部文件。
    • Lucene 的索引是由多个分段文件组成的,且分段文件是不能被修改的,只会新增和删除。
    • 只有两种情况下会产生新的分段文件:1、新增、修改、删除索引内的数据 2、将已存在的分段文件合并
    • 快照删除时仅删除没有被任何快照引用的文件
     

    快照过程梳理

    首次快照示意图,快照名称记为:快照 A
    与快照 A 关联的文件列表为:1、2、3
    然后我们对ES中的数据做了一些修改,导致Lucene文件发生了一些变化。由于Lucene索引分段文件的特性,只会新增和删除而不会修改,因此此时的Lucene中文件可能如下
    然后进行第二次快照,快照名称记为:快照 B
    与快照 B 关联的文件列表为:2、3、4
    然后删除快照 A
    因为
    与快照 A 关联的文件是:1、2、3
    与快照 B 关联的文件是:2、3、4
    所以 只有文件 1 可以被删除。
     

    疑问解答

    1、删除历史快照会对新的快照造成影响吗?
    答:不会的,以上面的流程为例,只会清理不被任何快照关联的文件。而每个快照关联的文件列表都能还原当时的全量数据。
     
    2、如果每次保存的都是差异,那我的快照数据量是不是会越来越大?
    答:如果定期清理历史的快照,那么快照的数据量是不会越来越大的。虽然每次都保存的是差异,但这个差异并不是绝对的新增数据,而是对历史数据做了修改后的一个局部全量数据。也就是说,新文件和旧文件之间是有重叠数据的,所以清理历史文件即可。
     
    3、恢复完整数据的时候要如何恢复?需要从第一个快照开始一个一个恢复吗?
    答:不需要,只需恢复指定时间点的快照即可,因为每个快照都保留了那个时间点的全量数据。
     
    参考文档:

    备份你的集群-ES官方文档

     

     
     
     
  • 相关阅读:
    Netty大小端
    手写简单IOC
    Java线程
    mysql查询性能问题,加了order by速度慢了
    字节码增强技术探索
    Linux 添加定时任务
    一千行 MySQL 学习笔记
    深入浅出Shiro系列
    深入浅出SpringMVC系列~
    来聊一聊 Linux 常用命令 (第二篇)~
  • 原文地址:https://www.cnblogs.com/dyfblog/p/15220301.html
Copyright © 2020-2023  润新知