Well,不要刷屏了

如何深入理解ES的分片租约

Elasticsearch | 作者 Charele | 发布于2022年05月21日 | 阅读数:1468

这个主题,并不常见。
你操作ES的时候,并不会感到它的存在,
感兴趣的同学可以看一看。
 百度你搜的话,有是只字片言,没有一个系统的论述。
比如它是啥时产生的,它里面包含了哪些信息,起了啥作用,,,,,
 
先认识一下:
111.png

 
这是持久化后,在硬盘上的,每个分片都会有:
222.png

 
另外,CCR里面,也有租约,这两个作用并不相同。
等说CCR时,再说及。
已邀请:

Charele - Cisco4321

赞同来自: maodedongfang

8
上面讲了在主分片上的清理过程,下面是后续,
222.png

注意:两个地方的不同
主分片上只是持久化
 
副分片上会update租约信息(就是直接替换掉大租约对像),和主分片保持一致。
然后持久化。

[已注销]

赞同来自:

按时擦擦课程撒

Charele - Cisco4321

赞同来自:

1
上面那个类叫RetentionLeases(带s),不妨叫大租约(只是一个称呼)
还有一个叫RetentionLease(不带s),叫小租约,
注意大租约和小租约的区别
 
 小租约包含在大租约里面,
 
111.png

大租约对像就是存在于左边的这个ReplicationTracker里的。

Charele - Cisco4321

赞同来自:

2 先来看看租约的形成,
主分片的情况:
 
1> 当你新建一个主分片时,它会写一个空租约文件(新分片啥都没有)。
老分片就不写了,因为已经存在了
111.png

2> 然后会读入租约文件(新老分片都会读),并设置相关内存变量
注意:方法名里的"OnReplica",并不指副分片,而是副模式
222.png

3> 在随后,这个主分片在激话为主模式时,会把“主分片本机”形成一个小租约,加到大租约里面去。
如果是老分片,可能读出来的租约里面有本机了,就不会加
 
主模式,副模式,是ES的一个内部概念,对用户并不可见。(重要一点:主分片可以在任意模式,副分片只能在副模式)
333.png

 
这是主分片的初始化,下面说说副分片中关于租约的初始化
 

Charele - Cisco4321

赞同来自:

3

说起副分片,必然要说起副分片恢复。
这儿不详谈,网上有相关文章可以看看。
 
前提:开启softDelete(关闭的情况不讨论,因为罗辑会有不同)
 
副分片恢复时,分为两种类型:file-base,seqNo-base。

seqNo-base这种比较省时,因为它无须执行phase1过程,节省了许多时间,
但要seqNo-base,是有许多条件的,其中之一就是检查你的租约:
 
  这里检查的要求是:
1 在主分片这边,必须有这个副分片的租约存在
2 且这个租约的保留号,必须 <= 请求恢复点(这个请求恢复点是由副分片发过来的)
555.png

 

Charele - Cisco4321

赞同来自:

4
继续说副分片是如何建立租约的

在file-base的情况下:在执行phase1时,主分片这边会建立“副分片节点”的小租约
注意:在seqNo-base时,无须这步,因为“有租约”,是执行seqNo-base的前提,见上楼。
111.png

最后,在执行phase2的时候,主分片会把自己的大租约传给副分片。副分片在后面会把这个租约持久化
这样,副分片就有了和主分片一模一样的信息
222.png

Charele - Cisco4321

赞同来自:

5
上说的是分片如何初始化租约(主分片和副分不同)
下面说租约的作用和变化情况
111.png

这是ES里面创建merge策略的地方,看这两个红框处,
就是指定要保留的文档,以免被"merge 掉“。
 

Charele - Cisco4321

赞同来自:

6 上面说,merge时,要提供“要保留的文档”,实际上就是找到一个最小序号,
大于这个序号的文档,都要留着,有用(比如softDelete时)。
如何找到这个“最小序号”呢,
这就有租约的参与了。(不是唯一要素,但是是其中之一)
111.png

 
只说要点,不可能说得太具体。

Charele - Cisco4321

赞同来自:

7
下面说说租约的变化,大致分为两种类型
1> 前台,当租约发生改变(比如新副分片加入,小租约就会增加),
2> 后台,定时任务(ES会开启后台线程,每30秒对租约进行检查,如果需要,就清理)
 
  这两种差不多。下面来讲大租约的“清理”
清理过程只发生在主分片上!是重要的一步,就是看看小租约里有没有过期的,有没有失效的。如果有就清理,保证租约的正确性。
111.png

红,蓝框,分别是上面说的两种需要清理的条件,
a> 每个小租约都有个有效时间(缺省12小时),过了这个时间,就认为失效了
(程序的判断是一半,就是6小时后就认为过时了。为什么这么做,没明白为什么)
b> 小租约的保留号失效了(就是拿保留号跟“某个值”比一下。这个比较值,是一个“针对某个分片的“全局检查点, 这个值如何来的,以后谈)
 
清理就是替换掉小租约,新建新的有效的,这没啥好说的。
 
 

要回复问题请先登录注册