产品架构

计算节点(Mycat)和存储节点(MySQL)组合架构

  1. 一般来说,Mycat2使用数据库(接收sql的服务器)作为存储节点进行读写,当然未来也支持直接以自定义接口读写数据。特别地,暂时Mycat2没有实现系统表,所以查询系统表的sql需要转发到特殊的节点处理后返回到客户端。

image.png
参考技术栈
网络层:NIO Netty Vertx
数据库与其客户端:开源数据库通信协议MySQL,闭源数据库与其客户端JDBC
单机执行器与分布式执行器:火山模型,Push模型
查询优化器:Apache Calcite,
查询编译器: Apache Calcite,Mycat 1.6
执行器:Ling4j,RxJava

image.png

image.png

1.21后,移除zookeeper
image.png
原型库直接作为配置中心,把使用物理库与逻辑库相同表结构实现show语句的支持,另外建立mycat库用于存储mycat的特有配置信息

Mycat本身使用三个命令实现对本地文件配置,运行时配置,原型库文件配置进行加载和存储,可以自行实现脚本
1.执行对多个Mycat对原型库读取数据
2.把本地的配置写进原型库

  1. /*+mycat:syncConfigFromDbToFile{} */ 把原型的配置写入该mycat的本地配置,但不加载到运行时
  2. /*+mycat:syncConfigFromFileToDb{} */把本地配置写入该mycat指向的原型库,但不加载到运行时
  3. /*+mycat:loadConfigFromFile{} */把本地配置加载到运行时
  4. /*+mycat:checkConfigConsistency{} */检查原型库配置与本地配置是否一致

多实例Mycat架构(1.21前)

image.png

通过Haproxy(Nginx)负载均衡
image.png

keeplive高可用
image.png

脚本(bash,k8s,docker等)高可用
image.png

通过Haproxy(Nginx)负载均衡,keeplive高可用
image.png
logback传输日志到kafka
image.png

Prometheus定时采集Mycat Prometheus的信息并存储起来,Grafana通过查询Prometheus得到统计信息并可视化
image.png

JMX监控
image.png

建议的业务热更新架构,用于切换Mycat
image.png
上述指向的Mycat并不一定是Mycat,而是Mycat所在的方向