本文介绍如何使用 更新来升级 基于 Doris-Operator 部署的 Apache Doris 集群。

和常规部署的集群升级类似,Doris-Operator 部署的 Doris 集群依然需要 BE 到 FE 节点滚动升级,Doris-Operator 基于 Kubernetes 的 滚动更新功能 提供了滚动升级能力。

升级前注意事项

  • 升级操作推荐在业务低峰期进行。
  • 滚动升级过程中,会导致连接到被关闭节点的连接失效,造成请求失败,对于这类业务,推荐在客户端添加重试能力。
  • 升级前可以阅读 常规升级手册,便于理解升级中的一些原理和注意事项。
  • 升级前无法对数据和元数据的兼容性进行验证,因此集群升级一定要避免数据存在 单副本 情况 和 集群单 FE FOLLOWER 节点。
  • 升级过程中会有节点重启,所以可能会触发不必要的集群均衡和副本修复逻辑,先通过以下命令关闭
  1. admin set frontend config("disable_balance" = "true");
  2. admin set frontend config("disable_colocate_balance" = "true");
  3. admin set frontend config("disable_tablet_scheduler" = "true");
  • Doris 升级请遵守不要跨两个及以上关键节点版本升级的原则,若要跨多个关键节点版本升级,先升级到最近的关键节点版本,随后再依次往后升级,若是非关键节点版本,则可忽略跳过。具体参考 升级版本说明

升级操作

升级过程节点类型顺序如下,如果某类型节点不存在则跳过:

  1. cn/be -> fe -> broker

建议依次修改对应集群组件的 image 然后 应用该配置,待当前类型的组件完全升级成功状态恢复正常后,再进行下一个类型节点的滚动升级。

升级 BE

如果保留了集群的 crd(Doris-Operator 定义了 DorisCluster 类型资源名称的简写)文件,则可以通过修改该配置文件并且 kubectl apply 的命令来进行升级。

  1. 修改 spec.beSpec.image

    selectdb/doris.be-ubuntu:2.0.4 变为 selectdb/doris.be-ubuntu:2.1.0

  1. $ vim doriscluster-sample.yaml
  1. 保存修改后应用本次修改进行be升级:
  1. $ kubectl apply -f doriscluster-sample.yaml -n doris

也可通过 kubectl edit dcr 的方式直接修改。

  1. 查看 namespace 为 ‘doris’ 下的 dcr 列表,获取需要更新的 cluster_name
  1. $ kubectl get dcr -n doris
  2. NAME FESTATUS BESTATUS CNSTATUS
  3. doriscluster-sample available available
  1. 修改、保存并生效
  1. $ kubectl edit dcr doriscluster-sample -n doris
  1. 进入文本编辑器后,将找到`spec.beSpec.image`,将 `selectdb/doris.be-ubuntu:2.0.4` 修改为 `selectdb/doris.be-ubuntu:2.1.0`
  1. 查看升级过程和结果:
  1. $ kubectl get pod -n doris

当所有 Pod 都重建完毕进入 Running 状态后,升级完成。

升级 FE

如果保留了集群的 crd ( Doris-Operator 定义了 DorisCluster 类型资源名称的简写)文件,则可以通过修改该配置文件并且 kubectl apply 的命令来进行升级。

  1. 修改 spec.feSpec.image

    selectdb/doris.fe-ubuntu:2.0.4 变为 selectdb/doris.fe-ubuntu:2.1.0

  1. $ vim doriscluster-sample.yaml
  1. 保存修改后应用本次修改进行be升级:
  1. $ kubectl apply -f doriscluster-sample.yaml -n doris

也可通过 kubectl edit dcr 的方式直接修改。

  1. 修改、保存并生效
  1. $ kubectl edit dcr doriscluster-sample -n doris
  1. 进入文本编辑器后,将找到`spec.feSpec.image`,将 `selectdb/doris.fe-ubuntu:2.0.4` 修改为 `selectdb/doris.fe-ubuntu:2.1.0`
  1. 查看升级过程和结果
  1. $ kubectl get pod -n doris

当所有 Pod 都重建完毕进入 Running 状态后,升级完成。

升级完成后

验证集群节点状态

通过 访问 Doris 集群 文档提供的方式,通过 mysql-client 访问 Doris。 使用 show frontendsshow backends 等 SQL 查看各个组件的 版本 和 状态。

  1. mysql> show frontends\G;
  2. *************************** 1. row ***************************
  3. Name: fe_13c132aa_3281_4f4f_97e8_655d01287425
  4. Host: doriscluster-sample-fe-0.doriscluster-sample-fe-internal.doris.svc.cluster.local
  5. EditLogPort: 9010
  6. HttpPort: 8030
  7. QueryPort: 9030
  8. RpcPort: 9020
  9. ArrowFlightSqlPort: -1
  10. Role: FOLLOWER
  11. IsMaster: false
  12. ClusterId: 1779160761
  13. Join: true
  14. Alive: true
  15. ReplayedJournalId: 2422
  16. LastStartTime: 2024-02-19 06:38:47
  17. LastHeartbeat: 2024-02-19 09:31:33
  18. IsHelper: true
  19. ErrMsg:
  20. Version: doris-2.1.0
  21. CurrentConnected: Yes
  22. *************************** 2. row ***************************
  23. Name: fe_f1a9d008_d110_4780_8e60_13d392faa54e
  24. Host: doriscluster-sample-fe-2.doriscluster-sample-fe-internal.doris.svc.cluster.local
  25. EditLogPort: 9010
  26. HttpPort: 8030
  27. QueryPort: 9030
  28. RpcPort: 9020
  29. ArrowFlightSqlPort: -1
  30. Role: FOLLOWER
  31. IsMaster: true
  32. ClusterId: 1779160761
  33. Join: true
  34. Alive: true
  35. ReplayedJournalId: 2423
  36. LastStartTime: 2024-02-19 06:37:35
  37. LastHeartbeat: 2024-02-19 09:31:33
  38. IsHelper: true
  39. ErrMsg:
  40. Version: doris-2.1.0
  41. CurrentConnected: No
  42. *************************** 3. row ***************************
  43. Name: fe_e42bf9da_006f_4302_b861_770d2c955a47
  44. Host: doriscluster-sample-fe-1.doriscluster-sample-fe-internal.doris.svc.cluster.local
  45. EditLogPort: 9010
  46. HttpPort: 8030
  47. QueryPort: 9030
  48. RpcPort: 9020
  49. ArrowFlightSqlPort: -1
  50. Role: FOLLOWER
  51. IsMaster: false
  52. ClusterId: 1779160761
  53. Join: true
  54. Alive: true
  55. ReplayedJournalId: 2422
  56. LastStartTime: 2024-02-19 06:38:17
  57. LastHeartbeat: 2024-02-19 09:31:33
  58. IsHelper: true
  59. ErrMsg:
  60. Version: doris-2.1.0
  61. CurrentConnected: No
  62. 3 rows in set (0.02 sec)

