Mycat是一個開源的分布式數據庫系統,但是由於真正的數據庫需要存儲引擎,而Mycat並沒有存儲引擎,所以並不是完全意義的分布式數據庫系統。
Mycat是數據庫中間件,就是介於數據庫與應用之間,進行數據處理與交互的中間服務。對數據進行分片處理之后,從原有的一個庫,被切分為多個分片數據庫,所有的分片數據庫集群構成了整個完整的數據庫存儲。
1. MyCAT安裝配置
MyCAT系統安裝環境:
192.168.149.128 MyCAT
192.168.149.129 MYSQL-MASTER
192.168.149.130 MYSQL-SLAVE
MyCAT安裝之前,需要先安裝jdk (Java Development Kit) ,JDK是 Java 語言的軟件開發工具包(SDK)),本文安裝版本為:jdk1.7.0_75.tar.gz
| tar -xzf jdk1.7.0_75.tar.gz mkdir -p /usr/java/ mv jdk1.7.0_75 /usr/java/ |
配置java環境變量,vi /etc/profile 添加如下語句:
| export JAVA_HOME=/usr/java/jdk1.7.0_75 export CLASSPATH=$CLASSPATH:$JAVA_HOME/lib:$JAVA_HOME/jre/lib export PATH=$JAVA_HOME/bin:$JAVA_HOME/jre/bin:$PATH:$HOMR/bin |
source /etc/profile //使環境變量立刻生效。
java -version //查看java版本,顯示版本為1.7.0_75,證明安裝成功。
wget http://dl.mycat.io/1.6-RELEASE/Mycat-server-1.6-RELEASE-20161028204710-linux.tar.gz
tar xzf Mycat-server-1.6-RELEASE-20161028204710-linux.tar.gz
mv mycat/ /usr/local/
MyCAT配置目錄詳解如下:
- bin程序目錄,存放了 window版本和linux版本啟動腳本,除了提供封裝服務的版本之外,也提供了 nowrap的 shell腳本命令,方便大家選擇和修改,進入到bin目錄:
- Linux 下運行:./mycat console,首先要 chmod +x *
- mycat 支持的命令{ console | start | stop | restart | status | dump }
- conf目錄下存放配置文件,其中:
- server.xm 丨Mycat服務器參數調整和用戶授權的配置文件;
- schema.xm丨邏輯庫定義和表及分片定義的配置文件;
- rule.xml |分片規則的配置文件,分片規則的具體一些參數信息單獨存放為文件,也在這個目錄下,配置文件修改,需要重啟Mycat或者通過9066端口 reload;
- lib目錄下主要存放mycat依賴的一些jar文件;
- 日志存放在logs/mycat.log中,每天一個文件,日志的配置是在conf/log4j.xml中,根據自己的需要,可以調整輸出級別為debug , debug級別下;
- Catlet |支持跨分片復雜SQL實現以及存儲過程支持。
本文基於MyCAT實現讀寫分離,只需要涉及到兩個MyCAT配置文件,分別是:server.xml和schema.xml文件:
其中Server.xml文件主要配置段內容如下:
| <user name="abc1"> <property name="password">123456</property> <property name="schemas">testdb</property> </user> <user name="abc2"> <property name="password">123456</property> <property name="schemas">testdb</property> <property name="readOnly">true</property> </user> |
- 創建abc1、abc2兩個用戶用於連接MyCAT中間件:
- 用戶名abc1、密碼123456,對邏輯數據庫testdb具有增刪改查的權限,也即WEB連接MyCAT的用戶名和密碼;
- 用戶名abc2,密碼123456,該用戶對邏輯數據庫testdb只讀的權限;
其中Schema.xml文件主要配置內容如下:
| <?xml version="1.0"?> <!DOCTYPE mycat:schema SYSTEM "schema.dtd"> <mycat:schema xmlns:mycat="http://io.mycat/"> <schema name="testdb" checkSQLschema="false" sqlMaxLimit="1000" dataNode="dn1"> </schema> <dataNode name="dn1" dataHost="localhost1" database="discuz" /> <dataHost name="localhost1" maxCon="2000" minCon="1" balance="0" writeType="1" dbType="mysql" dbDriver="native" switchType="1" slaveThreshold="100"> <heartbeat>select user()</heartbeat> <writeHost host="hostM1" url="192.168.149.129:3306" user="root" password="123456"> <readHost host="hostS1" url="192.168.149.130:3306" user="root" password="123456" /> </writeHost> </dataHost> </mycat:schema> |
如上配置邏輯數據庫testdb必須和server.xml中的用戶指定的testdb數據庫名稱一致,否則會報錯!如下為配置文件詳解:
| <?xml version="1.0"?> xml文件格式; <!DOCTYPE mycat:schema SYSTEM "schema.dtd"> 文件標簽屬性; <mycat:schema xmlns:mycat="http://io.mycat/"> Mycat起始標簽 <schema name="testdb" checkSQLschema="false" sqlMaxLimit="1000" dataNode="dn1"> </schema> 配置邏輯庫,與server.xml指定庫名保持一致,綁定數據節點dn1; <dataNode name="dn1" dataHost="localhost1" database="discuz" /> 添加數據節點dn1,設置數據節點host名稱,同時設置數據節點真實database為discuz; <dataHost name="localhost1" maxCon="2000" minCon="1" balance="0" writeType="1" dbType="mysql" dbDriver="native" switchType="1" slaveThreshold="100"> 數據節點主機,綁定數據節點,設置連接數及均衡方式、切換方法、驅動程序、連接方法; Balance均衡策略設置: 1) balance=0 不開啟讀寫分離機制,所有讀操作都發送到當前可用的writehost; 2) balance=1 全部的readHost與stand by writeHost參與select語句的負載均衡,簡單的說,當雙主雙從模式(M1->S1,M2->S2,並且M1與 M2互為主備),正常情況下,M2,S1,S2都參與select語句的負載均衡。 3) balance=2 所有讀操作都隨機的在readhost和writehost上分發; 4) balance=3 所有讀請求隨機的分發到wiriterHost對應的readhost執行,writerHost不負擔讀壓力。 writeType 寫入策略設置 1) writeType=0, 所有寫操作發送到配置的第一個writeHost; 2) writeType=1,所有寫操作都隨機的發送到配置的writeHost; 3) writeType=2,不執行寫操作。 switchType 策略設置 1) switchType=-1,表示不自動切換; 2) switchType=1,默認值,自動切換; 3) switchType=2,基於MySQL 主從同步的狀態決定是否切換; 4) switchType=3,基於MySQL galary cluster的切換機制(適合集群)(1.4.1),心跳語句為 show status like 'wsrep%'。 <heartbeat>select user()</heartbeat> 檢測后端MYSQL實例,SQL語句; <writeHost host="hostM1" url="192.168.149.129:3306" user="root" password="123456"> <readHost host="hostS1" url="192.168.149.130:3306" user="root" password="123456" /> </writeHost> 指定讀寫請求,同時轉發至后端MYSQL真實服務器,配置連接后端MYSQL用戶名和密碼(該用戶名和密碼為MYSQL數據庫用戶名和密碼); </dataHost> 數據主機標簽; </mycat:schema> mycat結束標簽; |
2. MyCAT讀寫分離測試
MyCAT配置完畢,直接啟動即可;/usr/local/mycat/bin/mycat start即可,如圖所示:

