Mycat的安裝與讀寫分離配置
Mycat:
一個可以用於MySQL讀寫分離和高可用的中介軟體
一個模擬為MySQL Server的超級資料庫
一個能平滑擴充套件支援1000億大表的分散式資料庫系統
一個可管控多種關係資料庫的資料庫路由器
一個平滑從關係資料升級到大資料的應用中介軟體
準備工作:
兩臺mysql伺服器(一主一從),一臺mycat伺服器,一臺mysql客戶機進行驗證
為了方便,關閉所有主機防火牆
1. 配置mysql主從同步
建立資料庫db1,db2,db3
建立表db1—test1,db2—test2,db3—test3
建立授權使用者grant all on *.* to 'root'@'%' identified by '123456';
2. mycat是由java開發的,所以需要先安裝java,版本1.7以上
tar zxf jdk-8u20-linux-x64.tar.gz
mv jdk1.8.0_20/ /usr/local/
新增環境變數(vim /etc/profile)
export JAVA_HOME=/usr/local/jdk1.8.0_20
export CLASSPATH=$CLASSPATH:$JAVA_HOME/lib:$JAVA_HOME/jre/lib
export PATH=$JAVA_HOME/lib:$JAVA_HOME/jre/bin:$PATH:$HOME/bin
3. 從官網下載mycat,並解壓
tar zxf Mycat-server-1.6-RELEASE-20161028204710-linux.tar.gz
mv mycat/ /usr/local/
新增環境變數
export PATH=$PATH:/usr/local/mycat/bin
4. 配置
-bin :啟動目錄
-conf :配置檔案
--server.xml:是Mycat伺服器引數調整和使用者授權的配置檔案。
--schema.xml:是邏輯庫定義和表以及分片定義的配置檔案。
--rule.xml: 是分片規則的配置檔案,分片規則的具體一些引數資訊單獨存放為檔案,也在這個目錄下,配置檔案修改需要重啟MyCAT。
--log4j.xml: 日誌存放在logs/log中,每天一個檔案,日誌的配置是在conf/log4j.xml中,根據自己的需要可以調整輸出級別為debug debug級別下,會輸出更多的資訊,方便排查問題。
--autopartition-long.txt,partition-hash-int.txt,sequence_conf.properties, sequence_db_conf.properties 分片相關的id分片規則配置檔案
--lib MyCAT自身的jar包或依賴的jar包的存放目錄。
--logs MyCAT日誌的存放目錄。日誌存放在logs/log中,每天一個檔案
邏輯庫配置
配置server.xml
配置schema.xml
<schema name="TESTDB" checkSQLschema="false" sqlMaxLimit="100" dataNode="dn1" >
<table name=”test1” dataNode=”dn1,dn2” rule=”rule1” />
</schema>
<schema name="test" checkSQLschema="false" sqlMaxLimit="100" dataNode="dn2" />
<schema name="user" checkSQLschema="false" sqlMaxLimit="100" dataNode="dn3" />
<dataNode name="dn1" dataHost="host" database="db1" />
<dataNode name="dn2" dataHost="host" database="db2" />
<dataNode name="dn3" dataHost="host" database="db3" />
<dataHost name="host" maxCon="1000" minCon="10" balance="1"
writeType="0" dbType="mysql" dbDriver="native">
<heartbeat>select 1</heartbeat>
<!-- can have multi write hosts -->
<writeHost host="hostM1" url="192.168.0.2:3306" user="root" password="123456”>
<readhost="hostM2" url="192.168.0.3:3306" user="root" password="123456”>
</dataHost>
這裡需要注意的是 balance, switchType, writeType
balance="0", 不開啟讀寫分離機制,所有讀操作都發送到當前可用的writeHost上。
balance="1",全部的readHost與stand by writeHost參與select語句的負載均衡,簡單的說,當雙主雙從模式(M1->S1,M2->S2,並且M1與M2互為主備),正常情況下,M2,S1,S2都參與select語句的負載均衡。
balance="2",所有讀操作都隨機的在writeHost、readhost上分發。
balance="3",所有讀請求隨機的分發到wiriterHost對應的readhost執行,writerHost不負擔讀壓力
writeType表示寫模式
writeType="0",所有的操作傳送到配置的第一個writehost
writeType="1",隨機發送到配置的所有writehost
writeType="2",不執行寫操作
switchType指的是切換的模式,目前的取值也有4種:
switchType=‘-1‘ 表示不自動切換
switchType=‘1‘ 預設值,表示自動切換
switchType=‘2‘ 基於MySQL主從同步的狀態決定是否切換,心跳語句為show slave status
switchType=‘3‘基於MySQL galary cluster的切換機制(適合叢集)(1.4.1),心跳語句為show status like ‘wsrep%‘
5.啟動mycat
cd /usr/local/mycat/bin
./mycat start
6.客戶機登入
mysql -uroot -p123456 -P8066 –h mycat伺服器IP
7.驗證
關閉主從同步stop slave;
往mycat插入一條資料,提交重新整理
觀察剛插入的資料,發現mycat並沒檢視到這條資料
觀看主庫,發現主庫有這條通過mycat新增的資料
觀看從庫,發現從庫沒有通過mycat新增的資料
開啟從資料庫主從同步start slave;
通過從庫檢視發現有剛新新增的資料
通過mycat檢視發現也有這條剛新增的資料