您好,登錄后才能下訂單哦!
關(guān)于mycat的鏈接:
Mycat官網(wǎng)
Mycat下載鏈接
Mycat官方文檔,百度網(wǎng)盤(pán)官方文檔下載鏈接,提取碼:f9nq。
Mycat簡(jiǎn)略文檔
可以在開(kāi)始之前,閱讀Mycat簡(jiǎn)略文檔,對(duì)其有個(gè)大概了解。
注:MyCAT 支持多種數(shù)據(jù)庫(kù)接入,分別有:mongodb、oracle、sqlserver 、hive 、db2 、 postgresql。
在mycat中有以下三個(gè)比較重要的專業(yè)術(shù)語(yǔ),這里簡(jiǎn)單寫(xiě)一下:
- Schema:邏輯庫(kù),與MySQL中的databases(數(shù)據(jù)庫(kù))對(duì)應(yīng),一個(gè)邏輯庫(kù)中定義了所包括的table。
- table:邏輯表,就是物理數(shù)據(jù)庫(kù)中存儲(chǔ)的某一張表,與傳統(tǒng)的數(shù)據(jù)庫(kù)不同,這里的表格要聲明其所存儲(chǔ)的邏輯數(shù)據(jù)節(jié)點(diǎn)datanode,再次可以指定表的分片規(guī)則。
- datanode:mycat的邏輯數(shù)據(jù)節(jié)點(diǎn),是存放table的具體物理節(jié)點(diǎn),也稱之為分片節(jié)點(diǎn),通過(guò)datasource來(lái)關(guān)聯(lián)到后端某個(gè)具體數(shù)據(jù)庫(kù)上。
- datasource:定義某個(gè)物理庫(kù)的訪問(wèn)地址,用于捆綁到datanode上。
本博文實(shí)現(xiàn)功能如下:
上述環(huán)境類似于web群集,前端nginx代理(這里是mycat),后端兩個(gè)MySQL服務(wù),slave服務(wù)器用來(lái)讀數(shù)據(jù),master服務(wù)器用來(lái)寫(xiě)數(shù)據(jù)。
系統(tǒng) | IP | 主機(jī)名 | 服務(wù) |
---|---|---|---|
Centos 7.5 | 192.168.20.2 | mysql01 | MySQL 5.7.24 |
Centos 7.5 | 192.168.20.3 | mysql02 | MySQL 5.7.24 |
Centos 7.5 | 192.168.20.4 | mycat | Mycat |
mycat的安裝部署需要jdk1.7及以上版本,mysql建議是5.5及以上版本。
自行部署兩臺(tái)MySQL的主從,可以參考博文:MySQL高可用方案——雙主(注:只需要參考博文做出主從效果即可,并不需要雙主,也不需要keepalived來(lái)做高可用)。
[root@mycat ~]# java -version #查看jdk版本是否合適
openjdk version "1.8.0_161"
OpenJDK Runtime Environment (build 1.8.0_161-b14)
OpenJDK 64-Bit Server VM (build 25.161-b14, mixed mode)
#如果上述指令返回錯(cuò)誤,可以執(zhí)行下面的命令安裝jdk環(huán)境
[root@mycat ~]# yum -y install java
下載的mycat包,直接解壓即可使用。
#下載并解壓
[root@mycat src]# wget http://dl.mycat.io/1.6-RELEASE/Mycat-server-1.6-RELEASE-20161028204710-linux.tar.gz
[root@mycat src]# tar zxf Mycat-server-1.6-RELEASE-20161028204710-linux.tar.gz -C /usr/local/
#查看解壓后的目錄結(jié)構(gòu)
[root@mycat src]# tree -L 1 /usr/local/mycat/
/usr/local/mycat/
├── bin
├── catlet
├── conf
├── lib
├── logs
└── version.txt
其中:
- bin:?jiǎn)?dòng)目錄;
- lib:mycat自身的jar包或依賴的jar包的存放目錄;
- logs:mycat日志的存放目錄,日志存放在logs/log中,每天一個(gè)文件;
- conf:配置目錄,用于存放配置文件
- --server.xml:是Mycat服務(wù)器參數(shù)調(diào)整和用戶授權(quán)的配置文件。
- --schema.xml:是邏輯庫(kù)定義和表以及分片定義的配置文件。
- --rule.xml: 是分片規(guī)則的配置文件,分片規(guī)則的具體一些參數(shù)信息單獨(dú)存放為文件,也在這個(gè)目錄下,配置文件修改需要重啟MyCAT。
- --log4j.xml: 日志存放在logs/log中,每天一個(gè)文件,日志的配置是在conf/log4j.xml中,根據(jù)自己的需要可以調(diào)整輸出級(jí)別為debug debug級(jí)別下,會(huì)輸出更多的信息,方便排查問(wèn)題。
- --autopartition-long.txt,partition-hash-int.txt,sequence_conf.properties, sequence_db_conf.properties 分片相關(guān)的id分片規(guī)則配置文件
下面的圖片描述了mycat最重要的3大配置文件:
#指定client連接mycat的用戶名及密碼,此處的賬號(hào)密碼與MySQL數(shù)據(jù)庫(kù)無(wú)關(guān)
[root@mycat mycat]# vim conf/server.xml #定位到80行左右,修改如下
<user name="mycat" defaultAccount="true"> #mycat為用戶名
<property name="password">pwd@123</property> #此處為密碼
<property name="schemas">teset_mycat</property> #此處為邏輯庫(kù)名
<!-- 表級(jí) DML 權(quán)限設(shè)置 -->
<!--
<privileges check="false">
<schema name="TESTDB" dml="0110" >
<table name="tb01" dml="0000"></table>
<table name="tb02" dml="1111"></table>
</schema>
</privileges>
-->
</user>
<?xml version="1.0"?>
<!DOCTYPE mycat:schema SYSTEM "schema.dtd">
<mycat:schema xmlns:mycat="http://io.mycat/">
<!--下面的schema必須和第一個(gè)文件中的schema name(邏輯庫(kù)名)一致。-->
<schema name="teset_mycat" checkSQLschema="false" sqlMaxLimit="100" dataNode="dn1">
</schema>
<dataNode name="dn1" dataHost="host1" database="test" /> <!--這里的database是指定要連接后端的哪個(gè)數(shù)據(jù)庫(kù),這里連接的是test庫(kù)-->
<!--下面是指定后端真實(shí)的MySQL主機(jī),關(guān)于下面的balance值,有三個(gè)可選值,將在下面寫(xiě)下來(lái)-->
<dataHost name="host1" maxCon="1000" minCon="10" balance="3"
writeType="0" dbType="mysql" dbDriver="native" switchType="1" slaveThreshold="100">
<heartbeat>select user()</heartbeat>
<!-- can have multi write hosts -->
<!--指定后端哪臺(tái)主機(jī)用來(lái)寫(xiě)數(shù)據(jù)-->
<writeHost host="hostM1" url="192.168.20.2:3306" user="root"
password="123.com">
<!-- can have multi read hosts -->
<!--指定后端哪臺(tái)主機(jī)用來(lái)讀數(shù)據(jù)-->
<readHost host="hostS2" url="192.168.20.3:3306" user="root" password="123.com" />
</writeHost>
</dataHost>
</mycat:schema>
注:上面提到的dataHost字段balance負(fù)載均衡類型,目前的取值有以下4 種:
- balance="0", 不開(kāi)啟讀寫(xiě)分離機(jī)制,所有讀操作都發(fā)送到當(dāng)前可用的 writeHost 上(默認(rèn)值)。
- balance="1",全部的 readHost 與 stand by writeHost 參與 select 語(yǔ)句的負(fù)載均衡,簡(jiǎn)單的說(shuō),當(dāng)雙主雙從模式(M1->S1,M2->S2,并且 M1 與 M2 互為主備),正常情況下,M2,S1,S2 都參與 select 語(yǔ)句的負(fù)載均衡。
- balance="2",所有讀操作都隨機(jī)的在 writeHost、readhost 上分發(fā)。
- balance="3",所有讀請(qǐng)求隨機(jī)的分發(fā)到 wiriterHost 對(duì)應(yīng)的 readhost 執(zhí)行,writerHost 不負(fù)擔(dān)讀壓力,注意 balance=3 只在 1.4 及其以后版本有,1.3 沒(méi)有。
writeTyep字段有以下3中取值:
1、writeType="0", 所有寫(xiě)操作發(fā)送到配置的第一個(gè) writeHost,第一個(gè)掛了切到還生存的第二個(gè) writeHost,重新啟動(dòng)后已切換后的為準(zhǔn),切換記錄在配置文件中:dnindex.properties 。
2、writeType="1",所有寫(xiě)操作都隨機(jī)的發(fā)送到配置的 writeHost,1.5 以后廢棄不推薦。switchType 屬性
- -1 表示不自動(dòng)切換。
- 1 默認(rèn)值,自動(dòng)切換。
- 2 基于 MySQL 主從同步的狀態(tài)決定是否切換。
#復(fù)制一個(gè)mysql命令
[root@mycat mycat]# scp root@192.168.20.2:/usr/local/mysql/bin/mysql /usr/local/bin/
#對(duì)后端兩臺(tái)數(shù)據(jù)庫(kù)進(jìn)行登錄測(cè)試
[root@mycat mycat]# mysql -uroot -p123.com -h 192.168.20.2
[root@mycat mycat]# mysql -uroot -p123.com -h 192.168.20.3
#確保執(zhí)行上述指令登錄數(shù)據(jù)庫(kù)時(shí),可以登錄成功。
#如果沒(méi)有登錄成功,則要考慮數(shù)據(jù)庫(kù)的root用戶是否有遠(yuǎn)程登錄的權(quán)限,或者防火墻的問(wèn)題。
server.xml文件內(nèi)容如下:
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mycat:server SYSTEM "server.dtd">
<mycat:server xmlns:mycat="http://io.mycat/">
<system>
<property name="useSqlStat">0</property> <!-- 1為開(kāi)啟實(shí)時(shí)統(tǒng)計(jì)、0為關(guān)閉 -->
<property name="useGlobleTableCheck">0</property> <!-- 1為開(kāi)啟全加班一致性檢測(cè)、0為關(guān)閉 -->
<property name="sequnceHandlerType">2</property>
<property name="processorBufferPoolType">0</property>
<property name="handleDistributedTransactions">0</property>
<property name="useOffHeapForMerge">1</property>
<property name="memoryPageSize">1m</property>
<property name="spillsFileBufferSize">1k</property>
<property name="useStreamOutput">0</property>
<property name="systemReserveMemorySize">384m</property>
<property name="useZKSwitch">true</property>
<!--以上內(nèi)容中,只是刪除了一些注釋行的內(nèi)容,主要是下面-->
</system>
<user name="mycat" >
<property name="password">pwd@123</property>
<property name="schemas">teset_mycat</property>
</user>
</mycat:server>
conf/schema.xml文件內(nèi)容如下:
<?xml version="1.0"?>
<!DOCTYPE mycat:schema SYSTEM "schema.dtd">
<mycat:schema xmlns:mycat="http://io.mycat/">
<schema name="teset_mycat" checkSQLschema="false" sqlMaxLimit="100" dataNode="dn1">
</schema>
<dataNode name="dn1" dataHost="host1" database="test" />
<dataHost name="host1" maxCon="1000" minCon="10" balance="3"
writeType="0" dbType="mysql" dbDriver="native" switchType="1" slaveThreshold="100">
<heartbeat>select user()</heartbeat>
<!-- can have multi write hosts -->
<writeHost host="hostM1" url="192.168.20.2:3306" user="root"
password="123.com">
<!-- can have multi read hosts -->
<readHost host="hostS2" url="192.168.20.3:3306" user="root" password="123.com" />
</writeHost>
</dataHost>
</mycat:schema>
- ./mycat start 啟動(dòng)
- ./mycat stop 停止
- ./mycat console 前臺(tái)運(yùn)行
- ./mycat install 添加到系統(tǒng)自動(dòng)啟動(dòng)(暫未實(shí)現(xiàn))
- ./mycat remove 取消隨系統(tǒng)自動(dòng)啟動(dòng)(暫未實(shí)現(xiàn))
- ./mycat restart 重啟服務(wù)
- ./mycat pause 暫停
- ./mycat status 查看啟動(dòng)狀態(tài)
#創(chuàng)建命令軟連接
[root@mycat mycat]# ln -sf /usr/local/mycat/bin/mycat /usr/local/bin/
#啟動(dòng)mycat
[root@mycat mycat]# mycat start #更建議使用mycat console前臺(tái)啟動(dòng),如果有錯(cuò)誤,就會(huì)直接輸出到屏幕,方便排錯(cuò)
#待調(diào)試正常后,再使用mycat start后臺(tái)啟動(dòng)即可。
Starting Mycat-server...
[root@mycat conf]# ss -lnp | grep 8066 #如果端口沒(méi)有在監(jiān)聽(tīng),則表示啟動(dòng)失敗,自行查看日志排查吧。
tcp LISTEN 0 100 :::8066 :::* users:(("java",pid=62070,fd=78))
#使用server.xml文件中定義的用戶名及密碼進(jìn)行登錄查看
[root@mycat conf]# mysql -umycat -ppwd@123 -h 192.168.20.4 -P 8066
mysql> show databases; #下面的teset_mycat庫(kù)對(duì)應(yīng)的就是后端的test庫(kù)
+-------------+
| DATABASE |
+-------------+
| teset_mycat |
+-------------+
1 row in set (0.00 sec)
mysql> use teset_mycat
#庫(kù)中所有的表數(shù)據(jù)和后端數(shù)據(jù)庫(kù)是對(duì)應(yīng)的
mysql> show tables;
+----------------+
| Tables_in_test |
+----------------+
| t1 |
+----------------+
1 row in set (0.00 sec)
mysql> select * from t1;
+------+------+
| id | name |
+------+------+
| 1 | a |
| 2 | b |
| 3 | c |
| 4 | d |
+------+------+
至此,已經(jīng)成功接入了mycat來(lái)連接后端數(shù)據(jù)庫(kù),但是mycat的主要功能還沒(méi)有展示,我將繼續(xù)更新后面的內(nèi)容。其實(shí)更推薦去閱讀Mycat官方文檔。官方文檔也比較通俗易懂。
免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。