Druid集群从0.17升级至0.22.1的操作指南与问题咨询
Druid 0.17 升级至 0.22.1 最佳实践与步骤指导
1. 核心升级步骤
- 预准备阶段
- 全量备份元数据库(MySQL/PostgreSQL等)和Deep Storage中的所有segment文件,防止升级失败导致数据丢失。
- 在测试环境复刻生产集群的配置、数据量和查询负载,完整跑一遍升级流程,验证可行性并记录每个环节的耗时。
- 元数据升级
- 停止旧集群的Coordinator节点,启动0.22.1版本的Coordinator,它会自动检测并升级元数据schema(此过程不可逆,必须确保备份完成)。
- 查看Coordinator日志,确认元数据升级完成且服务状态正常。
- 滚动升级节点
- 按以下顺序逐个升级:Overlord → Historical → MiddleManager → Broker → Router
- 每个节点升级时,先停旧版本进程,替换为0.22.1的二进制包和适配后的配置文件,启动后通过Druid控制台或
curl <node-ip>:<port>/status检查节点健康,确认正常后再进行下一个节点的升级。
- 验证收尾
- 检查所有节点的服务状态、segment加载情况、任务运行状态。
- 执行生产环境的典型查询,验证结果正确性和性能表现。
- 持续监控集群指标(查询延迟、吞吐量、节点CPU/内存使用率)至少24小时,确认无异常。
2. 关键配置变更与数据迁移注意事项
- 配置项变更
- 移除废弃配置:
druid.coordinator.loadqueuepeon.startDelay、druid.indexer.task.hadoopWorkingPath等已被官方移除,需从配置文件中删除。 - 调整配置名称:
druid.processing.buffer.sizeBytes被替换为druid.processing.numMergeBuffers+druid.processing.mergeBufferSizeBytes组合,需按新参数逻辑重新配置。 - 更新安全配置:若启用LDAP认证,0.22版本的LDAP配置结构与0.17差异较大,需参照新格式调整
druid.auth.authenticator.ldap相关参数。
- 移除废弃配置:
- 数据迁移
- 0.17版本的segment文件可直接被0.22.1加载,无需重新索引,但如果使用了已废弃的聚合函数(如
hyperUnique旧实现),建议在测试环境验证查询兼容性,必要时重新索引部分数据。 - 自定义扩展(如自定义聚合器、输入源)需重新编译适配0.22.1的API,否则会导致节点启动失败。
- 0.17版本的segment文件可直接被0.22.1加载,无需重新索引,但如果使用了已废弃的聚合函数(如
3. 依赖组件升级建议
- Kafka:Druid 0.22.1兼容Kafka 2.0.x至2.8.x版本,若当前使用的Kafka版本低于2.0.x,建议同步升级至2.5.x或2.8.x(稳定版);若已在2.0.x以上,可无需强制升级,但需确保Kafka客户端配置与Druid版本匹配。
- ZooKeeper:0.22.1支持ZooKeeper 3.4.x至3.5.x,若当前使用3.4.x可继续保留,如需升级推荐3.5.9版本(稳定且兼容性好)。
- 元数据库:MySQL需5.7及以上,PostgreSQL需9.6及以上,若当前版本低于此要求,需先升级元数据库再进行Druid升级。
4. 生产环境平滑升级方案
- 蓝绿部署(推荐,你已具备双集群条件)
- 保持旧集群正常服务,同时启动新集群并配置Kafka ingestion任务双写(同时向新旧集群写入数据),确保新集群的数据追上旧集群。
- 通过负载均衡器逐步将查询流量从旧集群切换到新集群(调整权重),切换过程中监控两边的查询性能和结果正确性。
- 确认新集群稳定运行至少48小时后,停止旧集群的ingestion任务,逐步下线旧集群节点。
- 滚动升级优化
- 选择业务低峰期(如凌晨)执行升级,减少对用户的影响。
- 升级Historical节点时,可先将该节点的segment迁移至其他Historical节点再停止,避免segment重新加载导致的查询延迟。
- 升级Broker节点时,通过负载均衡器临时摘除该节点,待启动正常后再重新加入集群。
5. 已知问题与规避陷阱
- 元数据升级不可逆:一旦启动新版本Coordinator完成元数据升级,旧版本集群将无法再连接元数据库,务必提前备份并在测试环境验证。
- 查询兼容性问题:0.19版本引入的新查询引擎优化可能导致部分旧SQL查询的执行计划变化,需在测试环境覆盖所有典型查询场景。
- MiddleManager任务异常:0.22版本中部分Kafka ingestion任务可能出现分区分配异常,需调整
druid.indexer.task.partitions参数为合理值(建议等于Kafka分区数)。 - 扩展兼容性:自定义扩展若未适配0.22.1的API,会导致节点启动失败,需提前在测试环境验证所有扩展的可用性。
- 内存配置调整:0.22版本的内存模型有细微调整,需根据测试环境的监控数据调整
druid.processing.memory.sizeBytes等参数,避免OOM。
内容的提问来源于stack exchange,提问作者Kevin Chethlan Santosh
相关产品推荐
相关产品推荐