若 FE 节点 alive 状态为 true,且 Version 值为新版本,则该 FE 节点升级成功。

  1. mysql> show backends\G;
  2. *************************** 1. row ***************************
  3. BackendId: 10002
  4. Host: doriscluster-sample-be-0.doriscluster-sample-be-internal.doris.svc.cluster.local
  5. HeartbeatPort: 9050
  6. BePort: 9060
  7. HttpPort: 8040
  8. BrpcPort: 8060
  9. ArrowFlightSqlPort: -1
  10. LastStartTime: 2024-02-19 06:37:56
  11. LastHeartbeat: 2024-02-19 09:32:43
  12. Alive: true
  13. SystemDecommissioned: false
  14. TabletNum: 14
  15. DataUsedCapacity: 0.000
  16. TrashUsedCapcacity: 0.000
  17. AvailCapacity: 12.719 GB
  18. TotalCapacity: 295.167 GB
  19. UsedPct: 95.69 %
  20. MaxDiskUsedPct: 95.69 %
  21. RemoteUsedCapacity: 0.000
  22. Tag: {"location" : "default"}
  23. ErrMsg:
  24. Version: doris-2.1.0
  25. Status: {"lastSuccessReportTabletsTime":"2024-02-19 09:31:48","lastStreamLoadTime":-1,"isQueryDisabled":false,"isLoadDisabled":false}
  26. HeartbeatFailureCounter: 0
  27. NodeRole: mix
  28. *************************** 2. row ***************************
  29. BackendId: 10003
  30. Host: doriscluster-sample-be-1.doriscluster-sample-be-internal.doris.svc.cluster.local
  31. HeartbeatPort: 9050
  32. BePort: 9060
  33. HttpPort: 8040
  34. BrpcPort: 8060
  35. ArrowFlightSqlPort: -1
  36. LastStartTime: 2024-02-19 06:37:35
  37. LastHeartbeat: 2024-02-19 09:32:43
  38. Alive: true
  39. SystemDecommissioned: false
  40. TabletNum: 8
  41. DataUsedCapacity: 0.000
  42. TrashUsedCapcacity: 0.000
  43. AvailCapacity: 12.719 GB
  44. TotalCapacity: 295.167 GB
  45. UsedPct: 95.69 %
  46. MaxDiskUsedPct: 95.69 %
  47. RemoteUsedCapacity: 0.000
  48. Tag: {"location" : "default"}
  49. ErrMsg:
  50. Version: doris-2.1.0
  51. Status: {"lastSuccessReportTabletsTime":"2024-02-19 09:31:43","lastStreamLoadTime":-1,"isQueryDisabled":false,"isLoadDisabled":false}
  52. HeartbeatFailureCounter: 0
  53. NodeRole: mix
  54. *************************** 3. row ***************************
  55. BackendId: 11024
  56. Host: doriscluster-sample-be-2.doriscluster-sample-be-internal.doris.svc.cluster.local
  57. HeartbeatPort: 9050
  58. BePort: 9060
  59. HttpPort: 8040
  60. BrpcPort: 8060
  61. ArrowFlightSqlPort: -1
  62. LastStartTime: 2024-02-19 08:50:36
  63. LastHeartbeat: 2024-02-19 09:32:43
  64. Alive: true
  65. SystemDecommissioned: false
  66. TabletNum: 0
  67. DataUsedCapacity: 0.000
  68. TrashUsedCapcacity: 0.000
  69. AvailCapacity: 12.719 GB
  70. TotalCapacity: 295.167 GB
  71. UsedPct: 95.69 %
  72. MaxDiskUsedPct: 95.69 %
  73. RemoteUsedCapacity: 0.000
  74. Tag: {"location" : "default"}
  75. ErrMsg:
  76. Version: doris-2.1.0
  77. Status: {"lastSuccessReportTabletsTime":"2024-02-19 09:32:04","lastStreamLoadTime":-1,"isQueryDisabled":false,"isLoadDisabled":false}
  78. HeartbeatFailureCounter: 0
  79. NodeRole: mix
  80. 3 rows in set (0.01 sec)

若 BE 节点 alive 状态为 true,且 Version 值为新版本,则该 BE 节点升级成功

恢复集群副本同步和均衡

在确认各个节点状态无误后,执行以下 SQL 恢复集群均衡和副本修复:

  1. admin set frontend config("disable_balance" = "false");
  2. admin set frontend config("disable_colocate_balance" = "false");
  3. admin set frontend config("disable_tablet_scheduler" = "false");