三人行必有我师

ES迁移分片时,对于正在更新分片是如何迁移的?

Elasticsearch | 作者 sterne vencel | 发布于2018年07月20日 | 阅读数:6568

ES迁移分片时,如果索引不再更新,就不会有Translog的迁移,集群会从主分片开始迁移分片。
如果索引还在更新,集群还是会从主分片迁移分片,迁移会出现大量的Translog。
我的问题是:
1.这个Translog为什么这么大,我想他不就是一个文档吗?这个单位是什么?

2.png


2.上图中的Files和Bytes还是不同步的?为什么?它们不应该是同步的吗?
 
3.如果迁移的是主分片,索引会变成rad,迁移过程如何保证索引数据不丢失?
已邀请:

laoyang360 - 《一本书讲透Elasticsearch》作者,Elastic认证工程师 [死磕Elasitcsearch]知识星球地址:http://t.cn/RmwM3N9;微信公众号:铭毅天下; 博客:https://elastic.blog.csdn.net

赞同来自: sterne vencel

Translog——用来保存所有未提交的事务,Elasticsearch会不时的创建一个新的日志文件用于记录每个事务的后续操作。
当有错误发生的时候,事务日志被检查,必要时会再次执行某些操作,以确保没有丢失任何修改。
 
其中,事务日志与存储介质之间的同步(同步的同时会清空事务日志)是通过flushing实现的。
 
你的translog很大,确认一下是不是因为刷新周期导致的,默认flush_transhold_period的大小是30分钟,如果每一秒都写入数据,30分钟,数据量会很大,或许是你截图的数据量。需要核实一下。

rockybean - Elastic Certified Engineer, ElasticStack Fans,公众号:ElasticTalk

赞同来自: sterne vencel

1. translog 记录的是还没有被 lucene commit 的文档,当然现在即便 commit 了也会保留,用于后续可能的基于 operation 级别的分片的迁移或者恢复。见这个文档 https://www.elastic.co/guide/e ... .html
 
2. 这里的 file 应该是 segment 文件,bytes 是总大小,那么不同文件大小会不同。file 这里是个数,bytes 是体积,所以不同步是可以理解的。
 
3.迁移主分片的过程中是可以继续 indexing 操作的,不会变 red,简单讲是第一步先 copy lucene 的文件,然后第二步 copy translog 文件去回放第一步过程中的文档更新操作。当然实际上会这个复杂一些。

yayg2008

赞同来自: sterne vencel

这些数据应该是来自API https://www.elastic.co/guide/e ... .html,建议楼主通过API来查看,更明了。

alonglee

赞同来自: derobukal

1 分片迁移时, 会先锁定segment和translog, 在segment迁移完毕后, 会进行translog回放
2 索引red, 应该没法进行index操作, 所以这段时间内写操作是不可用的
详细的可以参考
https://cloud.tencent.com/deve ... 70385

要回复问题请先登录注册