头图

背景

对于将数据作为重要生产资料的公司来说,超大规模的数据迁移同步系统( 1k、5k、10k 条同步任务)是刚需。

本文以此为出发点,介绍近期 CloudCanal 所做的一个容量测试:在单个 CloudCanal 集群上创建 1300 实时任务,验证系统是否健康。

这个健康度主要包括 同步任务是否运行正常页面功能操作是否顺畅容灾能力是否可靠 三个方面。

当然这个测试也带给我们一些新的思路和改进点,让产品更加健壮。

资源与环境

本次测试资源以云资源为主,详单如下:

资源用途资源规格
console2 个 2core8GB 虚拟机 (阿里云 ecs.u1-c1m4.large)
元数据库1 个 8core16GB MySQL 8.0 (阿里云 RDS mysql.n2m.xlarge.2c)
sidecar8 个 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

安装节点

  • 机器管理 > 机器列表 > 添加机器,选择自动安装
    auto_install
  • 等待节点安装完成
    auto_install_result

业务数据库准备

  • 两个 RDS 分别创建源端 src_test_a 和 src_test_b 库,以及 target_db_0~target_db_999 1000个目标库
  • 一个任务源端和目标分别是 src_test_a/src_test_b -> target_db_(i)
    target_1
    target_2
  • 源端各创建 1 张表,并各生成 1000 条数据
    source_1
    source_2

基于 OpenAPI 创建任务

  • 设置任务参数模版 LE_256MB_TASK ,以便生成任务时自动调整
    task_config_template
  • 获取 AccessKey 和 SecretKey 以便调用 API 创建任务
    ak_sk_fetch
  • 向元数据库插入 128MB 规格数据
    prepare_spec_data
  • 编写调用 OpenAPI 代码,1 次 100 个任务创建, 代码参考
    data_job_create_base_api

健康状况

  • 任务正常运行,任务查看/新建/启停/删除、任务调度、监控告警、页面功能查看均表现正常顺滑
    datajob_status
  • 控制台负载偏高,因为只用了 2 core 节点,需提升为 4 core
    console_status
  • 节点负载正常
    worker_status
  • 元数据库负载正常,qps 偏高,需要优化任务数据(状态、位点等)上传频率和方式
    db_status

可改进点

  • 任务数据(状态/位点等)上报频率、种类需要优化,对元数据库压力较高
  • 监控指标依赖的 promethus 需要进行调优

资源花费

  • 早上开资源前
    account_before
  • 晚上释放资源前
    account_after

云资源花费 200 元左右。

总结

本次容量测试是 CloudCanal 针对单集群 1000 个以上任务的场景验证,从中找到一些可能存在的问题并逐步改进,为大型客户大规模使用做好基本的验证与后续优化。


clougence
18 声望7 粉丝