方案概览
在面对大规模业务数据的在线统计分析需求时,传统的数据库往往难以满足高性能和实时分析的要求,随着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 业务。
部署准备
开始部署前,请按以下指引完成账号申请、服务开通、网络规划、资源规划等准备工作。
准备账号
为节省成本,本方案默认选择使用按量付费资源,使用按量付费资源需要确保账户余额不小于100元。
完成本方案的部署及体验,预计产生费用不超过20元(假设您选择下表中的相关规格资源,且运行时间不超过2小时,如果调整了资源规格,请以控制台显示的实际报价以及最终账单为准)。
阿里云账号拥有操作资源的最高权限,从云资源安全角度考虑,建议您创建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间的数据同步。
打开一键配置模板链接前往ROS控制台,系统自动打开使用新资源创建资源栈的面板。
确认好地域后,在创建资源栈面板中配置资源栈名称、数据库配置和客户端ECS配置。
单击创建,系统将自动创建并部署本教程所需的资源。
当资源栈信息页面的状态显示为创建成功时表示一键配置完成。
单击资源页签,找到已创建的RDS实例和ClickHouse实例,单击实例ID,获取RDS和ClickHouse的连接地址,分别登录到云数据库 RDS MySQL 实例和云数据库 ClickHouse 实例进行查询性能的体验。
体验查询
在配置完成云数据库 RDS MySQL 实例以及云数据库 ClickHouse 实例之间的数据同步任务之后,可以分别登录到云数据库 RDS MySQL 实例和云数据库 ClickHouse 实例进行查询性能的体验,观察查询分析加速的情况。
登录云ClickHouse实例
在顶部菜单栏,选择华东2(上海)地域。
在左侧导航栏,单击集群列表。
在集群信息页面中,找到上述步骤中创建出来的云数据库 ClickHouse 实例,单击右上角按钮登录数据库可以进入DMS界面。
进入DMS窗口后,填写需要登录的云数据库 ClickHouse 实例的相关信息(实例ID、账号密码等)。
除了DMS,也可以通过 clickhouse-client 命令行的方式登录云数据库 ClickHouse 数据库进行查询分析。
查询表数据
由于 MySQL 和 ClickHouse 之间的同步原理是基于 MaterializedMySQL 数据库引擎的机制实现同步的,在ClickHouse中的表采用的是 ReplicatedReplacingMergeTree 引擎。故表结构会新增两个额外的字段:_sign 和 _version。其中:
_sign 字段:对于源端 insert 操作,此字段的值为1;对于源端 delete 操作,此字段的值为-1。
_version 字段:此字段的值用来表示操作的顺序,每次 insert、update 和 delete 操作,此字段的值都会增加;
基于上面的 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实例中库表对象的数据,来验证同步的正确性和一致性(注意考虑延迟带来的不一致情况)。
在顶部菜单栏,选择您创建实例的地域。
在左侧导航栏,单击MySQL实时同步。
检查当前正在进行的同步任务,可以查看同步状态、同步库表对象,同时也可以修改同步任务等,如下图所
清理资源
在本方案中,您创建了1个专有网络VPC、1台交换机、1个云数据库 RDS MySQL 实例、1个云数据库 ClickHouse 实例。测试完方案后,您可以在ROS控制台找到目标资源栈,然后直接删除资源栈即可(删除时,删除方式选择为释放资源)。