对应7.2官方文档路径:Index modules » Translog
官方地址如下:
https://www.elastic.co/guide/en/elasticsearch/reference/7.2/index-modules-translog.html
1.Translog
对Lucene的修改只有在commit时才落盘,这个操作非常耗资源,所以不能每次索引、删除之后都进行commit操作。在进程退出或者硬件故障时,没有commit的修改操作将被从lucene索引中移除。
因为对每个修改操作都进行lucene的commit操作非常耗资源,所以构造了每个分片的事务日志与其相关联,也就是translog。在由内部Lucene索引处理之后但在确认之前,所有索引和删除操作都将写入事务日志。如果发生崩溃,则可以在分片恢复时从事务日志中恢复已被确认但尚未包括在上次Lucene提交中的最近事务。
es flush操作就是进行一次lucene commit操作并新开一个translog。flush操作会在后台自动进行以防止translog日志过大,如果translog过大,会使意外后的恢复过程中的重放操作花费大量时间。也可以通过api进行手动flush,尽管很少需要这样做。
2.Translog 设置
仅在translog进行了fsync和commit后,传输日志中的数据才会持久保存到磁盘 。如果发生硬件故障,操作系统崩溃,JVM崩溃或分片故障,则自上一个translog commit以来写入的所有数据都将丢失。
默认情况下,index.translog.durability设置为request,这意味着仅在主分片和每个分配的副分片的translog成功进行了fsync和commit后,才将索引,删除,更新或批量请求的成功报告给客户端 。
如果将index.translog.durability设置为async,则es将每隔index.translog.sync_interval(默认为5秒)时间进行一次fsync和commit操作。
以下可动态更新的设置可以控制每个索引的translog行为:
index.translog.sync_interval
translog多久被同步到磁盘并提交一次(忽略写操作)。默认5秒。这个值不能小于100ms。
index.translog.durability
在每一个索引,删除,更新或批量请求之后是否进行fsync和commit操作。此设置接受以下参数:
- request:(默认)在每次请求后fsync并commit。如果发生硬件故障,所有已确认的写入将已经提交到磁盘。
- async:每隔sync_interval段时间进行fsync并commit。如果发生故障,则自上次自动提交以来所有已确认的写入将被丢弃。
index.translog.flush_threshold_size
translog存储尚未安全地保留在Lucene中的所有操作(即不是Lucene commit的部分)。尽管这些操作可用于读取,但是如果要恢复关闭的分片,则需要重新索引它们。此设置控制这些操作的最大总大小,以防止恢复花费太长时间。一旦达到最大大小,将进行flush操作,从而生成新的Lucene提交点。默认为512mb。
index.translog.retention.size
要保留的translog文件的总大小。保留更多的事务日志文件会增加恢复副本时执行基于操作的同步的机会。如果事务日志文件不足,则副本恢复将回退到基于文件的同步。默认为512mb。
index.translog.retention.age
translog文件保留的最长时间。默认为12h。
网友评论