Mycat的安裝啟動和讀寫分離
介紹:
Mycat作為資料庫中介軟體,用來實現讀寫分離、資料分片(垂直拆分/水平拆分)、多資料來源整合等功能。
原理:
Mycat通過攔截使用者發過來的SQL語句,並對其進行特定的分析,如分片分析、路由分析、讀寫分離分析、快取分析等,然後將此SQL發往後端對應的資料庫,並將返回的結果做適當的處理,最終返回給使用者。
安裝啟動:
1、將Mycat的tar.gz格式的壓縮包拷貝到Linux系統下的opt目錄下
2、使用Linux的編輯指令碼(如Xshell),進入到opt目錄下解壓壓縮檔案(tar -zxvf 檔名)
3、將解壓後的檔案複製到/usr/local目錄下(cp -rv mycat /usr/local)
4、啟動前先修改schema.xml
<?xml version="1.0"?>
<!DOCTYPE mycat:schema SYSTEM "schema.dtd">
<mycat:schema xmlns:mycat="http://io.mycat/">
<!--邏輯庫 name名稱, checkSQLschema sqlMaxLimit 末尾是否要加 limit xxx-->
<schema name="TESTDB" checkSQLschema="false" sqlMaxLimit="100" dataNode="dn1"> </schema>
<!--邏輯庫 name名稱, dataHost 引用的哪個dataHost database:對應mysql的database-->
<dataNode name="dn1" dataHost="host1" database="資料庫名" />
<dataHost name="host1" maxCon="1000" minCon="10" balance="0"
writeType="0" dbType="mysql" dbDriver="native" switchType="1" slaveThreshold="100">
<heartbeat>select user()</heartbeat>
<!-- can have multi write hosts -->
<writeHost host="hostM1" url="寫主機ip:3306" user="xxx" password="xxx">
<readHost host="hostM2" url="讀主機ip:3306" user="xxx" password="xxx">
</writeHost>
</dataHost>
</mycat:schema>
5、驗證資料庫的訪問情況(讀寫主機都需要使用遠端訪問的形式進行驗證是否連通)
mysql -u使用者名稱 -p密碼 -h對應ip地址 -P3306(寫主機)
mysql -u使用者名稱 -p密碼 -h對應ip地址 -P3306(讀主機)
注:
如本機遠端訪問報錯,請建對應使用者(mysql -u使用者名稱 -p密碼)
grant all privileges on *.* to [email protected]'缺少的host' identified by '密碼';
6、先使用前臺啟動,確認是否能啟動成功。去mycat/bin 目錄下執行 ./ mycat console。
7、(可選擇性更改,ctrl+c關閉之後修改,改後再啟動)為了區分mycat和mysql的使用者名稱可以進行配置檔案的修改server.xml
<user name="mycat">
<property name="password">123456</property>
<property name="schemas">TESTDB</property>
</user>
8、登入mysql -umycat -p123456 -P8066 -h 主機ip
9、後續一系列操作show databases、use TESTDB、show tables
10、配置讀寫分離,修改schema.xml的balance(配置成3)
負載均衡型別,目前的取值有4 種:
(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",所有讀操作都隨機的在 writeHost、readhost 上分發。
(4) balance="3",所有讀請求隨機的分發到 readhost 執行,writerHost 不負擔讀壓力