版本:0.12.3升级至0.18.1(以下简称新旧版本)
应用场景:多维分析,主离线,极少实时。
集群规模:25台主机
数据规模:约50W个segment
在保证兼容性、可回滚、用户接受的前提下,停止服务,分层升级Druid各模块。功能测试、性能测试。本次升级采用完全停止服务的方式。(文末提供不停机升级的思路)
我们的数据摄入与数据服务是分离的,即使用Hadoop Indexer的模式,Indexer由调度系统定时启动。我们在升级服务集群前已先热升级了摄入组件,升级服务集群时要不影响数据摄入主要关注元数据库状态。具体有两个方案:一,暂停数据摄入,升级后再恢复;二,找个摄入任务少的时段升级,如果升级正常则新摄入的数据能正常加载,升级异常回滚元数据库会丢失少量新摄入数据,摄入任务重跑即可。我们采用了第二种,因为我们已经测试过就算升级失败,两版本来回切换不会造成元数据库异常,数据仍能正常加载。即我们做到了,升级的同时不影响数据摄入。
Druid的数据需要从深度存储HDFS拉取到本地再进行加载。我们升级的集群包含近70TB segment cache,若完全从HDFS重新拉取,将非常耗时。故本次升级采用Historical节点原机升级的方式,直接使用旧版本拉取的本地数据进行加载,大大省去了从HDFS拉取的过程。
Druid依赖HDFS与元数据库,只要保证HDFS与元数据库可回滚则可保证整个Druid集群可回滚。其中HDFS只要不在新版本中手动永久删除数据,则HDFS上旧的数据不会变更、丢失。元数据库可以进行备份,异常则还原即可。
回滚方案
此处感谢腾讯游戏的@明亮
2020-07-04T02:33:00.000 WARN [DruidSchema-Cache-0] org.apache.druid.sql.calcite.schema.DruidSchema - Metadata refresh failed trying again soon.
org.apache.druid.utilmon RE: ] url[此处屏蔽host/druid/v2/] timed out.
... ...
需要与原版本相同资源的一套机器环境。ZK新旧版本独立;HDFS共用(无更新操作,共用不影响);元数据库共用,新版本使用一个只读的用户访问,避免新版本更新元数据库。然后启动新版本集群,两版本集群并行。对新版本进行全面验证,验证通过则切换入口,旧版本下线,提高元数据库权限(验证失败则新版本集群下线)。升级完成。
本文发布于:2024-02-05 03:08:06,感谢您对本站的认可!
本文链接:https://www.4u4v.net/it/170722566862451.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
留言与评论(共有 0 条评论) |