查看8066和9066端口是否啟動,其中8066用於WEB連接Mycat,9066用於SA|DBA管理端口;
netstat -ntl|grep -E --color "8066|9066"

進入MyCAT命令行界面:
mysql -h192.168.149.128 -uabc1 -p123456 -P8066
進入9066 管理端口:
mysql -h192.168.149.128 -uabc1 -p123456 -P9066
執行命令如圖所示:
show @@datasource;


停止Slave數據庫:

所有讀寫請求均讀取MASER數據庫:

3. MyCAT管理命令
MyCAT 自身有類似其他數據庫的管理監控方式,可以通過 Mysql 命令行,登錄管理端口(9066)執行相應 的 SQL 進行管理,也可以通過 jdbc 的方式進行遠程連接管理,本小節主要講解命令行的管理操作。
其中8066 數據端口,9066 管理端口,命令行的登陸是通過9066 管理端口來操作,登錄方式類似於 mysql 的服務端登陸。
mysql -h192.168.149.128 -uabc1 –p123456 -P8066
mysql -h192.168.149.128 -uabc1 –p123456 -P9066
- -h 后面是主機,即當前 mycat 按照的主機地址;
- -u Mycat server.xml 中配置的邏輯庫用戶;
- -p Mycat server.xml 中配置的邏輯庫密碼;
- -P 后面是端口 默認 9066,注意 P 是大寫;
數據端口與管理端口的配置端口修改,數據端口默認 8066,管理端口默認 9066 ,如果需要修改需要配置 server.xml,加入如下代碼,例如將數據庫端口改成3306:
| <property name="serverPort">3306</property> <property name="managerPort">9066</property> |
9066 管理端口登陸后,執行show @@help可以查看到所有命令:

