利用mycat實現(xiàn)mysql數(shù)據(jù)庫讀寫分離的示例
什么是MyCAT
- 一個徹底開源的,面向企業(yè)應用開發(fā)的大數(shù)據(jù)庫集群
 - 支持事務、ACID、可以替代MySQL的加強版數(shù)據(jù)庫
 - 一個可以視為MySQL集群的企業(yè)級數(shù)據(jù)庫,用來替代昂貴的Oracle集群
 - 一個融合內(nèi)存緩存技術(shù)、NoSQL技術(shù)、HDFS大數(shù)據(jù)的新型SQL Server
 - 結(jié)合傳統(tǒng)數(shù)據(jù)庫和新型分布式數(shù)據(jù)倉庫的新一代企業(yè)級數(shù)據(jù)庫產(chǎn)品
 - 一個新穎的數(shù)據(jù)庫中間件產(chǎn)品
 
MyCAT關(guān)鍵特性
- 支持SQL92標準
 - 支持MySQL、Oracle、DB2、SQL Server、PostgreSQL等DB的常見SQL語法
 - 遵守MySQL原生協(xié)議,跨語言,跨平臺,跨數(shù)據(jù)庫的通用中間件代理。
 - 基于心跳的自動故障切換,支持讀寫分離,支持MySQL主從,以及galera cluster集群。
 - 支持Galera for MySQL集群,Percona Cluster或者MariaDB cluster
 - 基于Nio實現(xiàn),有效管理線程,解決高并發(fā)問題。
 - 支持數(shù)據(jù)的多片自動路由與聚合,支持sum,count,max等常用的聚合函數(shù),支持跨庫分頁。
 - 支持單庫內(nèi)部任意join,支持跨庫2表join,甚至基于caltlet的多表join。
 - 支持通過全局表,ER關(guān)系的分片策略,實現(xiàn)了高效的多表join查詢。
 - 支持多租戶方案。
 - 支持分布式事務(弱xa)。
 - 支持XA分布式事務(1.6.5)。
 - 支持全局序列號,解決分布式下的主鍵生成問題。
 - 分片規(guī)則豐富,插件化開發(fā),易于擴展。
 - 強大的web,命令行監(jiān)控。
 - 支持前端作為MySQL通用代理,后端JDBC方式支持Oracle、DB2、SQL Server 、 mongodb 、巨杉。
 - 支持密碼加密
 - 支持服務降級
 - 支持IP白名單
 - 支持SQL黑名單、SQL注入攻擊攔截
 - 支持prepare預編譯指令
 - 支持非堆內(nèi)存(Direct Memory)聚合計算
 - 支持PostgreSQL的native協(xié)議
 - 支持MySQL和oracle存儲過程,out參數(shù)、多結(jié)果集返回
 - 支持zookeeper協(xié)調(diào)主從切換、zk序列、配置zk化
 - 支持庫內(nèi)分表
 - 集群基于ZooKeeper管理,在線升級,擴容,智能優(yōu)化,大數(shù)據(jù)處理(2.0開發(fā)版)。
 
1、這里是在mysql主從復制實現(xiàn)的基礎上,利用mycat做讀寫分離,架構(gòu)圖如下:

2、Demo
2.1 在mysql master上創(chuàng)建數(shù)據(jù)庫創(chuàng)建db1
2.2 在數(shù)據(jù)庫db1創(chuàng)建表student

同時,因為配置好了mysql主從復制,在mysql slave上也有一樣數(shù)據(jù)庫和表
2.3 編輯 mycat的配置文件server.xml
   <!--表示mycat的登錄用戶名-->
  <user name="test">
        <!--表示mycat的登錄密碼-->
        <property name="password">test</property>
         <!--表示mycat的邏輯數(shù)據(jù)庫名稱,可以自定義-->
        <property name="schemas">TESTDB</property>
    </user>
    <user name="user">
        <property name="password">user</property>
        <property name="schemas">TESTDB</property>
        <property name="readOnly">true</property>
    </user>
2.4編輯mycat的配置文件schema.xml
<!--TESTDB表示mycat的邏輯數(shù)據(jù)庫名稱
 當schema節(jié)點沒有子節(jié)點table的時候,一定要有dataNode屬性存在(指向mysql真實數(shù)據(jù)庫),
-->
<schema name="TESTDB" checkSQLschema="false" sqlMaxLimit="100" dataNode="dn1">
    </schema>
    <!--指定master的數(shù)據(jù)庫db1-->
    <dataNode name="dn1" dataHost="192.168.0.4" database="db1" />
    <!--指定mastet的ip -->
    <dataHost name="192.168.0.4" maxCon="1000" minCon="10" balance="3"
        writeType="0" dbType="mysql" dbDriver="native" switchType="1" slaveThreshold="100">
        <!--表示mysql的心跳狀態(tài)-->
        <heartbeat>select user()</heartbeat>
        <!-- master負責寫 -->
        <writeHost host="hostM1" url="192.168.0.4:3306" user="root"
            password="admin">
        <!--slave負責讀-->
        <readHost host="hostS2" url="192.168.0.5:3306" user="root" password="admin" />
        </writeHost>
</dataHost>
到這里,利用mycat做讀寫分離就已經(jīng)配置完了
注意 dataHost節(jié)點的下面三個屬性
balance, switchType, writeType
balance="0", 不開啟讀寫分離機制,所有讀操作都發(fā)送到當前可用的writeHost上。
balance="1",全部的readHost與stand by writeHost參與select語句的負載均衡,簡單的說,當雙主雙從模式(M1->S1,M2->S2,并且M1與M2互為主備),正常情況下,M2,S1,S2都參與select語句的負載均衡。
balance="2",所有讀操作都隨機的在writeHost、readhost上分發(fā)。
balance="3",所有讀請求隨機的分發(fā)到writeHost下的readhost執(zhí)行,writeHost不負擔讀壓力
writeType表示寫模式
writeType="0",所有的操作發(fā)送到配置的第一個writehost
writeType="1",隨機發(fā)送到配置的所有writehost
writeType="2",不執(zhí)行寫操作
switchType指的是切換的模式,目前的取值也有4種:
switchType=‘-1‘ 表示不自動切換
switchType=‘1‘ 默認值,表示自動切換
switchType=‘2‘ 基于MySQL主從同步的狀態(tài)決定是否切換,心跳語句為show slave status
switchType=‘3‘基于MySQL galary cluster的切換機制(適合集群)(1.4.1),心跳語句為show status like ‘wsrep%‘。
以上就是本文的全部內(nèi)容,希望對大家的學習有所幫助,也希望大家多多支持本站。
版權(quán)聲明:本站文章來源標注為YINGSOO的內(nèi)容版權(quán)均為本站所有,歡迎引用、轉(zhuǎn)載,請保持原文完整并注明來源及原文鏈接。禁止復制或仿造本網(wǎng)站,禁止在非maisonbaluchon.cn所屬的服務器上建立鏡像,否則將依法追究法律責任。本站部分內(nèi)容來源于網(wǎng)友推薦、互聯(lián)網(wǎng)收集整理而來,僅供學習參考,不代表本站立場,如有內(nèi)容涉嫌侵權(quán),請聯(lián)系alex-e#qq.com處理。
                    關(guān)注官方微信