背景
对于将数据作为重要生产资料的公司来说,超大规模的数据迁移同步系统( 1k、5k、10k 条同步任务)是刚需。
本文以此为出发点,介绍近期 CloudCanal 所做的一个容量测试:在单个 CloudCanal 集群上创建 1300 实时任务,验证系统是否健康。
这个健康度主要包括 同步任务是否运行正常、页面功能操作是否顺畅、容灾能力是否可靠 三个方面。
当然这个测试也带给我们一些新的思路和改进点,让产品更加健壮。
资源与环境
本次测试资源以云资源为主,详单如下:
资源用途 | 资源规格 |
---|---|
console | 2 个 2core8GB 虚拟机 (阿里云 ecs.u1-c1m4.large) |
元数据库 | 1 个 8core16GB MySQL 8.0 (阿里云 RDS mysql.n2m.xlarge.2c) |
sidecar | 8 个 12core96GB 虚拟机 (阿里云 ecs.u1-c1m8.3xlarge) |
业务库 | 2 个 4core8GB MySQL 8.0 (阿里云 RDS mysql.n2m.large.2c) |
负载均衡 | 1 个 4 层负载均衡 (sidecar->console 7007 端口,阿里云 NLB) 1 个 7 层负载均衡 (CloudCanal 页面操作,console 8111 端口,阿里云 ALB) |
测试步骤
安装 console
- 根据 tgz 安装文档 安装软件
- 激活 CloudCanal,因社区版任务数限制,我们临时申请了一个 2000 个同步任务的 license
安装节点
- 机器管理 > 机器列表 > 添加机器,选择自动安装
- 等待节点安装完成
业务数据库准备
- 两个 RDS 分别创建源端 src_test_a 和 src_test_b 库,以及 target_db_0~target_db_999 1000个目标库。
- 一个任务源端和目标分别是 src_test_a/src_test_b -> target_db_(i)
- 源端各创建 1 张表,并各生成 1000 条数据
基于 OpenAPI 创建任务
-
设置任务参数模版 LE_256MB_TASK ,以便生成任务时自动调整
-
获取 AccessKey 和 SecretKey 以便调用 API 创建任务
-
向元数据库插入 128MB 规格数据
-
编写调用 OpenAPI 代码,1 次 100 个任务创建, 代码参考
健康状况
-
任务正常运行,任务查看/新建/启停/删除、任务调度、监控告警、页面功能查看均表现正常顺滑
-
控制台负载偏高,因为只用了 2 core 节点,需提升为 4 core
-
节点负载正常
-
元数据库负载正常,qps 偏高,需要优化任务数据(状态、位点等)上传频率和方式
可改进点
- 任务数据(状态/位点等)上报频率、种类需要优化,对元数据库压力较高
- 监控指标依赖的 promethus 需要进行调优
资源花费
-
早上开资源前
-
晚上释放资源前
云资源花费 200 元左右。
总结
本次容量测试是 CloudCanal 针对单集群 1000 个以上任务的场景验证,从中找到一些可能存在的问题并逐步改进,为大型客户大规模使用做好基本的验证与后续优化。