2
2
title : 兼容性
3
3
sidebar_label : 兼容性
4
4
description :
5
- 调查和管理兼容性
5
+ 检查和管理兼容性
6
6
---
7
7
8
- 本指南将介绍如何调查和管理兼容性 :
9
- - databend-query 和 databend-meta 之间的兼容性。
10
- - 不同版本的 databend-meta 之间的兼容性。
8
+ 本指南将介绍如何检查和管理以下组件之间的兼容性 :
9
+ - databend-query 和 databend-meta 之间
10
+ - 不同版本的 databend-meta 之间
11
11
12
12
## databend-query 和 databend-meta 之间的兼容性
13
13
14
14
### 识别版本
15
15
16
- - 找出 databend-query 的构建版本及其兼容的 databend-meta 版本:
16
+ - 查询 databend-query 的构建版本及其兼容的 databend-meta 版本:
17
17
18
18
``` shell
19
19
databend-query --cmd ver
@@ -23,9 +23,9 @@ description:
23
23
min-compatible-metasrv-version: 0.7.59
24
24
```
25
25
26
- 这意味着此版本的 databend-query(` 0.7.61-nightly ` )可以与至少 ` 0.7.59 ` 版本的 databend-meta 通信,包括该版本 。
26
+ 这意味着此构建版本的 databend-query(` 0.7.61-nightly ` )可与版本至少为 ` 0.7.59 ` (含)的 databend-meta 通信。
27
27
28
- - 找出 databend-meta 的构建版本及其兼容的 databend-query 版本:
28
+ - 查询 databend-meta 的构建版本及其兼容的 databend-query 版本:
29
29
30
30
``` shell
31
31
databend-meta --cmd ver
@@ -35,49 +35,45 @@ description:
35
35
min-compatible-client-version: 0.7.57
36
36
```
37
37
38
- 这意味着此版本的 databend-meta(` 0.7.61-nightly ` )可以与至少 ` 0.7.57 ` 版本的 databend-query 通信,包括该版本 。
38
+ 这意味着此构建版本的 databend-meta(` 0.7.61-nightly ` )可与版本至少为 ` 0.7.57 ` (含)的 databend-query 通信。
39
39
40
40
### 维护兼容性
41
41
42
- 必须使用兼容版本的 databend-query 和 databend-meta 部署 Databend 集群 。
43
- 当且仅当以下语句成立时,databend-query 和 databend-meta 才兼容 :
42
+ Databend 集群必须部署兼容版本的 databend-query 和 databend-meta。
43
+ 当且仅当以下条件成立时,两者兼容 :
44
44
45
45
```
46
46
databend-query.version >= databend-meta.min-compatible-client-version
47
- databend-bend .version >= databend-query.min-compatible-metasrv-version
47
+ databend-meta .version >= databend-query.min-compatible-metasrv-version
48
48
```
49
49
50
50
::: caution
51
51
52
- 如果部署了不兼容的版本,当 databend-query 尝试连接到 databend-meta 时,将发生 ` InvalidArgument ` 错误,
53
- 可以在 databend-query 日志中找到。
54
- 然后 databend-query 将停止工作。
52
+ 若部署不兼容版本,当 databend-query 尝试连接 databend-meta 时将出现 ` InvalidArgument ` 错误(可在 databend-query 日志中查看),
53
+ 随后 databend-query 将停止工作。
55
54
56
55
:::
57
56
58
57
#### 兼容性验证协议
59
58
60
- 当 meta-client(databend-query)和 databend-meta 之间建立连接时,将在 ` handshake ` RPC 中检查兼容性。
59
+ 当 meta-client(databend-query)与 databend-meta 建立连接时,会在 ` handshake ` RPC 中检查兼容性。
61
60
62
- 客户端 ` C ` (databend-query)和服务器 ` S ` (databend-meta)维护两个语义版本:
61
+ 客户端 ` C ` (databend-query)和服务器 ` S ` (databend-meta)各自维护两个语义版本:
62
+ - ` C ` 维护自身版本(` C.ver ` )和兼容的最低 ` S ` 版本(` C.min_srv_ver ` )
63
+ - ` S ` 维护自身版本(` S.ver ` )和兼容的最低 ` C ` 版本(` S.min_cli_ver ` )
63
64
64
- - ` C ` 维护其自身的 semver(` C.ver ` )和最小兼容的 ` S ` semver(` C.min_srv_ver ` )。
65
- - ` S ` 维护其自身的 semver(` S.ver ` )和最小兼容的 ` S ` semver(` S.min_cli_ver ` )。
65
+ 握手流程:
66
+ 1 . ` C ` 发送 ` C.ver ` 至 ` S `
67
+ 2 . ` S ` 收到请求后断言 ` C.ver >= S.min_cli_ver `
68
+ 3 . ` S ` 回复握手响应并返回 ` S.ver `
69
+ 4 . ` C ` 收到响应后断言 ` S.ver >= C.min_srv_ver `
66
70
67
- 握手时:
71
+ 两项断言均成立时握手成功。
68
72
69
- - ` C ` 将其版本 ` C.ver ` 发送到 ` S ` ,
70
- - 当 ` S ` 收到握手请求时,` S ` 断言 ` C.ver >= S.min_cli_ver ` 。
71
- - 然后 ` S ` 使用其 ` S.ver ` 回复握手回复。
72
- - 当 ` C ` 收到回复时,` C ` 断言 ` S.ver >= C.min_srv_ver ` 。
73
-
74
- 如果这两个断言都成立,则握手成功。
75
-
76
- 例如:
77
- - ` S: (ver=3, min_cli_ver=1) ` 与 ` C: (ver=3, min_srv_ver=2) ` 兼容。
78
- - ` S: (ver=4, min_cli_ver=4) ` 与 ` C: (ver=3, min_srv_ver=2) ` ** 不** 兼容。
79
- 因为虽然 ` S.ver(4) >= C.min_srv_ver(3) ` 成立,
80
- 但 ` C.ver(3) >= S.min_cli_ver(4) ` 不成立。
73
+ 示例:
74
+ - ` S: (ver=3, min_cli_ver=1) ` 兼容 ` C: (ver=3, min_srv_ver=2) `
75
+ - ` S: (ver=4, min_cli_ver=4) ` ** 不** 兼容 ` C: (ver=3, min_srv_ver=2) `
76
+ (因 ` C.ver(3) >= S.min_cli_ver(4) ` 不成立)
81
77
82
78
``` text
83
79
C.ver: 1 3 4
@@ -93,7 +89,7 @@ S.ver: 2 3 4
93
89
94
90
#### 兼容性状态
95
91
96
- 以下是最新的 query-meta 兼容性的说明 :
92
+ 最新 query-meta 兼容性图示 :
97
93
98
94
| ` Meta\Query ` | [ 0.9.41, 1.1.34) | [ 1.1.34, 1.2.287) | [ 1.2.287, 1.2.361) | [ 1.2.361, +∞) |
99
95
| :-------------------| :-----------------| :---------------| :-----------| :-----------|
@@ -106,85 +102,74 @@ S.ver: 2 3 4
106
102
| [ 1.2.226, 1.2.258) | ✅ | ✅ | ✅ | ❌ |
107
103
| [ 1.2.258, +∞) | ✅ | ✅ | ✅ | ✅ |
108
104
109
- 未包含在上述图表中的历史版本:
110
-
111
- - Query ` [0.7.59, 0.8.80) ` 与 Meta ` [0.8.30, 0.9.23) ` 兼容。
112
- - Query ` [0.8.80, 0.9.41) ` 与 Meta ` [0.8.35, 0.9.42) ` 兼容。
113
-
105
+ 历史版本补充:
106
+ - Query ` [0.7.59, 0.8.80) ` 兼容 Meta ` [0.8.30, 0.9.23) `
107
+ - Query ` [0.8.80, 0.9.41) ` 兼容 Meta ` [0.8.35, 0.9.42) `
114
108
115
109
<img src =" /img/deploy/compatibility.excalidraw.png " />
116
110
117
- # databend-query 之间的兼容性
111
+ # databend-query 版本兼容性
118
112
119
113
## 版本兼容性矩阵
120
114
121
- | Query version | Backward compatible with | Key Changes |
115
+ | Query 版本 | 向后兼容版本 | 主要变更 |
122
116
| :-------------------| :--------------------------| :------------|
123
- | [ -∞, 1.2.307) | [ -∞, 1.2.311) | Original format |
124
- | [ 1.2.307, 1.2.311) | [ -∞, 1.2.311) | Added Role info with PB/JSON support |
125
- | [ 1.2.311, 1.2.709) | [ 1.2.307, +∞) | Role info serialized to PB only |
126
- | [ 1.2.709, +∞) | [ 1.2.709, +∞) | ** Important** : Fuse storage path changed |
117
+ | [ -∞, 1.2.307) | [ -∞, 1.2.311) | 原始格式 |
118
+ | [ 1.2.307, 1.2.311) | [ -∞, 1.2.311) | 新增 Role 信息(支持 PB/JSON) |
119
+ | [ 1.2.311, 1.2.709) | [ 1.2.307, +∞) | Role 信息仅序列化为 PB |
120
+ | [ 1.2.709, +∞) | [ 1.2.709, +∞) | ** 重要** :Fuse 存储路径变更 |
121
+
122
+ ## 重要变更与升级说明
127
123
128
- ## Important Changes & Upgrade Instructions
124
+ ### 版本 1.2.307
125
+ - 支持通过 PB/JSON 反序列化 Role 信息
126
+ - 仅支持将 Role 信息序列化为 JSON
127
+ - ** 若使用早期版本,请优先升级至此版本**
129
128
130
- ### Version 1.2.307
131
- - Support deserialize Role info with PB and JSON
132
- - Only support serialize Role info to JSON
133
- - ** Upgrade to this version first ** if you're on an earlier version
129
+ ### 版本 1.2.311
130
+ - 仅支持将 Role 信息序列化为 PB
131
+ - ** 升级至 1.2.307 后需升级至此版本 **
132
+ - 升级路径示例: ` 1.2.306 → 1.2.307 → 1.2.311 → 1.2.312 `
134
133
135
- ### Version 1.2.311
136
- - Only support serialize Role info to PB
137
- - ** Upgrade to this version next** after reaching 1.2.307
138
- - Example upgrade path: ` 1.2.306 -> 1.2.307 -> 1.2.311 -> 1.2.312 `
134
+ ### 版本 1.2.709
135
+ - ** 重要变更** :Fuse 存储路径调整
136
+ - ⚠️ 1.2.709 之前版本可能无法读取 1.2.709+ 版本的部分数据
137
+ - ⚠️ ** 建议** :同一租户下所有节点需同时升级
138
+ - 避免混用 1.2.709 前后版本节点,防止数据访问异常
139
139
140
- ### Version 1.2.709
141
- - ** Important Change** : Fuse storage path modified
142
- - ⚠️ Versions before 1.2.709 may not be able to read some data from versions 1.2.709+
143
- - ⚠️ ** Recommendation** : All nodes under the same tenant should be upgraded together
144
- - Avoid mixing nodes with versions before and after 1.2.709 to prevent potential data access issues
140
+ ### 版本 1.2.764
141
+ - 若需为 ` system_history ` 表指定不同存储位置,租户内所有节点需升级至 1.2.764+
145
142
146
- ## databend-meta 之间的兼容性
143
+ ## databend-meta 版本兼容性
147
144
148
- | Meta version | Backward compatible with |
145
+ | Meta 版本 | 向后兼容版本 |
149
146
| :--------------------| :-------------------------|
150
147
| [ 0.9.41, 1.2.212) | [ 0.9.41, 1.2.212) |
151
148
| [ 1.2.212, 1.2.479) | [ 0.9.41, 1.2.479) |
152
149
| [ 1.2.479, 1.2.655) | [ 1.2.288, 1.2.655) |
153
150
| [ 1.2.655, +∞) | [ 1.2.288, +∞) |
154
151
155
-
156
152
![ ] ( @site/static/img/deploy/compat-meta-meta-1-2-655.svg )
157
153
158
- - ` 1.2.53 ` 不兼容,允许滚动升级,无需传输快照。
159
- 快照格式已更改,因此在滚动升级期间,
160
- 它要求所有节点数据都是最新的,确保不需要使用快照进行复制。
161
-
162
- - ` 1.2.163 ` 功能:gRPC API:添加了 ` kv_read_v1() ` 。用于流式读取。
163
-
164
- - ` 1.2.212 ` 2023-11-16 功能:raft API:` install_snapshot_v1() ` 。与旧版本兼容。
165
- 支持滚动升级。
166
- 在此版本中,databend-meta raft-server 引入了一个新的 API ` install_snapshot_v1() ` 。
167
- raft-client 将尝试使用这个新的 API 或原始的 ` install_snapshot() ` 。
168
-
169
- - ` 1.2.479 ` 2024-05-21 从客户端和服务器中删除:` install_snapshot() ` (v0)。
170
- ` install_snapshot_v1() ` 是安装快照的唯一 API,并且对于客户端来说是** 必需的** 。
171
-
172
- - ` 1.2.528 ` 2024-06-13 删除磁盘数据版本 ` V001 ` 。使用 ` V002 ` 的第一个版本是 ` 1.2.53 ` ,2023-08-08。
173
- 因此,自 ` 1.2.528 ` 以来,最旧的兼容版本是 ` 1.2.53 ` 。
174
- 因此,自此版本起,兼容性保持不变。
175
-
176
- - ` 1.2.552 ` 2024-07-02 引入磁盘 ` V003 ` ,使用 ` rotbl ` 格式快照,
177
- 与 ` V002 ` 兼容。最旧的兼容版本是 ` 1.2.288 ` (` 1.2.212~1.2.287 ` 已删除)。
178
-
179
- - ` 1.2.655 ` 2024-11-11 引入磁盘 ` V004 ` ,使用基于 WAL 的 Raft 日志存储,
180
- 与 ` V002 ` 兼容。最旧的兼容版本是 ` 1.2.288 ` (` 1.2.212~1.2.287 ` 已删除)。
181
-
182
-
183
- ## databend-meta 磁盘数据的兼容性
184
-
185
- Databend-meta 的磁盘数据随着时间的推移而演变,同时保持向后兼容性。
186
-
187
- | DataVersion | Databend-version | Min Compatible with |
154
+ - ` 1.2.53 ` 不兼容,允许无快照传输的滚动升级
155
+ 快照格式变更要求所有节点数据保持最新,确保无需快照复制
156
+ - ` 1.2.163 ` 功能:新增流式读取 gRPC API ` kv_read_v1() `
157
+ - ` 1.2.212 ` (2023-11-16) 功能:新增 raft API ` install_snapshot_v1 ` (兼容旧版本,支持滚动升级)
158
+ raft-client 将自动选择新 API 或原始 ` install_snapshot() `
159
+ - ` 1.2.479 ` (2024-05-21) 移除:客户端/服务端的 ` install_snapshot() ` (v0)
160
+ ` install_snapshot_v1() ` 成为唯一快照安装 API(** 必需** )
161
+ - ` 1.2.528 ` (2024-06-13) 移除磁盘数据版本 ` V001 `
162
+ 首个使用 ` V002 ` 的版本为 ` 1.2.53 ` (2023-08-08),故自此版本起最低兼容版本为 ` 1.2.53 `
163
+ - ` 1.2.552 ` (2024-07-02) 引入磁盘数据版本 ` V003 ` (` rotbl ` 格式快照,兼容 ` V002 ` )
164
+ 最低兼容版本为 ` 1.2.288 ` (已移除 ` 1.2.212~1.2.287 ` )
165
+ - ` 1.2.655 ` (2024-11-11) 引入磁盘数据版本 ` V004 ` (基于 WAL 的 Raft 日志存储,兼容 ` V002 ` )
166
+ 最低兼容版本为 ` 1.2.288 ` (已移除 ` 1.2.212~1.2.287 ` )
167
+
168
+ ## databend-meta 磁盘数据兼容性
169
+
170
+ Databend-meta 磁盘数据随版本演进并保持向后兼容:
171
+
172
+ | 数据版本(DataVersion) | Databend 版本 | 最低兼容版本 |
188
173
| :------------| :-----------------| :--------------------|
189
174
| V004 | 1.2.655 | V002 |
190
175
| V003 | 1.2.547 | V002 |
@@ -193,11 +178,11 @@ Databend-meta 的磁盘数据随着时间的推移而演变,同时保持向后
193
178
194
179
### 识别版本
195
180
196
- 启动时,Databend-meta 将显示磁盘数据版本 :
197
-
198
- 例如,运行 ` databend-meta --single ` 会产生:
181
+ 启动时显示磁盘数据版本 :
182
+ ``` shell
183
+ databend-meta --single
199
184
200
- ```
185
+ # 输出:
201
186
Databend Metasrv
202
187
203
188
Version: v1.1.33-nightly-...
@@ -207,20 +192,15 @@ On Disk Data:
207
192
Dir: ./.databend/meta
208
193
Version: version=V0, upgrading=None
209
194
```
195
+ - ** 工作数据版本(Working DataVersion)** :运行所用版本
196
+ - ** 磁盘数据版本(On Disk Data Version)** :磁盘数据版本
210
197
211
- - ` Working DataVersion ` 表示 Databend-meta 运行的版本。
212
- - ` On Disk Data -- DataVersion ` 表示磁盘数据的版本。
213
-
214
- Working DataVersion 必须大于或等于磁盘 DataVersion;否则,它将 panic。
215
-
216
- 磁盘 DataVersion 必须与当前的 Databend-meta 版本兼容。
217
- 如果不是,系统将提示用户降级 Databend-meta 并以 panic 退出。
198
+ 工作数据版本 ≥ 磁盘数据版本(否则 panic)。
199
+ 磁盘数据版本需与当前版本兼容(否则提示降级并退出)。
218
200
219
201
### 自动升级
220
202
221
- 当 ` databend-meta ` 启动时,如果磁盘数据与工作 DataVersion 兼容,则会升级磁盘数据。
222
- 升级进度将打印到 ` stderr ` 和 INFO 级别的日志文件中,例如:
223
-
203
+ 启动时若磁盘数据与工作版本兼容,将自动升级。升级进度输出至 ` stderr ` 和日志:
224
204
``` text
225
205
Upgrade on-disk data
226
206
From: V0(2023-04-21: compatible with openraft v07 and v08, using openraft::compat)
@@ -231,16 +211,11 @@ Upgraded 167 records
231
211
Finished upgrading: version: V001, upgrading: None
232
212
Write header: version: V001, upgrading: None
233
213
```
234
-
235
- 如果 ` databend-meta ` 在升级完成之前崩溃,
236
- 它将清除部分升级的数据,并在再次启动时恢复升级。
214
+ 若升级过程中崩溃,重启时将清除部分升级数据并继续。
237
215
238
216
### 备份数据兼容性
239
217
240
- - 导出的备份数据** 只能使用** 相同版本的 ` databend-metactl ` 导入。
241
-
242
- - 备份的第一行是版本,例如:
218
+ - 导出备份** 仅限** 同版本 ` databend-metactl ` 导入
219
+ - 备份首行为版本标识:
243
220
` ["header",{"DataHeader":{"key":"header","value":{"version":"V100","upgrading":null}}}] `
244
-
245
- - 导入时** 不会自动升级** 。
246
- 只有在启动 ` databend-meta ` 时才会自动升级。
221
+ - 导入时** 不触发** 自动升级(仅 ` databend-meta ` 启动时执行)
0 commit comments