本文介绍如何使用 更新来升级 基于 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 frontends 和 show 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");