Mycat+mysql讀寫分離實戰


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) JDKJava 語言的軟件開發工具包(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版本啟動腳本,除了提供封裝服務的版本之外,也提供了 nowrapshell腳本命令,方便大家選擇和修改,進入到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.xmlschema.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名稱,同時設置數據節點真實databasediscuz

<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  全部的readHoststand by writeHost參與select語句的負載均衡,簡單的說,當雙主雙從模式(M1->S1M2->S2,並且M1M2互為主備),正常情況下,M2,S1,S2都參與select語句的負載均衡。

3) balance=2  所有讀操作都隨機的在readhostwritehost上分發

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即可,如圖所示:

查看80669066端口是否啟動,其中8066用於WEB連接Mycat9066用於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

  1. -h 后面是主機即當前 mycat 按照的主機地址
  2. -u Mycat server.xml 中配置的邏輯庫用戶
  3. -p Mycat server.xml 中配置的邏輯庫密碼
  4. -P 后面是端口 默認 9066,注意 是大寫

數據端口與管理端口的配置端口修改數據端口默認 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監控 支持如下特點:

  • 支持對MycatMysql性能監控 
  • 支持對MycatJVM內存提供監控服務 
  • 支持對線程的監控
  • 支持對操作系統的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服務器,填寫如下配置即可:

 

 

 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM