方案概览

在面对大规模业务数据的在线统计分析需求时,传统的数据库往往难以满足高性能和实时分析的要求,随着ClickHouse社区的不断发展壮大,越来越多的开发者寄希望于通过将MySQL的数据同步到ClickHouse进行加速分析,虽然ClickHouse官方推出了MaterializedMySQL的方式,然而如何将MySQL的数据简单方便、快速灵活地同步到ClickHouse却是一个比较繁琐的问题,需要依赖大量的黑屏操作来配置同步。

本解决方案通过产品化融合MySQL和ClickHouse,实现用户可视化和白屏化操作数据一键同步,灵活地配置MySQL与ClickHouse数据表的实时同步,构建更易用、更好用的一站式HTAP(混合事务/分析处理)解决方案。利用ClickHouse的在线实时分析能力,解决大规模业务数据的在线统计分析,如业务报表统计、交互式运营分析、对账以及实时数仓等业务场景,实现事务在线处理和在线分析的一体化。

方案架构

方案提供的默认设置(如地域、VPC、安全组、vSwitch、实例名称等)完成部署后在阿里云上搭建的RDS MySQL实时数据同步到云数据库 ClickHouse 进行加速分析的架构图如下图所示。实际部署时您可以根据资源规划修改部分设置,但最终形成的运行环境与下图相似。

本方案的技术架构包括以下基础设施和云服务:

  • 地域和可用区:RDS MySQL 实例和云数据库 ClickHouse 实例必须在同一个地域中,可以选择部署在不同的可用区。

  • 1个专有网络 VPC:RDS MySQL 实例和云数据库 ClickHouse 实例必须在同一个 VPC 网络环境中。

  • 1个 RDS MySQL 实例:RDS MySQL 实例,用于日常在线业务(OLTP)系统的数据库存取操作等。

  • 1个云数据库 ClickHouse 实例:云数据库 ClickHouse 实例,用于将 RDS MySQL 实例的数据同步到云数据库 ClickHouse 中,实现针对 MySQL 数据的加速访问,用于实时报表、运营分析等 OLAP 业务。

部署准备

开始部署前,请按以下指引完成账号申请、服务开通、网络规划、资源规划等准备工作。

准备账号

  1. 如果您还没有阿里云账号,请访问阿里云账号注册页面,根据页面提示完成注册。阿里云账号是您使用云资源的付费实体,因此是部署方案的必要前提。

  2. 为阿里云账号充值

  1. 为节省成本,本方案默认选择使用按量付费资源,使用按量付费资源需要确保账户余额不小于100元。

  2. 完成本方案的部署及体验,预计产生费用不超过20元(假设您选择下表中的相关规格资源,且运行时间不超过2小时,如果调整了资源规格,请以控制台显示的实际报价以及最终账单为准)。

  1. 阿里云账号拥有操作资源的最高权限,从云资源安全角度考虑,建议您创建RAM用户。RAM用户需要获得相关云服务的访问权限才能完成方案部署,详情如下:创建RAM用户的操作指引请参见创建RAM用户

    为RAM用户授权的操作指引请参见为RAM用户授权

一键部署

资源编排(ROS)可以让您通过YAML或JSON文件清晰简洁地描述所需的云资源及其依赖关系,然后自动化地创建和配置这些资源。您可以通过下方提供的ROS一键部署链接,来自动化地完成这些资源的创建和配置。

本文介绍的ROS模板主要完成了以下内容:

  • 部署1个专有网络VPC。

  • 部署1台交换机。

  • 部署1台云服务器 ECS。

  • 部署1个云数据库 ClickHouse 版。

  • 部署1个云数据库 RDS MySQL 版。

  • 在ECS中已下载并且编译tpcc-mysql压测程序。

  • 已配置RDS MySQL与ClickHouse间的数据同步。

  1. 打开一键配置模板链接前往ROS控制台,系统自动打开使用新资源创建资源栈的面板。

  1. 确认好地域后,在创建资源栈面板中配置资源栈名称数据库配置客户端ECS配置

  1. 单击创建,系统将自动创建并部署本教程所需的资源。

  2. 资源栈信息页面的状态显示为创建成功时表示一键配置完成。

  3. 单击资源页签,找到已创建的RDS实例和ClickHouse实例,单击实例ID,获取RDS和ClickHouse的连接地址,分别登录到云数据库 RDS MySQL 实例和云数据库 ClickHouse 实例进行查询性能的体验。

体验查询

在配置完成云数据库 RDS MySQL 实例以及云数据库 ClickHouse 实例之间的数据同步任务之后,可以分别登录到云数据库 RDS MySQL 实例和云数据库 ClickHouse 实例进行查询性能的体验,观察查询分析加速的情况。

登录云ClickHouse实例

  1. 登录云数据库 ClickHouse 管理控制台

  2. 在顶部菜单栏,选择华东2(上海)地域。

  3. 在左侧导航栏,单击集群列表

  4. 集群信息页面中,找到上述步骤中创建出来的云数据库 ClickHouse 实例,单击右上角按钮登录数据库可以进入DMS界面。

  5. 进入DMS窗口后,填写需要登录的云数据库 ClickHouse 实例的相关信息(实例ID、账号密码等)。

  6. 除了DMS,也可以通过 clickhouse-client 命令行的方式登录云数据库 ClickHouse 数据库进行查询分析。

查询表数据

  1. 由于 MySQL 和 ClickHouse 之间的同步原理是基于 MaterializedMySQL 数据库引擎的机制实现同步的,在ClickHouse中的表采用的是 ReplicatedReplacingMergeTree 引擎。故表结构会新增两个额外的字段:_sign 和 _version。其中:

  • _sign 字段:对于源端 insert 操作,此字段的值为1;对于源端 delete 操作,此字段的值为-1。

  • _version 字段:此字段的值用来表示操作的顺序,每次 insert、update 和 delete 操作,此字段的值都会增加;

  1. 基于上面的 MySQL 和 ClickHouse 之间的数据同步原理,由于可能存在 MySQL 和 ClickHouse 之间数据同步延迟的情况,故在 ClickHouse 端进行数据查询和分析时,需要特别注意数据一致性的问题,要想查询最新的数据,有如下两种方法:

a. 使用 ClickHouse 的 FINAL 关键字:在 ClickHouse 中 FINAL 关键字可以用于获取已经合并的数据(但是使用 FINAL 关键字会增加消耗查询的计算资源),比如可以使用如下的语句进行查询:

b. 通过 order by + group by 配合_version&_sign 的方式来获取最新数据:比如可以使用如下的语句进行查询:

完成及时清理

方案验证

您可以通过云ClickHosue管理控制台中的MySQL实时同步页面,观察RDS MySQL实例和ClickHouse实例中的同步状态来确定两者同步是否正常,同时可以通过对比RDS MySQL实例和ClickHouse实例中库表对象的数据,来验证同步的正确性和一致性(注意考虑延迟带来的不一致情况)。

  1. 登录云数据库 ClickHouse 管理控制台

  2. 在顶部菜单栏,选择您创建实例的地域。

  3. 在左侧导航栏,单击MySQL实时同步

  4. 检查当前正在进行的同步任务,可以查看同步状态、同步库表对象,同时也可以修改同步任务等,如下图所

清理资源

在本方案中,您创建了1个专有网络VPC、1台交换机、1个云数据库 RDS MySQL 实例、1个云数据库 ClickHouse 实例。测试完方案后,您可以在ROS控制台找到目标资源栈,然后直接删除资源栈即可(删除时,删除方式选择为释放资源)。