天天看點

Mycat2版部署mysql讀寫分離

作者:街頭角落裡
Mycat2版部署mysql讀寫分離

一 說明

這裡隻寫了部署方法,相關說明請到官網查。官網寫得有點爛,個人推薦網站(https://www.w3cschool.cn/mycat2/mycat2-fksq3krj.html)

官網:http://www.mycat.org.cn/

安裝包下載下傳:http://dl.mycat.org.cn/

mycat1.6部署:https://www.toutiao.com/item/7237731828113818146/

環境說明:系統:centos7.9 目錄:/usr/local/mycat

MyCat1.x和MyCat2的差別
功能                                                              mycat1.6                mycat2
多語句                                                        不支援                        支援
blob值(二進制大對象)                         支援一部分                   支援
全局二級索引                                             不支援                        支援
任意跨庫join(包含複雜查詢)                catlet支援                     支援
關聯子查詢                                                 不支援                   支援一部分
分庫同時分表(亮點)                               不支援                   支援一部分
存儲過程                                               支援固定形式                 支援更多
邏輯視圖                                                      不支援                       支援
實體視圖                                                        支援                         支援
批量插入                                                      不支援                        支援
執行計劃管理                                                不支援                       支援
路由注釋                                                         支援                         支援
叢集功能                                                         支援                        支援更多叢集
自動hash分片算法                                         不支援                       支援
支援第三方監控                                      支援mycat-web       支援普羅米斯,kafka,日志監控 
流式合并結果集                                               支援                          支援
範圍查詢                                                          支援                          支援
單表映射屋裡表                                              不支援                        支援
XA事務                                                            弱XA                          支援
支援mysql8                           需要修改mysql8的伺服器配置支援       支援
虛拟表                                                             不支援                        支援
union all 文法                                                   不支援                        支援           

二 部署

1/下載下傳安裝包

1/下載下傳兩個包 位址:http://dl.mycat.org.cn/2.0/

Mycat2版部署mysql讀寫分離

下載下傳檔案分别為:

Mycat2版部署mysql讀寫分離

2/把jar包到mycat2中

把mycat2-1.22-release-jar-with-dependencies.jar 檔案放到mycat2-install-template-1.21.zip包中\mycat2-install-template-1.21\mycat2\lib 路徑下

Mycat2版部署mysql讀寫分離

3/設定權限

權限+x就行(我隻留linux的檔案了)

[root@HK_192_168_5_35 bin]#cd /usr/local/mycat/bin
[root@HK_192_168_5_35 bin]#chmod +x *.sh 
[root@HK_192_168_5_35 bin]# ll
總用量 368
-rwxr-xr-x 1 root root 15666 3月 5 2021 mycat
-rwxr-xr-x 1 root root 140198 3月 5 2021 wrapper-linux-ppc-64
-rwxr-xr-x 1 root root 99401 3月 5 2021 wrapper-linux-x86-32
-rwxr-xr-x 1 root root 111027 3月 5 2021 wrapper-linux-x86-64           

4/配置資料庫

進入mycat2/conf/datasources/prototypeDs.datasource.json 配置一個可以用的資料庫

啟動mycat之前需要确認prototype資料源所對應的mysql資料庫配置,修改對應的user(使用者),password(密碼),url中的ip

{
	"dbType":"mysql",
	"idleTimeout":60000,
	"initSqls":[],
	"initSqlsGetConnection":true,
	"instanceType":"READ_WRITE",
	"maxCon":1000,
	"maxConnectTimeout":3000,
	"maxRetryCount":5,
	"minCon":1,
	"name":"prototypeDs",
	"password":"123456",
	"type":"JDBC",
	"url":"jdbc:mysql://192.168.5.3:3306/aaaaa?useUnicode=true&serverTimezone=Asia/Shanghai&characterEncoding=UTF-8",
	"user":"root",
	"weight":0
}           

5/運作

cd mycat/bin
./mycat start 啟動
./mycat stop 停止
./mycat console 前台運作
./mycat install 添加到系統自動啟動(暫未實作)
./mycat remove 取消随系統自動啟動(暫未實作)
./mycat restart 重新開機服務
./mycat pause 暫停
./mycat status 檢視啟動狀           

預設使用者密碼端口為:root 123456 8066; 可以使用navicat遠端通路就行了。

[root@HK_192_168_5_2 ~]# mysql -uroot -p123456  -h'192.168.5.2' -P'8666'
mysql: [Warning] Using a password on the command line interface can be insecure.
Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 2
Server version: 5.7.33-mycat-2.0 Percona XtraDB Cluster (GPL), Release rel39, Revision 5197785, WSREP version 31.55, wsrep_31.55

Copyright (c) 2009-2021 Percona LLC and/or its affiliates
Copyright (c) 2000, 2021, Oracle and/or its affiliates.

Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.

Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.

[email protected] 17:09: [(none)]>           

可以使用Navicat通路

Mycat2版部署mysql讀寫分離

預設隻有information_schema;mysql;performance_schema的庫

三 mycat2實作讀寫分離

配置順序

mysql資料源 -》 mycat叢集 -》邏輯庫表(mycat指向叢集和mysql源庫)

1/添加mysql資料源

增加資料源:主資料源和從資料源;
cd /mycat/conf/datasources
cp prototypeDs.datasource.json aa_master.datasource.json
cp prototypeDs.datasource.json aa_slave01.datasource.json
cp prototypeDs.datasource.json aa_slave02.datasource.json           

分别修改三個配置檔案

vim aa_master.datasource.json
{
	"dbType":"mysql",
	"idleTimeout":60000,
	"initSqls":[],
	"initSqlsGetConnection":true,
	"instanceType":"READ_WRITE", //隻讀還是讀寫
	"maxCon":1000,
	"maxConnectTimeout":3000,
	"maxRetryCount":5,
	"minCon":1,
	"name":"aa_master",   //跟配置叢集檔案/data/mycat2/conf/clusters/*.cluster.json檔案的masters配置項有關連
	"password":"123456",   //mysql密碼
	"type":"JDBC",
	"url":"jdbc:mysql://192.168.5.2:3306/aa?useUnicode=true&serverTimezone=Asia/Shanghai&characterEncoding=UTF-8", //通路mysql資料庫位址
	"user":"root",   //通路mysql資料庫的使用者
	"weight":0
}

vim aa_slave01.datasource.json   aa_slave02.datasource.json
{
	"dbType":"mysql",
	"idleTimeout":60000,
	"initSqls":[],
	"initSqlsGetConnection":true,
	"instanceType":"READ", //隻讀還是讀寫
	"maxCon":1000,
	"maxConnectTimeout":3000,
	"maxRetryCount":5,
	"minCon":1,
	"name":"aa_master",   //跟配置叢集檔案/data/mycat2/conf/clusters/*.cluster.json檔案的masters配置項有關連
	"password":"123456",   //mysql密碼
	"type":"JDBC",
	"url":"jdbc:mysql://192.168.5.3:3306/aa?useUnicode=true&serverTimezone=Asia/Shanghai&characterEncoding=UTF-8", //通路mysql資料庫位址
	"user":"root",   //通路mysql資料庫的使用者
	"weight":0
}           

2/配置mycat叢集

配置叢集所在目錄 mycat/conf/clusters

命名方式 {叢集名字}.clusters.json

配置内容:

{
    "clusterType":"MASTER_SLAVE",
    "heartbeat":{
    "heartbeatTimeout":1000,
    "maxRetry":3, //2021-6-4前是maxRetry,後更正為maxRetryCount
    "minSwitchTimeInterval":300,
    "slaveThreshold":0
    },
    "masters":[   //配置多個主節點,在主挂的時候會選一個檢測存活的資料資料源作為主節點
    "aa_master"
    ],
    "replicas":[   //配置多個從節點,隻讀的
        "aa_slave01",
        "aa_slave02"
    ],
    "maxCon":200,
    "name":"aa",  //叢集的名稱,一般我寫成資料源的庫名
    "readBalanceType":"BALANCE_ALL",
    "switchType":"SWITCH"
    
      ////////////////////////////////////可選//////////////////////////////////
  ,
  "timer":{ //MySQL叢集心跳周期,配置則開啟叢集心跳,Mycat主動檢測主從延遲以及高可用主從切換
    "initialDelay": 30,
  "period":5,
  "timeUnit":"SECONDS"
    }
}           

說明:

clusterType可選配置如下:

SINGLE_NODE:單一節點

MASTER_SLAVE:普通主從

GARELA_CLUSTER:garela cluster/PXC叢集

readBalanceType可選值如下:

BALANCE_ALL(預設值):擷取叢集中所有資料源

BALANCE_ALL_READ:擷取叢集中允許讀的資料源

BALANCE_READ_WRITE:擷取叢集中允許讀寫的資料源,但允許讀的資料源優先

BALAN

3/邏輯庫表

配置邏輯庫表,實作分庫分表,配置所在目錄:mycat/conf/schemas

命名方式:{庫名}.schemas.json

配置内容:

{
"schemaName": "chinavered", //navicat顯示的庫名也是存在實體庫
"targetName": "chinavered", //叢集的名稱。
"normalTables": {} //配置分庫分表等,沒去研究
}           

4/重新開機Mycat2

./mycat restart 重新開機服務           

可以檢視日志是否正常/data/mycat2/logs/wrapper.log

5/mycat使用者密碼

(1)、所在目錄:mycat/conf/users

(2)、命名方式:{使用者名}.user.json

内容如下:

{
"dialect":"mysql",
"ip":null,
"password":"123456",
"transactionType":"proxy",
"username":"root"
}           

字段含義:

ip:用戶端通路ip,建議為空,填寫後會對用戶端的ip進行限制

username:使用者名

password:密碼

transactionType:事務類型

可選值:

proxy:本地事務,在涉及大于1個資料庫的事務,commit階段失敗會導緻資料不一緻,但是相容性最好

xa事務,需要确認存儲節點的叢集類型是否支援xa

可以通過配置切換:

"transactionType":'xa'
"transactionType":'proxy'           

6/使用Navica通路

預設:端口:8066 使用者:root 密碼:123456

Mycat2版部署mysql讀寫分離

mycat2連接配接24個mysql資料庫。

7/相關查詢指令

檢視配置的資料源資訊
/*+ mycat:showDataSources{} */

檢視配置叢集資訊
/*! mycat:showClusters{} */

檢視使用者
/*+ mycat:showUsers */

顯示session引用的IO緩沖塊計數
/*+ mycat:showBufferUsage{}*/

顯示schema
 /*+ mycat:showSchemas{}*/

顯示排程器
 /*+ mycat:showSchedules{}*/

顯示心跳配置
/*+ mycat:showHeartbeats{}*/

顯示心跳狀态
 /*+ mycat:showHeartbeatStatus{}*/

顯示執行個體狀态
/*+ mycat:showInstances{}*/

顯示Reactor狀态
/*+ mycat:showReactors{}*/

顯示線程池狀态
 /*+ mycat:showThreadPools{}*/

顯示表
 /*+ mycat:showTables{"schemaName":"mysql"}*/

顯示mycat連接配接
/*+ mycat:showConnections{}*/           

繼續閱讀