Skip to content

Commit 55f5a08

Browse files
committed
Update table migration doc
1 parent 92a132a commit 55f5a08

File tree

1 file changed

+20
-20
lines changed

1 file changed

+20
-20
lines changed

_docs/zh/administration/table-migration.md

Lines changed: 20 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -6,18 +6,18 @@ Table 迁移是指将某个 Pegasus 集群的一张表所有数据迁移到另
66

77
目前提供了四种 Table 迁移方法:
88

9-
1. Shell 工具命令迁移;
10-
2. 冷备份恢复;
9+
1. Shell 工具命令迁移 ;
10+
2. 冷备份恢复 ;
1111
3. 业务双写配合 Bulkload;
12-
4. 热备迁移;
12+
4. 热备迁移 ;
1313

1414
下面开始讲述这些迁移方法的原理、具体操作方式:
1515

1616
# Shell 工具命令迁移
1717

1818
## 原理
1919

20-
Shell 工具的 [copy_data 命令](/overview/shell#copy_data) 原理是通过客户端将原表数据逐条读出并逐条写入新表。具体就是通过 scan 接口从原集群的表中逐条读入数据,然后通过 set 接口将数据逐条写入到目标集群的表中。如果 set 的数据在目标集群的表中已经存在,会直接覆盖。
20+
Shell 工具的 [copy_data 命令 ](/overview/shell#copy_data) 原理是通过客户端将原表数据逐条读出并逐条写入新表。具体就是通过 scan 接口从原集群的表中逐条读入数据,然后通过 set 接口将数据逐条写入到目标集群的表中。如果 set 的数据在目标集群的表中已经存在,会直接覆盖。
2121

2222
## 具体操作方式
2323

@@ -39,7 +39,7 @@ copy_data <-c|--target_cluster_name str> <-a|--target_app_name str>
3939
假设原集群为 ClusterA,目标集群为 ClusterB,需要迁移的表为 TableA。迁移步骤如下:
4040

4141
1. **在目标集群上建表.**
42-
由于 copy_data 命令并不会自动在目标集群上创建表,所以需要自己先建表。相对原表,新表的表名可以不同,partition count 也可以不同。假设在目标集群上新建的表名为 TableB。
42+
由于 copy_data 命令并不会自动在目标集群上创建表,所以需要自己先建表。相对原表,新表的表名可以不同, partition count 也可以不同。假设在目标集群上新建的表名为 TableB。
4343

4444
2. **在 Shell 工具的配置文件中添加目标集群的配置.**
4545
因为 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>
5555
```
5656

5757
4. **监控迁移进度.**
58-
如果以上步骤都没有问题,copy 操作应当就开始执行了,每隔 1 秒会打印进度。通常来说,copy 速度应当在 10 万 / 秒以上。copy 过程中如果出现问题终止了(比如遭遇写限流,write stall 等),需排查问题后再重新执行命令。
58+
如果以上步骤都没有问题, copy 操作应当就开始执行了,每隔 1 秒会打印进度。通常来说, copy 速度应当在 10 万 / 秒以上。 copy 过程中如果出现问题终止了(比如遭遇写限流, write stall 等),需排查问题后再重新执行命令。
5959

6060

6161

@@ -66,9 +66,9 @@ copy_data <-c|--target_cluster_name str> <-a|--target_app_name str>
6666
所谓冷备份迁移,就是利用 Pegasus 的 [ 冷备份功能 ](/administration/cold-backup),先将数据备份到 HDFS 或者其他介质上,然后通过 restore 或 bulkload 恢复到新的表中。
6767

6868
**冷备份迁移的好处**
69-
- **速度更快:**因为冷备份是拷贝文件,相对 copy_data 的逐条拷贝,速度要快很多。
70-
- **错误容忍度高:**冷备份功能有很多容错逻辑,避免因为网络抖动等问题带来的影响。如果用 copy_data,中途出错就需要从头再来。
71-
- **多次迁移更友好:**如果要从一个表拷贝到多个地方,只需要备份一次,然后执行多次恢复。
69+
- **速度更快:** 因为冷备份是拷贝文件,相对 copy_data 的逐条拷贝,速度要快很多。
70+
- **错误容忍度高:** 冷备份功能有很多容错逻辑,避免因为网络抖动等问题带来的影响。如果用 copy_data,中途出错就需要从头再来。
71+
- **多次迁移更友好:** 如果要从一个表拷贝到多个地方,只需要备份一次,然后执行多次恢复。
7272

7373
## 具体操作方式
7474

@@ -88,7 +88,7 @@ copy_data <-c|--target_cluster_name str> <-a|--target_app_name str>
8888
remote_command -t replica-server nfs.max_send_rate_megabytes_per_disk 50
8989
```
9090

91-
- 通过 admin-cli 发起冷备并等待,参数依次为表 id,HDFS 所在 Region,HDFS 存储路径。
91+
- 通过 admin-cli 发起冷备并等待,参数依次为表 id, HDFS 所在 Region, HDFS 存储路径。
9292

9393
```
9494
backup 3 hdfs_xyz /user/pegasus/backup
@@ -102,7 +102,7 @@ copy_data <-c|--target_cluster_name str> <-a|--target_app_name str>
102102
args = hdfs://xyzprc-hadoop /
103103
```
104104

105-
- 观察监控磁盘 IO 逐渐降低,代表冷备份进入第二阶段。此时可以不断观察监控中网络带宽占用情况,适当放开限速来加速冷备,经验值是每次递增 50。
105+
- 观察监控磁盘 IO 逐渐降低,代表冷备份进入第二阶段。此时可以不断观察监控中网络带宽占用情况,适当放开限速来加速冷备,经验值是每次递增 50
106106

107107
```shell
108108
#2.3.x 版本及以前设置方式
@@ -120,26 +120,26 @@ copy_data <-c|--target_cluster_name str> <-a|--target_app_name str>
120120
restore 执行方式如下:
121121

122122
```
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
124124
```
125125

126126
执行此命令需要注意:
127127
- restore 命令会自动创建表,因此 restore 命令不支持变更表分片数。
128128
- restore 命令强制要求原表 TableA 存在,否则无法执行此命令。因此原表不存在时,只能通过 Bulkload 将数据灌入新表。
129129
- 注意限速避免打满网络带宽,限速方式于冷备份限速方式相同。
130130

131-
2. [Bulkload 功能](/2020/02/18/bulk-load-design.html) 中介绍的 Bulkload 功能来将数据灌入到新表。
131+
2. [Bulkload 功能 ](/2020/02/18/bulk-load-design.html) 中介绍的 Bulkload 功能来将数据灌入到新表。
132132

133133
Bulkload 功能可以将冷备份数据灌入新表,最佳实践方式如下:
134134

135-
- 由于 Bulkload 需要特定格式数据,使用 Pegasus-spark 提供的离线 split 操作将冷备数据转换为所需格式。Pegasus-spark 的使用方式此处不进行介绍。
135+
- 由于 Bulkload 需要特定格式数据,使用 Pegasus-spark 提供的离线 split 操作将冷备数据转换为所需格式。 Pegasus-spark 的使用方式此处不进行介绍。
136136
- 使用 Pegasus-spark 提供的 Bulkload 操作功能将处理好的数据灌入 Pegasus 中。
137137
- Pegasus shell 命令行同样支持发起 Bulkload,假设离线 split 处理后的数据在 `/user/pegasus/split` 目录中,具体操作方式如下:
138138

139139
```
140140
>>> use TableB
141141
>>> 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
143143
```
144144

145145

@@ -153,7 +153,7 @@ copy_data 命令迁移和冷备份迁移都只能迁移存量数据,若业务
153153
1. 业务侧双写原表和目标表,保证增量数据的同步。
154154
2. 服务侧通过冷备、离线 Split、 Bulkload IngestBehind 三步来迁移存量数据,保证存量数据同步。
155155

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 引擎底部,进而保证增量数据和存量数据的读取顺序。
157157

158158
## 具体操作方式
159159

@@ -171,7 +171,7 @@ Rocksdb 支持 IngestBehind 功能,Rocksdb 内部的 sst 文件由 global seqn
171171
```
172172
>>> use TableB
173173
>>> 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
175175
```
176176

177177
- 若 Bulkload 占用过多网络带宽资源,仍然可以通过上述介绍的 `max_send_rate_megabytes` 进行限速。
@@ -181,7 +181,7 @@ Rocksdb 支持 IngestBehind 功能,Rocksdb 内部的 sst 文件由 global seqn
181181

182182
# 热备迁移
183183

184-
`v2.4.x` 及之后版本支持了热备份,[跨机房同步](/administration/duplication) 有详细介绍,这里不再阐述。热备份可以实现业务无感迁移,且操作流程简单。
184+
`v2.4.x` 及之后版本支持了热备份,[ 跨机房同步 ](/administration/duplication) 有详细介绍,这里不再阐述。热备份可以实现业务无感迁移,且操作流程简单。
185185

186186
## 具体操作方式
187187

@@ -197,8 +197,8 @@ Rocksdb 支持 IngestBehind 功能,Rocksdb 内部的 sst 文件由 global seqn
197197
```
198198

199199
- 观察下列监控指标符合预期即为迁移成功:
200-
- 观察监控原表 QPS 流量消失;
201-
- 目标表 QPS 上涨并恢复至原表相当的流量;
200+
- 观察监控原表 QPS 流量消失 ;
201+
- 目标表 QPS 上涨并恢复至原表相当的流量 ;
202202
- 原集群、目标集群热备监控中 `dup.disabled_non_idempotent_write_count` 为 0;
203203
- 原集群、目标集群监控中读写失败次数 `recent.read.fail.count recent.write.fail.count` 为 0;
204204
- 需注意:目前 C++ Client 和 Python Client 暂不支持连入 MetaProxy。

0 commit comments

Comments
 (0)