1.安裝JAVA環境JDKlinux
基於JAVA開發,因此須要安裝JDKgit
2.下載安裝Mycatgithub
https://github.com/MyCATApache/Mycat-download 數據庫
本次安裝1.5版本 服務器
wget https://raw.githubusercontent.com/MyCATApache/Mycat-download/master/1.5-RELEASE/Mycat-server-1.5.1-RELEASE-20160720200038-linux.tar.gz負載均衡
注: MyCAT-WEB就是基於mycat的一個性能監控工具,方便你們更有效的使用mycat管理mycat監控mycat工具
3.解壓安裝:性能
[root@mycat ~]# tar -zxvf Mycat-server-1.5.1-RELEASE-20160720200038-linux.tar.gz -C /opt/spa
useradd mycatdebug
chown -R mycat:mycat /opt/mycat
4配置說明:
MyCAT目前主要途過配置文件的方式來定義邏輯庫和相關配置:配置文件修改,須要重啓Mycat或者經過9066端口reload
schema.xml中定義邏輯庫,表、分片節點等內容
rule.xml中定義分片規則
server.xml中定義用戶以及系統相關變量,如端口等。是mycat服務器參數調整和用戶受權的配置文件
log4j.xml日誌存放在logs/log中,天天一個文件,日誌的配置是在conf/log4j.xml中,根據本身的須要能夠調整輸出級別爲debug,debug級別下,會輸出更多的信息,方便排查問題。
MYCAT經常使用的分片規則以下
(1)分片枚舉: sharding-by-intfile
(2)主鍵範圍約定: auto-sharding-long 此分片適用於,提早規劃好分片字段某個範圍屬於哪一個分片
(3)一致性hash: sharding-by-murmur
(4)字符串hash解析: sharding-by-stringhash
(5)按日期(天)分片: sharding-by-date
(6)按單月小時拆分: sharding-by-hour
(6)天然月分片: sharding-by-month
(7)取模: mod-long 此規則爲對分片字段求摸運算
(8)取模範圍約束:sharding-by-pattern 此種規則是取模運算與範圍約束的結合,主要爲了後續數據遷移作準備,便可以自主決定取模後數據的節點分佈。
balance指的負載均衡類型
1. balance="0", 不開啓讀寫分離機制,全部讀操做都發送到當前可用的writeHost上。
2. balance="1",所有的readHost與stand by writeHost參與select語句的負載均衡.
3. balance="2",全部讀操做都隨機的在writeHost、readhost上分發。
4. balance="3",全部讀請求隨機的分發到wiriterHost對應的readhost執行,writerHost不負擔讀壓力
switchType指的是切換的模式
1. switchType='-1' 表示不自動切換
2. switchType='1' 默認值,表示自動切換
3. switchType='2' 基於MySQL主從同步的狀態決定是否切換,心跳語句爲 show slave status
4. switchType='3'基於MySQL galary cluster的切換機制(適合集羣)(1.4.1),心跳語句爲 show status like 'wsrep%'。
當配置switchType='1'時,若是第一個writeHost宕機,則Mycat會在默認的3次心跳檢查失敗後,自動切換到下一個可用的writeHost執行DML SQL語句,並在conf/dnindex.properties
文件裏自動更新記錄當前所用的writeHost的index(第一個爲0,第二個爲1,依次類推),注意,此文件不能刪除和擅自改變,除非你深入理解了它的做用以及你的目的。
writeType屬性,寫操做負載均衡類型
1. writeType="0" (默認)全部寫操做發送到配置的第一個writeHost,第一個掛了切到還生存的第二個writeHost,從新啓動後已切換後的爲準,切換記錄在配置文件中:dnindex.properties.
2. writeType="1",全部寫操做都隨機的發送到readHost。
3. writeType="2",全部寫操做都隨機的在writeHost、readhost分上發。
readHost是從屬於writeHost的,即意味着它從那個writeHost獲取同步數據,所以,當它所屬的writeHost宕機了,則它也不會再參與到讀寫分離中來,即「不工做了」,這是由於此時,它的數據已經「不可靠」了。基於這個考慮,目前mycat 1.3和1.4版本中,若想支持MySQL一主一從的標準配置,而且在主節點宕機的狀況下,從節點還能讀取數據,則須要在Mycat裏配置爲兩個writeHost並設置banlance=1。
Mycat裏面要將MySQL Slave配置爲WriteHost,而不是readHost,這樣當第一個WriteHost宕機,Mycat就會自動切換到第二個WriteHost,即MySQL Slave
上,完成自動的故障切換(多主模式)
數據切分:
簡單來講,就是指經過某種特定的條件,將咱們存放在同一個數據庫中的數據分散存放到多個數據庫(主機)上面,以達到分散單臺設備負載的效果。
數據的切分(Sharding)根據其切分規則的類型,能夠分爲兩種切分模式。
一種是按照不一樣的表(或者Schema)來切分到不一樣的數據庫(主機)之上,這種切能夠稱之爲數據的垂直(縱向)切分;
另一種則是根據表中的數據的邏輯關係,將同一個表中的數據按照某種條件拆分到多臺數據庫(主機)上面,這種切分稱之爲數據的水平(橫向)切分。
垂直切分的最大特色就是規則簡單,實施也更爲方便,尤爲適合各業務之間的耦合度很是低,相互影響很小,業務邏輯很是清晰的系統。
在這種系統中,能夠很容易作到將不一樣業務模塊所使用的表分拆到不一樣的數據庫中。根據不一樣的表來進行拆分,對應用程序的影響也更小,拆分規則也會比較簡單清晰。
因爲垂直切分是按照業務的分類將表分散到不一樣的庫,因此有些業務表會過於龐大,存在單庫讀寫與存儲瓶頸,因此就須要水平拆分來作解決。
水平切分於垂直切分相比,相對來講稍微複雜一些。由於要將同一個表中的不一樣數據拆分到不一樣的數據庫中,對於應用程序來講,拆分規則自己就較根據表名來拆分更爲複雜,後期的數據維護也會更爲複雜一些。相對於垂直拆分,水平拆分不是將表作分類,而是按照某個字段的某種規則來分散到多個庫之中,每一個表中包含一部分數據。簡單來講,咱們能夠將數據的水平切分理解爲是按照數據行的切分,就是將表中的某些行切分到一個數據庫,而另外的某些行又切分到其餘的數據庫中