引言
全文约定:$为命令提示符、greatsql>为 GreatSQL 数据库提示符。在后续阅读中,依据此约定进行理解与操作。
Rapid 引擎
从 GreatSQL 8.0.32-25 版本开始,新增Rapid存储引擎,该引擎使得 GreatSQL 能满足联机分析(OLAP)查询请求。
GreatSQL Rapid引擎性能表现优异,在32C64G测试机环境下,TPC-H 100G测试中22条SQL总耗时仅需不到80秒。
图片
Rapid 引擎更多介绍可前往查看:
- GreatSQL Rapid引擎正式上线!
- GreatSQL 官网:https://greatsql.cn/docs/8.0.32-25/5-enhance/5-1-highperf-rapid-engine.html
有了 Rapid 引擎的加持,便可使用 GreatSQL 构建一个高效的 HTAP 服务架构,以此来提升 GreatSQL 的查询效率。
服务架构图
图片
本服务架构采用的是 GreatSQL 主从复制,主节点采用默认 InnoDB 引擎,从节点使用辅助引擎 Rapid 加速查询构建专属 HTAP 只读节点。加上 MySQL Router 等之类的代理/中间件负责读写分离来完成 HTAP 服务架构。
采用此 HTAP 架构可获得以下收益
- 高查询效率:Rapid 引擎的引入使得从节点能够加速查询处理,特别适用于 OLAP(联机分析处理)场景。
- 高负载均衡:利用代理/中间件实现读写分离,确保主节点(写操作)和从节点(读操作)负载均衡。
- 高并发性能:主节点上采用 InnoDB 响应高并发事务请求,确保业务需求写入性能。
- 高灵活和扩展:GreatSQL 的可插拔存储引擎架构使得系统可以根据需要选择适合的存储引擎。Rapid 引擎作为辅助引擎,可以动态安装或卸载,为用户提供了极大的灵活性和可扩展性。
部署主从复制
环境准备及版本介绍
服务器配置
主从库与中间件配置
IP | 角色 | 版本 | 备注 |
192.168.6.215:3306 | GreatSQL 主库 | GreatSQL 8.0.32-25 | |
192.168.6.214:3306 | GreatSQL 从库 | GreatSQL 8.0.32-25 | 专属 HTAP 只读节点 |
192.168.6.215:3306 | MySQL Router | 8.4.0 TLS | 代理/中间件。可根据需求灵活替换 |
安装 GreatSQL
GreatSQL 安装版本为 8.0.32-25 版本,并分别安装两个实例 GreatSQL
安装步骤详见:https://greatsql.cn/docs/8.0.32-25/4-install-guide/0-install-guide.html
部署主从复制
主节点建立账户并授权
然后查看主节点状态,记录二进制文件名 binlog.000002 和位置 2027
从节点服务器配置,并开启从服务器复制
检查主从复制情况
生成测试数据
主库写入数据
往主库生成数据;
往该表插入十万行数据;
从库此时也会复制主库的十万行数据;
如果在主库或从库进行一个复杂 SQL 查询,需要用时 4~5 秒左右;
在从库运行三次结果平均值为 4.91 秒;
构建专属 HTAP 只读节点
以下所有操作都在 GreatSQL 从库中进行;
使用 Rapid 引擎
进入 GreatSQL 从库,加载 Rapid 引擎;
为 orders 表加上 Rapid 辅助引擎;
将表中数据一次性全量导入到 Rapid 引擎中;
检查导入情况,注意关键词 SECONDARY_ENGINE="rapid" SECONDARY_LOAD="1";
打开 Rapid 引擎的总控制开关,并把启用阈值调小;
secondary_engine_cost_threshold 的值可根据实际情况设置;
查看该 SQL 的执行计划,注意关键词 Using secondary engine RAPID 表示使用了 Rapid 引擎;
执行三次结果平均值为 0.12 秒,比之前提升近 41 倍!
启动增量导入任务
因为在生产环境中数据是无时不刻在产生,所以需要启用增量导入,才可保证最新数据始终在 Rapid 引擎内;
启动增量导入任务;
查看增量导入任务状态;
在给主库插入 1 万条数据,确认主从复制和 Rapid 引擎的增量导入没有问题,产生的新数据也可以使用 Rapid 引擎加速查询。
请注意,Rapid 引擎在增量导入数据时可能存在短暂延迟。大量 Insert、Delete 数据,可能无法立即通过 Rapid 引擎查询到这些最新变动的数据。等增量任务导入完成后 Rapid 引擎才能查询到最新变动的数据。
此处启用了 Rapid 引擎所以COUNT(*)速度会很快,若没启用 Rapid 引擎则可能耗时较长;
查看执行计划,从 rows 列可以看到,扫描的行数增加了,表示新数据已经增量导入到 Rapid 引擎中;
至此,主从复制和构建 HTAP 专属只读节点完成,接下来是实现读写分离,当然一主一从的情况下是不太需要读写分离中间件的,要中间件的情况是怕 HTAP 专属服务器宕机,这时候主节点就要负责读写了。
实现读写分离
这里使用的是 MySQL Router 中间件实现的读写分离,如果有其它读写分离中间件,例如 MySQL Proxy 等也可以替换。
安装 MySQL Router
下载过程省略,可自行到 MySQL 网站上下载;
这里选择的是最新的长期支持版 MySQL Router 8.4.0 版本;
解压安装包,并进入 MySQL Router 的 bin 目录
把 MySQL Router 配置模板拷贝出来放到 /etc/mysqlrouter 目录下,并改名为 mysqlrouter.conf
修改 MySQL Router 配置文件;
这里从节点负载均衡配置采用first-available,优先使用 HTAP 服务器。若专属 HTAP 服务器宕机,可自动切换使用主节点查询;
启动 MySQL Router;
查看监听端口是否启用;
这里演示的是主从复制模式,所以有读写两个端口。在新版本的 MySQL Router 中,在原先的6446、6447端口上,新增一个6450端口,支持读写分离;
测试只读端口是否只连接专属 HTAP 节点;
自此构建高效 HTAP 服务器架构(主从复制)完成!