mycat實現的mysql的讀寫分離,mycatmysql讀寫

來源:互聯網
上載者:User

mycat實現的mysql的讀寫分離,mycatmysql讀寫
  mycat是一個是個中介軟體,可以用作進行mysql的讀寫分離、資料分區以及分表分庫、容災備份,而且可以用於多租戶應用開發、雲平台基礎設施,讓架構具有很強的靈活性和擴充性,
  mycat的智能最佳化模組,系統的資料訪問一目瞭然,可以根據統計的資料分析,自動或手動調整後端儲存,將不同的表映射到不通的儲存引擎上。
  Mycat是一個開源的分散式資料庫系統,但是由於真正的資料庫需要儲存引擎,而Mycat並沒有儲存引擎,所以並不是完全意義的分散式資料庫系統。

mycat應用情境:
1. 單純的讀寫分離,支援讀寫分離,主從切換;
2. 分表分庫,對於超過1000萬的表進行分區,最大支援1000億的單表分區;
3. 多租戶應用,每個應用一個庫,但應用程式只串連Mycat,從而不改造程式本身,實現多租戶化;
4. 報表系統,藉助於Mycat的分表能力,處理大規模報表的統計;
5. 替代Hbase,分析大資料;
6. 作為海量資料即時查詢的一種簡單有效方案,比如100億條頻繁查詢的記錄需要在3秒內查詢出來結果,除了基於主鍵的查詢,還可能存在範圍查詢或其他屬性查詢,
此時Mycat可能是最簡單有效選擇。

mycat的讀寫分離建立在mysql主從複製已經做好的情況之下。

安裝mycat:
1. 首先需要配置java環境。
wget http://dl.mycat.io/1.6-RELEASE/Mycat-server-1.6-RELEASE-20161028204710-linux.tar.gz
tar zxf Mycat-server-1.6-RELEASE-20161028204710-linux.tar.gz

mv mycat /usr/local/

vim /etc/profile
export PATH=/usr/local/mycat/bin:$PATH

2. 建立mycat的系統管理使用者,授權訪問MyCAT的使用者帳號和授權資訊,在修改server.xml
主庫上:grant all privileges on *.* to 'mycat'@'192.168.3.111' identified by '123456';
        grant all privileges on *.* to 'mycat'@'%' identified by '123456';
從庫上(只需要select許可權即可):grant select on *.* to 'mycat'@'192.168.2.235' identified by '123456';

3. 修改mycat設定檔server.xml
 在</system>段配置主庫的使用者密碼:  
     <user name="mycat">
            <property name="password">123456</property>
            <property name="schemas">test3</property>
     </user>
在server.xml配置串連主庫的使用者,這塊的使用者需要有增刪改查許可權。這裡的test3,不需要是真實的庫名,可任意指定。
但是需要跟schema.xml設定檔的庫名統一即可。

4. 修改schema.xml檔案: 
 <schema name="test3" checkSQLschema="false" sqlMaxLimit="100" dataNode="dn1">
 </schema>      <!-- 這裡的test3必須要和server.xml裡面的庫名相同-->

 <dataNode name="dn1" dataHost="localhost1" database="test2" />   <!--這裡只需要修改database為真的資料庫名字即可-->
 <dataNode name="dn2" dataHost="localhost1" database="test2" />
 <dataNode name="dn3" dataHost="localhost1" database="test2" />

 <dataHost name="localhost1" maxCon="1000" minCon="10" balance="1"
 writeType="0" dbType="mysql" dbDriver="native" switchType="1"  slaveThreshold="100">
  <!-- 修改 balance=”1″ writeType=”0″ switchType=”1″
   balance=0 不開啟讀寫分離機制,所有讀操作都發送到當前可用的writehostle .
   balance=1 全部的readhost與stand by writeHost 參與select語句的負載平衡。簡單的說,雙主雙從模式(M1àS1,M2àS2,並且M1和M2互為主備),正常情況下,M1,S1,S2都參與select語句的複雜均衡。
   balance=2 所有讀操作都隨機的在readhost和writehost上分發
   
   writeType負載平衡類型,目前的取值有3種:
   writeType=”0″, 所有寫操作發送到配置的第一個writeHost。
   writeType=”1″,所有寫操作都隨機的發送到配置的writeHost。

   writeType=”2″,不執行寫操作   

   switchType
   switchType=-1 表示不自動切換
   switchType=1 預設值,自動切換
   switchType=2 基於MySQL 主從同步的狀態決定是否切換
   -->
 <heartbeat>select user()</heartbeat>
 <!-- can have multi write hosts -->
 <writeHost host="master" url="192.168.3.111:3306" user="mycat" password="123456">
 <!-- can have multi read hosts -->
 <readHost host="slave" url="192.168.2.235:3306" user="mycat" password="123456" />
 </writeHost>
 </dataHost>
 
