滚动升级

对于不停机的滚动升级Apache Druid集群,我们推荐按照以下顺序来升级更新Druid进程

  1. Historical
  2. *Overlord
  3. *MiddleManager/Indexers
  4. Standalone Real-time
  5. Broker
  6. Coordinator(或者合并的Coordinator+Overlord)

*在0.12.0中,Kafka supervisor和Kafka索引任务之间存在协议更改,并且对磁盘上保存的元数据格式也有一些更改。因此,为了支持滚动升级,所有的MiddleManager都需要在Overlord之前先升级。请注意,此顺序与标准升级顺序不同,还请注意,此顺序仅在使用Kafka索引服务时才有必要。如果您不使用Kafka索引服务或可以处理Kafka Supervisor的停机时间,则可以按任何顺序升级。

Historical

Historical可以一次更新一个。 每一个Historical进程都有一个启动时间来内存映射更新之前它所有服务的segment。 启动时间通常是需要几秒钟到几分钟,具体取决于主机的硬件。 只有更新每个Historical进程时有足够的的延迟(大于启动单个进程所需的时间),就可以滚动更新整个Historical集群

Overlord

Overlord进程可以以滚动的方式一次更新一个

MiddleManagers/Indexers

MiddleManagers或者Indexers节点运行着批任务或者实时索引任务。 通常,我们需要以一种特定的方式来更新MiddleManager以保证实时索引任务不会失败。 有以下三种策略可供使用

滚动重启(基于状态保存)

当设置 druid.indexer.task.restoreTasksOnRestart=true 时,MiddleManager可以以滚动的方式一次更新一个。 在这种情况下,支持恢复的索引任务将在MiddleManager重新启动时恢复其状态,并且不会失败。

目前,只有实时任务支持恢复,因此非实时索引任务将失败,需要重新提交。

滚动重启(基于优雅停机)

MiddleManager可以通过disable API来优雅的停止服务。 这种方式针对所有的类型都有效,包括那些不可恢复的任务

在准备升级MiddleManager之前,对 <MiddleManager_IP:PORT>/druid/worker/v1/disable 发送一个POST请求, Overlord将不会再发送任务到该MiddleManager,而已经在运行的任务将会运行完成。 当前的状态可以通过 <MiddleManager_IP:PORT>/druid/worker/v1/enabled 来检测。

通过向 <MiddleManager_IP:PORT>/druid/worker/v1/tasks 发送一个GET请求可以获得所有的当前任务。 当这个队列为空的时候,就可以安全的更新该MiddleManager了,当MiddleManager重新启动后,将会自动的enable,也可以通过手动的发送一个POST请求到 <MiddleManager_IP:PORT>/druid/worker/v1/enable 来启用

基于自动伸缩的替换更新

如果在您的Overlord上启用了自动缩放,则Overlord进程可以整体启动新的MiddleManager进程,然后在其任务完成时优雅地终止旧进程。该进程通过设置 druid.indexer.runner.minWorkerVersion=#{VERSION} 来进行配置。 每当更新Overlord进程时, VERSION 的值需要被增加,这将触发一批新的MiddleManager的启动

同时, druid.indexer.autoscale.workerVersion=#{VERSION} 这个配置也需要设置

Standalone Real-time

Standalone Real-time进程可以以滚动的方式一次更新一个

Broker

Broker进程可以以滚动的方式一次更新一个. 更新每个进程之间需要一些延迟,因为Broker必须在返回有效结果之前加载集群的整个状态。

Coordinator

Coordinator进程可以以滚动的方式一次更新一个

渝ICP备16001958号 | Copyright © 2020 apache-druid.cn All right reserved,powered by Gitbook最近一次修改时间: 2021-11-15 18:18:37

results matching ""

    No results matching ""