注意:
数据迁移的目标集群必须为 v3.1.8 或 v3.2.3 及以上版本。
参考文档: https://docs.starrocks.io/zh/docs/3.1/administration/data_migration_tool/
1、开启迁移旧版本兼容
1.1、查看当前集群是否开启旧版本兼容:
ADMIN SHOW FRONTEND CONFIG LIKE 'enable_legacy_compatibility_for_replication';
如果返回值为 true 则表示已经开启旧版本兼容。
1.2、动态开启旧版本兼容:
ADMIN SET FRONTEND CONFIG("enable_legacy_compatibility_for_replication"="true");
1.3、为防止数据迁移过程中集群重启后旧版本兼容自动关闭,您还需要在 FE 配置文件 fe.conf 中添加以下配置项:
enable_legacy_compatibility_for_replication = true
数据迁移完成后,您需要删除配置文件中的 enable_legacy_compatibility_for_replication = true,并通过以下语句动态关闭旧版本兼容:
ADMIN SET FRONTEND CONFIG("enable_legacy_compatibility_for_replication"="false");
2、关闭 Compaction
2.1、手动关闭 Compaction,并在数据迁移完成后重新开启。
您可以通过以下语句查看当前集群是否开启 Compaction:
ADMIN SHOW FRONTEND CONFIG LIKE 'lake_compaction_max_tasks';
如果返回值为 0 则表示 Compaction 关闭。
2.2、动态关闭 Compaction:
ADMIN SET FRONTEND CONFIG("lake_compaction_max_tasks"="0");
2.3、为防止数据迁移过程中集群重启后 Compaction 自动开启,您还需要在 FE 配置文件 fe.conf 中添加以下配置项:
lake_compaction_max_tasks = 0
数据迁移完成后,您需要删除配置文件中的 lake_compaction_max_tasks = 0,并通过以下语句动态开启 Compaction:
ADMIN SET FRONTEND CONFIG("lake_compaction_max_tasks"="-1");
3、配置数据迁移
3.1、FE参数
参数名 默认值 单位 描述
replication_max_parallel_table_count 100 允许并发执行的数据同步任务数。StarRocks 为一张表创建一个同步任务。
replication_max_parallel_data_size_mb 1048576 MB 允许并发同步的数据量。
replication_transaction_timeout_sec 3600 秒 同步任务的超时时间。
ADMIN SHOW FRONTEND CONFIG LIKE 'replication_max_parallel_table_count';
ADMIN SHOW FRONTEND CONFIG LIKE 'replication_max_parallel_data_size_mb';
ADMIN SHOW FRONTEND CONFIG LIKE 'replication_transaction_timeout_sec';
ADMIN SET FRONTEND CONFIG("replication_max_parallel_table_count"="2000");
ADMIN SET FRONTEND CONFIG("replication_max_parallel_data_size_mb"="1048576");
ADMIN SET FRONTEND CONFIG("replication_transaction_timeout_sec"="36000");
3.2、BE参数
BE 静态参数不支持在线修改,需要在 be.conf 中修改并重启 BE 服务
参数名 默认值 单位 描述
replication_threads 0 执行同步任务的线程数。0 表示设置线程数为 BE 所在机器的 CPU 核数的 4 倍。
4、安装工具
4.1、在数据迁移目标集群所在的服务器上安装迁移工具。
docker pull potatoplay/starrocks-cluster-sync
mkdir -p /data/sr/starrocks-cluster-sync/{conf,log}
cd /data/sr/starrocks-cluster-sync
cat > docker-compose.yaml << EOF
services:
srsync:
image: potatoplay/starrocks-cluster-sync
container_name: srsync
restart: always
network_mode: host
command:
/opt/starrocks-cluster-sync/bin/start.sh
volumes:
- /data/sr/starrocks-cluster-sync/conf/sync.properties:/opt/starrocks-cluster-sync/conf/sync.properties
- /data/sr/starrocks-cluster-sync/log:/opt/starrocks-cluster-sync/log
EOF
4.2 修改配置文件 conf/sync.properties
cat > /data/sr/starrocks-cluster-sync/conf/sync.properties <<EOF
# If true, all tables will be synchronized only once, and the program will exit automatically after completion.
one_time_run_mode=false
source_fe_host=10.9.2.189
source_fe_query_port=9030
source_cluster_user=root
source_cluster_password=ARD19b0Becdee13
source_cluster_token=ee4d31e8-d9c3-4b3b-b935-4cfa3b6caa28
target_fe_host=10.9.65.189
target_fe_query_port=9030
target_cluster_user=root
target_cluster_password=root.COM2020
# Comma-separated list of database names or table names like <db_name> or <db_name.table_name>
# example: db1,db2.tbl2,db3
# Effective order: 1. include 2. exclude
include_data_list=bnd_data_service,data_mart,dsj_adw,dsj_dim,dsj_dm,dsj_dw,dsj_dwd,dsj_dwm,dsj_dws,dsj_ods,etl_db,gxt_ads,gxt_cdm,gxt_ods,monitor,multi_dim,mysql_external,test,tpch,xqc_seagull
exclude_data_list=
# If there are no special requirements, please maintain the default values for the following configurations.
target_cluster_storage_volume=default_volume
target_cluster_replication_num=-1
meta_job_interval_seconds=180
meta_job_threads=4
ddl_job_interval_seconds=10
ddl_job_batch_size=10
ddl_job_allow_drop_target_only=false
ddl_job_allow_drop_schema_change_table=true
ddl_job_allow_drop_inconsistent_partition=true
replication_job_interval_seconds=10
replication_job_batch_size=10
EOF
4.3、启动
docker-compose up -d
5.2、通过 FE 的 HTTP 端口获取集群 Token
# curl -v http://<fe_host>:<fe_http_port>/check
# fe_host:集群 FE 的 IP 地址或 FQDN。
# fe_http_port:集群 FE 的 HTTP 端口。
curl -v http://10.9.2.189:8030/check
或者通过 FE 节点的元数据获取集群 Token
cat fe/meta/image/VERSION | grep token
6、网络相关的配置
在数据迁移期间,迁移工具需要访问源和目标集群的所有 FE 节点,并且目标集群需要访问源集群的所有 BE 和 CN 节点。
6.1、通过在相应集群上执行以下语句来获取这些节点的网络地址:
-- 获取集群中 FE 节点的网络地址。
SHOW FRONTENDS;
-- 获取集群中 BE 节点的网络地址。
SHOW BACKENDS;
-- 获取集群中 CN 节点的网络地址。
SHOW COMPUTE NODES;
6.2、修改配置文件 conf/hosts.properties
cd starrocks-cluster-sync
vi conf/hosts.properties
默认文件内容如下,说明了网络地址映射的配置方式:
# <SOURCE/TARGET>_<domain>=<IP>
以下示例执行如下操作:
将源集群的私有网络地址 192.1.1.1 和 192.1.1.2 映射到 10.1.1.1 和 10.1.1.2。
将目标集群的私有网络地址 fe-0.starrocks.svc.cluster.local 映射到 10.1.2.1。
# <SOURCE/TARGET>_<domain>=<IP>
SOURCE_192.1.1.1=10.1.1.1
SOURCE_192.1.1.2=10.1.1.2
TARGET_fe-0.starrocks.svc.cluster.local=10.1.2.1
7、启动迁移工具
下载 JDK
jdk-11.0.20_linux-x64_bin.tar.gz
查看环境变量 JAVA_HOME:
echo $JAVA_HOME
在 /etc/profile 文件中设置 JAVA_HOME:
vi /etc/profile
export JAVA_HOME=/usr/local/jdk-11.0.20
export PATH=$PATH:$JAVA_HOME/bin
使变更生效:
source /etc/profile
验证变更是否成功:
java -version
配置完成后,启动迁移工具开始数据迁移。
./bin/start.sh
8、查看迁移进度
mysql -h10.9.2.189 -P9030 -uroot -pARD19b0Becdee13
mysql -h10.9.65.189 -P9030 -uroot -p"root.COM2020"
8.1、查看迁移工具日志
log/sync.INFO.log
主要指标如下:
Sync progress:数据迁移进度。由于迁移工具会周期性地检查目标集群的数据是否落后于源集群,所以当进度为 100% 时,仅代表当前检查周期内数据同步完成。如果源集群持续有新数据导入,该进度可能在下次检查周期内变小。
total:本次迁移操作的各类 Job 总数。
ddlPending:所有待执行的 DDL Job 数量。
jobPending:所有待执行的数据同步 Job 数量。
sent:已从源集群发送但未开始运行的数据同步 Job 数量。理论上该值不会太大,若出现该值持续增加的情况,请联系研发人员。
running:正在执行的数据同步 Job 数量。
finished:执行成功的数据同步 Job 数量。
failed:执行失败的数据同步 Job 数量。失败的数据同步 Job 将会重新发送。因此,通常情况下您可以忽略该指标。若出现该值较大的情况,请联系研发人员。
unknown:未知状态 Job 的数量。理论上该值恒常为 0。若出现该值不为 0 的情况,请联系研发人员。
8.2、查看迁移事务状态
迁移工具会为每张表开启一个事务。您可以通过查看该事务的状态了解该表迁移的状态。
SHOW PROC "/transactions/<db_name>/running";
其中 <db_name> 为该表所在数据库的名称。
8.3、查看分区数据版本
您可以对比源集群和目标集群中对应分区的数据版本了解该分区的迁移状态。
SHOW PARTITIONS FROM <table_name>;
其中 <table_name> 为该分区所属表的名称。
8.4、查看数据量
您可以对比源集群和目标集群的数据量了解迁移的状态。
SHOW DATA;
8.5、查看表行数
您可以对比源集群和目标集群中表的行数了解各表迁移的状态。
SELECT
TABLE_NAME,
TABLE_ROWS
FROM INFORMATION_SCHEMA.TABLES
WHERE TABLE_TYPE = 'BASE TABLE'
ORDER BY TABLE_NAME;