5. 啟動mycat
 mycat console (控制台啟動) 或者 mycat start
1)控制台啟動出現:jvm 1    | MyCAT Server startup successfully. see logs in logs/mycat.log  即ok。
2)start啟動查看8066和9066連接埠是否監聽。 

報錯:
Exception thrown by the agent : java.net.MalformedURLException: Local host name unknown: java.net.UnknownHo
stException: bogon: bogon: Name or service not known
解決:在/etc/hosts裡面添加原生主機名稱。
--------------------------------------------------------------------------------------------------------------------------------------------------
schema.xml檔案的部分詳解
<?xml version="1.0"?>
<!DOCTYPE mycat:schema SYSTEM "schema.dtd">
<mycat:schema xmlns:mycat="http://org.opencloudb/" >
    <schema name="TESTDB" checkSQLschema="false" sqlMaxLimit="100">
        <!-- 需要分區的表,在節點dn1,dn2上分區,分區規則是auto-sharding-long -->
        <table name="travelrecord" dataNode="dn1,dn2" rule="auto-sharding-long" />
        <table name="company" primaryKey="ID" dataNode="dn2,dn1" rule="mod-long"/>
        <table name="goods" primaryKey="ID" type="global" dataNode="dn1,dn2" />
        <table name="hotnews" primaryKey="ID" dataNode="dn1,dn2" rule="mod-long" />
        <table name="employee" primaryKey="ID" dataNode="dn1,dn2" rule="sharding-by-intfile" />
        <table name="customer" primaryKey="ID" dataNode="dn1,dn2" rule="sharding-by-intfile">
            <childTable name="orders" primaryKey="ID" joinKey="customer_id" parentKey="id">
                <childTable name="order_items" joinKey="order_id" parentKey="id" />
            </childTable>
            <childTable name="customer_addr" primaryKey="ID" joinKey="customer_id" parentKey="id" />
        </table>
    </schema>
    <dataNode name="dn1" dataHost="201.liberalman.cn" database="db1" />
    <dataNode name="dn2" dataHost="202.liberalman.cn" database="db2" />
    <dataHost name="201.liberalman.cn" maxCon="1000" minCon="10" balance="0"
        writeType="0" dbType="mysql" dbDriver="native" switchType="1"  slaveThreshold="100">
        <!-- 心跳包 -->
        <heartbeat>select user()</heartbeat>
        <!-- 後端mysql配置 -->
        <writeHost host="hostM1" url="localhost:3306" user="socho" password="Looks137"></writeHost>
    </dataHost>
    <dataHost name="202.liberalman.cn" maxCon="1000" minCon="10" balance="0"
        writeType="0" dbType="mysql" dbDriver="native" switchType="1"  slaveThreshold="100">
        <!-- 心跳包 -->
        <heartbeat>select user()</heartbeat>
        <writeHost host="hostM1" url="localhost:3306" user="socho" password="Looks137"></writeHost>
    </dataHost>
</mycat:schema>
上面配置的是串連後端mysql的配置, 著作權聲明:本文為博主原創文章,未經博主允許不得轉載。 http://blog.csdn.net/Linux_newbie_rookie/article/details/79310857

相關文章

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.