【Druid】Coordinator Node

2017-10-03  本文已影响348人  PowerMe

Druid协调节点主要负责segment的管理和分配,它基于配置信息通知历史节点加载和删除segments。具体来说,协调节点的工作主要包括以下几个方面:加载新segments信息,删除过期segments信息,管理segment的复制操作和segment的负载均衡。

协调节点周期性的执行操作,执行间隔通过配置参数指定。与Broker和Historical节点类似,协调节点也会与ZK维持一个长连接,在执行相应的动作之前,协调节点会从ZK获取集群当前的状态。同时协调节点也维持着与一个数据库的链接,其中存储着可用segments和规则的信息。可用segments信息存储在segment表里,其中列除了所有在集群中加载的segments。规则信息存储在规则表中,它指明了segments应该被怎样处理。

在一个新segment被分配至历史节点前,所有可用的历史节点会根据已存储数据的大小进行排序,存储数据最少的节点有最高的优先级被分配到新segment,这种机制是为了节点之间存储的均衡。协调节点不会直接同历史节点进行通信,分配segment的过程是通过在ZK中相应的历史节点路径下创建临时segment信息节点完成的。一旦该动作被历史节点获知,该segment就会被历史节点加载,并使其可查询。

Running

io.druid.cli.Main server coordinator

Rules

Segments基于一组机制能够实现从集群中动态的加载和删除

Cleaning Up Segments

每一次执行时,协调节点将会对数据库中存储的可用segment信息和集群中当前可用的segment信息做比较。集群中存在但数据库中不存在的segments将会被标记并加入待删除队列。对于那些版本已过期并且数据已被新的segments覆盖的segments也会被删除。注意,如果数据库中所有的segments都被删除了(或者被标记为不可用),协调节点这时不会从集群中删除segments。

Segment Availability

如果一个历史节点由于重启或者其他原因处于不可用状态,协调节点会通知一个历史节点丢失,并将该历史节点服务的segments全部置为dropped。在一段时间后,这些segments会被重新分配给集群中的其它节点。但是,并不是每个被删除的segments信息马上就会被集群清理,会有一个数据结构来存储删除的segments和它们对应的生命周期。在这个周期时间内,协调节点不会重新分配这个删除的segments。因此,当一个历史节点在很短的时间内转变为可用状态时,它就能马上启动并使本地cache中的segments可用,同时避免了segments在集群节点中的从新分配过程。

Balancing Segment Load

为了保证segments在集群中尽可能地均匀分布,协调节点在每次运行时会计算每个历史节点所服务的所有segments的数据量情况。在集群每一层的历史节点中,协调节点会选出存储利用率最高和最低的历史节点,如果两个节点之间的利用率差值超过了一定的阈值,协调节点就会将一部分segments从最高利用率节点迁移到最低利用率节点,能够迁移的segments数量上限通过一个参数来限制。对于需要迁移Segments的选择是随机的,并且只有迁移动作真正能使利用率降低的情况下segments才会被迁移。

HTTP Endpoints

协调节点提供的接口(协调节点提供的接口很多,这里列举几个,详情请参考官网 【HTTP Endpoints】小节):

GET

Coordinator information

Metadata store information

Datasources information

Rules

以json对象的形式返回集群中所有datasource包括默认datasource包含的rules信息。

Intervals

DELETE

上一篇下一篇

猜你喜欢

热点阅读