@@ -6,18 +6,18 @@ Table 迁移是指将某个 Pegasus 集群的一张表所有数据迁移到另
6
6
7
7
目前提供了四种 Table 迁移方法:
8
8
9
- 1 . Shell 工具命令迁移;
10
- 2 . 冷备份恢复;
9
+ 1 . Shell 工具命令迁移 ;
10
+ 2 . 冷备份恢复 ;
11
11
3 . 业务双写配合 Bulkload;
12
- 4 . 热备迁移;
12
+ 4 . 热备迁移 ;
13
13
14
14
下面开始讲述这些迁移方法的原理、具体操作方式:
15
15
16
16
# Shell 工具命令迁移
17
17
18
18
## 原理
19
19
20
- Shell 工具的 [ copy_data 命令] ( /overview/shell#copy_data ) 原理是通过客户端将原表数据逐条读出并逐条写入新表。具体就是通过 scan 接口从原集群的表中逐条读入数据,然后通过 set 接口将数据逐条写入到目标集群的表中。如果 set 的数据在目标集群的表中已经存在,会直接覆盖。
20
+ Shell 工具的 [ copy_data 命令 ] ( /overview/shell#copy_data ) 原理是通过客户端将原表数据逐条读出并逐条写入新表。具体就是通过 scan 接口从原集群的表中逐条读入数据,然后通过 set 接口将数据逐条写入到目标集群的表中。如果 set 的数据在目标集群的表中已经存在,会直接覆盖。
21
21
22
22
## 具体操作方式
23
23
@@ -39,7 +39,7 @@ copy_data <-c|--target_cluster_name str> <-a|--target_app_name str>
39
39
假设原集群为 ClusterA,目标集群为 ClusterB,需要迁移的表为 TableA。迁移步骤如下:
40
40
41
41
1 . ** 在目标集群上建表.**
42
- 由于 copy_data 命令并不会自动在目标集群上创建表,所以需要自己先建表。相对原表,新表的表名可以不同,partition count 也可以不同。假设在目标集群上新建的表名为 TableB。
42
+ 由于 copy_data 命令并不会自动在目标集群上创建表,所以需要自己先建表。相对原表,新表的表名可以不同, partition count 也可以不同。假设在目标集群上新建的表名为 TableB。
43
43
44
44
2 . ** 在 Shell 工具的配置文件中添加目标集群的配置.**
45
45
因为 copy_data 命令需要通过 ``` -c ``` 参数指定目标集群,所以需要配置目标集群的 MetaServer 地址列表。在执行 Shell 所在文件夹,修改配置文件 [ src/shell/config.ini] ( https://github.com/apache/incubator-pegasus/blob/master/src/shell/config.ini ) ,在文件最后添加如下几行(将 ClusterB 替换为你自己的集群名):
@@ -55,7 +55,7 @@ copy_data <-c|--target_cluster_name str> <-a|--target_app_name str>
55
55
```
56
56
57
57
4 . ** 监控迁移进度.**
58
- 如果以上步骤都没有问题,copy 操作应当就开始执行了,每隔 1 秒会打印进度。通常来说,copy 速度应当在 10 万 / 秒以上。copy 过程中如果出现问题终止了(比如遭遇写限流,write stall 等),需排查问题后再重新执行命令。
58
+ 如果以上步骤都没有问题, copy 操作应当就开始执行了,每隔 1 秒会打印进度。通常来说, copy 速度应当在 10 万 / 秒以上。 copy 过程中如果出现问题终止了(比如遭遇写限流, write stall 等),需排查问题后再重新执行命令。
59
59
60
60
61
61
@@ -66,9 +66,9 @@ copy_data <-c|--target_cluster_name str> <-a|--target_app_name str>
66
66
所谓冷备份迁移,就是利用 Pegasus 的 [ 冷备份功能 ] ( /administration/cold-backup ) ,先将数据备份到 HDFS 或者其他介质上,然后通过 restore 或 bulkload 恢复到新的表中。
67
67
68
68
** 冷备份迁移的好处**
69
- - ** 速度更快:** 因为冷备份是拷贝文件,相对 copy_data 的逐条拷贝,速度要快很多。
70
- - ** 错误容忍度高:** 冷备份功能有很多容错逻辑,避免因为网络抖动等问题带来的影响。如果用 copy_data,中途出错就需要从头再来。
71
- - ** 多次迁移更友好:** 如果要从一个表拷贝到多个地方,只需要备份一次,然后执行多次恢复。
69
+ - ** 速度更快:** 因为冷备份是拷贝文件,相对 copy_data 的逐条拷贝,速度要快很多。
70
+ - ** 错误容忍度高:** 冷备份功能有很多容错逻辑,避免因为网络抖动等问题带来的影响。如果用 copy_data,中途出错就需要从头再来。
71
+ - ** 多次迁移更友好:** 如果要从一个表拷贝到多个地方,只需要备份一次,然后执行多次恢复。
72
72
73
73
## 具体操作方式
74
74
@@ -88,7 +88,7 @@ copy_data <-c|--target_cluster_name str> <-a|--target_app_name str>
88
88
remote_command -t replica-server nfs.max_send_rate_megabytes_per_disk 50
89
89
```
90
90
91
- - 通过 admin-cli 发起冷备并等待,参数依次为表 id,HDFS 所在 Region,HDFS 存储路径。
91
+ - 通过 admin-cli 发起冷备并等待,参数依次为表 id, HDFS 所在 Region, HDFS 存储路径。
92
92
93
93
```
94
94
backup 3 hdfs_xyz /user/pegasus/backup
@@ -102,7 +102,7 @@ copy_data <-c|--target_cluster_name str> <-a|--target_app_name str>
102
102
args = hdfs://xyzprc-hadoop /
103
103
```
104
104
105
- - 观察监控磁盘 IO 逐渐降低,代表冷备份进入第二阶段。此时可以不断观察监控中网络带宽占用情况,适当放开限速来加速冷备,经验值是每次递增 50。
105
+ - 观察监控磁盘 IO 逐渐降低,代表冷备份进入第二阶段。此时可以不断观察监控中网络带宽占用情况,适当放开限速来加速冷备,经验值是每次递增 50 。
106
106
107
107
``` shell
108
108
# 2.3.x 版本及以前设置方式
@@ -120,26 +120,26 @@ copy_data <-c|--target_cluster_name str> <-a|--target_app_name str>
120
120
restore 执行方式如下:
121
121
122
122
```
123
- restore -c ClusterA -a single -i 4 -t 1742888751127 -b hdfs_xxx -r /user/pegasus/backup
123
+ restore -c ClusterA -a single -i 4 -t 1742888751127 -b hdfs_xyz -r /user/pegasus/backup
124
124
```
125
125
126
126
执行此命令需要注意:
127
127
- restore 命令会自动创建表,因此 restore 命令不支持变更表分片数。
128
128
- restore 命令强制要求原表 TableA 存在,否则无法执行此命令。因此原表不存在时,只能通过 Bulkload 将数据灌入新表。
129
129
- 注意限速避免打满网络带宽,限速方式于冷备份限速方式相同。
130
130
131
- 2 . [ Bulkload 功能] ( /2020/02/18/bulk-load-design.html ) 中介绍的 Bulkload 功能来将数据灌入到新表。
131
+ 2 . [ Bulkload 功能 ] ( /2020/02/18/bulk-load-design.html ) 中介绍的 Bulkload 功能来将数据灌入到新表。
132
132
133
133
Bulkload 功能可以将冷备份数据灌入新表,最佳实践方式如下:
134
134
135
- - 由于 Bulkload 需要特定格式数据,使用 Pegasus-spark 提供的离线 split 操作将冷备数据转换为所需格式。Pegasus-spark 的使用方式此处不进行介绍。
135
+ - 由于 Bulkload 需要特定格式数据,使用 Pegasus-spark 提供的离线 split 操作将冷备数据转换为所需格式。 Pegasus-spark 的使用方式此处不进行介绍。
136
136
- 使用 Pegasus-spark 提供的 Bulkload 操作功能将处理好的数据灌入 Pegasus 中。
137
137
- Pegasus shell 命令行同样支持发起 Bulkload,假设离线 split 处理后的数据在 ` /user/pegasus/split ` 目录中,具体操作方式如下:
138
138
139
139
```
140
140
>>> use TableB
141
141
>>> set_app_envs rocksdb.usage_scenario bulk_load
142
- >>> start_bulk_load -a TableB -c ClusterB -p hdfs_xxx -r /user/pegasus/split
142
+ >>> start_bulk_load -a TableB -c ClusterB -p hdfs_xyz -r /user/pegasus/split
143
143
```
144
144
145
145
@@ -153,7 +153,7 @@ copy_data 命令迁移和冷备份迁移都只能迁移存量数据,若业务
153
153
1 . 业务侧双写原表和目标表,保证增量数据的同步。
154
154
2 . 服务侧通过冷备、离线 Split、 Bulkload IngestBehind 三步来迁移存量数据,保证存量数据同步。
155
155
156
- Rocksdb 支持 IngestBehind 功能,Rocksdb 内部的 sst 文件由 global seqno 号来表示 sst 文件的新旧,并且是递增的。Rocksdb 通过 ingest 功能会为即将导入的外部 sst 文件分配 global seqno 号,IngestBehind 功能则表示为导入的 sst 文件分配的 global seqno 号为 0 。这样存量数据将被导入 Rocksdb 引擎底部,进而保证增量数据和存量数据的读取顺序。
156
+ Rocksdb 支持 IngestBehind 功能, Rocksdb 内部的 sst 文件由 global seqno 号来表示 sst 文件的新旧,并且是递增的。 Rocksdb 通过 ingest 功能会为即将导入的外部 sst 文件分配 global seqno 号, IngestBehind 功能则表示为导入的 sst 文件分配的 global seqno 号为 0 。这样存量数据将被导入 Rocksdb 引擎底部,进而保证增量数据和存量数据的读取顺序。
157
157
158
158
## 具体操作方式
159
159
@@ -171,7 +171,7 @@ Rocksdb 支持 IngestBehind 功能,Rocksdb 内部的 sst 文件由 global seqn
171
171
```
172
172
>>> use TableB
173
173
>>> set_app_envs rocksdb.usage_scenario bulk_load
174
- >>> start_bulk_load -a TableB -c ClusterB -p hdfs_xxx -r /user/pegasus/split --ingest_behind
174
+ >>> start_bulk_load -a TableB -c ClusterB -p hdfs_xyz -r /user/pegasus/split --ingest_behind
175
175
```
176
176
177
177
- 若 Bulkload 占用过多网络带宽资源,仍然可以通过上述介绍的 ` max_send_rate_megabytes ` 进行限速。
@@ -181,7 +181,7 @@ Rocksdb 支持 IngestBehind 功能,Rocksdb 内部的 sst 文件由 global seqn
181
181
182
182
# 热备迁移
183
183
184
- ` v2.4.x ` 及之后版本支持了热备份,[ 跨机房同步] ( /administration/duplication ) 有详细介绍,这里不再阐述。热备份可以实现业务无感迁移,且操作流程简单。
184
+ ` v2.4.x ` 及之后版本支持了热备份,[ 跨机房同步 ] ( /administration/duplication ) 有详细介绍,这里不再阐述。热备份可以实现业务无感迁移,且操作流程简单。
185
185
186
186
## 具体操作方式
187
187
@@ -197,8 +197,8 @@ Rocksdb 支持 IngestBehind 功能,Rocksdb 内部的 sst 文件由 global seqn
197
197
```
198
198
199
199
- 观察下列监控指标符合预期即为迁移成功:
200
- - 观察监控原表 QPS 流量消失;
201
- - 目标表 QPS 上涨并恢复至原表相当的流量;
200
+ - 观察监控原表 QPS 流量消失 ;
201
+ - 目标表 QPS 上涨并恢复至原表相当的流量 ;
202
202
- 原集群、目标集群热备监控中 ` dup.disabled_non_idempotent_write_count ` 为 0;
203
203
- 原集群、目标集群监控中读写失败次数 ` recent.read.fail.count recent.write.fail.count ` 为 0;
204
204
- 需注意:目前 C++ Client 和 Python Client 暂不支持连入 MetaProxy。
0 commit comments