一、概述
讀寫分離是常見的一種資料庫架構,一般是由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即可看到邏輯庫,打擊打開可以看到庫内所有表(不用單獨再建立每一張實體表的邏輯表,自動映射)。