产品架构
计算节点(Mycat)和存储节点(MySQL)组合架构
一般来说,Mycat2使用数据库(接收sql的服务器)作为存储节点进行读写,当然未来也支持直接以自定义接口读写数据。特别地,暂时Mycat2没有实现系统表,所以查询系统表的sql需要转发到特殊的节点处理后返回到客户端。
参考技术栈
网络层:NIO Netty Vertx
数据库与其客户端:开源数据库通信协议MySQL,闭源数据库与其客户端JDBC
单机执行器与分布式执行器:火山模型,Push模型
查询优化器:Apache Calcite,
查询编译器: Apache Calcite,Mycat 1.6
执行器:Ling4j,RxJava
1.21后,移除zookeeper
原型库直接作为配置中心,把使用物理库与逻辑库相同表结构实现show语句的支持,另外建立mycat库用于存储mycat的特有配置信息
Mycat本身使用三个命令实现对本地文件配置,运行时配置,原型库文件配置进行加载和存储,可以自行实现脚本
1.执行对多个Mycat对原型库读取数据
2.把本地的配置写进原型库
/*+mycat:syncConfigFromDbToFile{} */ 把原型的配置写入该mycat的本地配置,但不加载到运行时
/*+mycat:syncConfigFromFileToDb{} */把本地配置写入该mycat指向的原型库,但不加载到运行时
/*+mycat:loadConfigFromFile{} */把本地配置加载到运行时
/*+mycat:checkConfigConsistency{} */检查原型库配置与本地配置是否一致
多实例Mycat架构(1.21前)
通过Haproxy(Nginx)负载均衡
keeplive高可用
脚本(bash,k8s,docker等)高可用
通过Haproxy(Nginx)负载均衡,keeplive高可用
logback传输日志到kafka
Prometheus定时采集Mycat Prometheus的信息并存储起来,Grafana通过查询Prometheus得到统计信息并可视化
JMX监控
建议的业务热更新架构,用于切换Mycat
上述指向的Mycat并不一定是Mycat,而是Mycat所在的方向