常見管理命令如下:
1) 查看mycat版本
show @@version;
2) 查看當前的庫
show @@database;
3) 查看MyCAT數據節點的列表,dataNode節點:
mysql> show @@datanode;

其中,“NAME”表示 dataNode 的名稱;“dataHost”表示對應 dataHost 屬性的值,即數據主機; “ACTIVE”表示活躍連接數;“IDLE”表示閑置連接數;“SIZE”對應總連接數量。
有1個空閑連接,那我們去主從節點用 netstat -ntp 命令看看建立的連接情況:
4) 查看心跳報告:
mysql> show @@heartbeat; 該命令用於報告心跳狀態
5) 查看Mycat的前端連接狀態,即應用與mycat的連接:
mysql> show @@connection\G

從上面獲取到的連接 ID 屬性,可以手動殺掉某個連接。
kill @@connection id,id,id
6) 顯示后端連接狀態:
mysql> show @@backend\G
7) 顯示數據源:
mysql> show @@datasource;

4. MyCAT狀態監控
MyCAT-WEB是基於mycat的一個性能監控工具,可以更有效的使用mycat管理mycat監控Mycat,讓Mycat工作更加高效。Mycat-web的運行依賴 zookpeer ,需要提前安裝Zookeeper服務,Zookeeper作為配置中心;
MyCAT監控 支持如下特點:
- 支持對Mycat、Mysql性能監控 ;
- 支持對Mycat的JVM內存提供監控服務 ;
- 支持對線程的監控;
- 支持對操作系統的CPU、內存、磁盤、網絡的監控 ;
Zookeeper安裝配置:
| wget http://apache.opencas.org/zookeeper/zookeeper-3.4.6/zookeeper-3.4.6.tar.gz tar -zxvf zookeeper-3.4.6.tar.gz -C /usr/local/ cd /usr/local/zookeeper-3.4.6/ cd conf cp zoo_sample.cfg zoo.cfg cd /usr/local/zookeeper-3.4.6/bin/ ./zkServer.sh start |
安裝配置MyCAT-WEB:
wget http://dl.mycat.io/mycat-web-1.0/Mycat-web-1.0-SNAPSHOT-20170102153329-linux.tar.gz
tar -xvf Mycat-web-1.0-SNAPSHOT-20170102153329-linux.tar.gz -C /usr/local/
#修改zookeeper注冊中心地址:
cd /usr/local/mycat-web/mycat-web/WEB-INF/classes
vim mycat.properties
zookeeper=127.0.0.1:2181
#啟動MyCAT-WEB服務即可:
cd /usr/local/mycat-web/
./start.sh &
#通過瀏覽器訪問如圖所示:
訪問地址是:http://192.168.149.128:8082/mycat/
連接MyCAT服務器,填寫如下配置即可:


