一、概述
读写分离是常见的一种数据库架构,一般是由1主多从构成,特殊场景下也会存在多主多从的架构。以下是常见的架构示意图:
一主一从
一主多从
双主双从
双主多从
无论哪一种架构,对于应用程序来说都是多个数据源,增加了代码的复杂性。如果配合mycat,则可以实现屏蔽数据库复杂性,面向应用程序提供统一入口的功能。
二、配置
mycat2的配置逻辑架构大致如下:
本文采用mycat2特有的注释进行相关配置读写分离。
准备:
1、已配置主从的两个mysql实例
2、mycat2实例
步骤:
1、使用Navicat连接mycat2
2、增加mysql读写库数据源
/*+ mycat:createDataSource{
"dbType":"mysql",
"idleTimeout":60000,
"initSqls":[],
"initSqlsGetConnection":true,
"instanceType":"READ_WRITE",
"maxCon":1000,
"maxConnectTimeout":3000,
"maxRetryCount":5,
"minCon":1,
"name":"write01",
"password":"123456",
"type":"JDBC",
"url":"jdbc:mysql://127.0.0.1:3306?useUnicode=true&serverTimezone=UTC&characterEncoding=UTF-8",
"user":"root",
"weight":0
} */;
/*+ mycat:createDataSource{
"dbType":"mysql",
"idleTimeout":60000,
"initSqls":[],
"initSqlsGetConnection":true,
"instanceType":"READ_WRITE",
"maxCon":1000,
"maxConnectTimeout":3000,
"maxRetryCount":5,
"minCon":1,
"name":"read01",
"password":"123456",
"type":"JDBC",
"url":"jdbc:mysql://127.0.0.1:3306?useUnicode=true&serverTimezone=UTC&characterEncoding=UTF-8",
"user":"root",
"weight":0
} */;
可通过/*+ mycat:showDataSources{} */语句查询已创建的数据源
2、创建读写集群
/*! mycat:createCluster{
"clusterType":"MASTER_SLAVE",
"heartbeat":{
"heartbeatTimeout":1000,
"maxRetry":3,
"minSwitchTimeInterval":300,
"slaveThreshold":0
},
"masters":[
"write01" //主节点
],
"maxCon":2000,
"name":"c0",
"readBalanceType":"BALANCE_ALL",
"replicas":[
"read01" //从节点
],
"switchType":"SWITCH"
} */;
可通过/*+ mycat:showClusters{} */查看集群
3、创建逻辑库
/*+ mycat:createSchema{
"customTables":{},
"globalTables":{},
"normalTables":{},
"schemaName":"test_add_Schema",
"shardingTables":{},
"targetName":"c0"
} */;
注意targetName指的是集群的名字。
4、以上执行成功后,重新连接mycat即可看到逻辑库,打击打开可以看到库内所有表(不用单独再创建每一张物理表的逻辑表,自动映射)。
有兴趣的大佬大神可以关注下小弟的微信公共号,一起学习交流,扫描以下二维码关注即可。