Windows環境Mycat數據庫分庫分表中間件部署


下載地址MYCAT官方網站

jdk安裝配置

  1. 首先去oracle官網下載並安裝jdk8,添加環境變量,JAVA_HOME設置為D:\Worksoftware\Java\jdk1.8
  2. CLASSPATH設置為.;%JAVA_HOME%\lib;%JAVA_HOME%\lib\tools.jar
  3. path系統變量追加%JAVA_HOME%\bin;

Mycat安裝配置

  1. 首先添加Windows環境變量,MYCAT_HOME設置為安裝目錄E:\WorkSoftWare\MycatServer1.5

  2. 為了降低資源占用,mycat的jvm設置在startup_nowrap.bat,打開后可以清楚看到如下配置:
    “%JAVA_CMD%” -server -Xms1G -Xmx2G -XX:MaxPermSize=64M -XX:+AggressiveOpts -XX:MaxDirectMemorySize=1G -DMYCAT_HOME=%MYCAT_HOME% -cp “..\conf;..\lib*” io.mycat.MycatStartup
    這里將-Xms1G改成-Xms512M,-Xmx2G改成-Xmx1024M,保存后重新啟動即可.

  3. wrapper.conf文件里的改成wrapper.java.command=E:\WorkSoftWare\jdk1.8\bin\java.exe

Mycat啟動的配置

schema.xml配置文件,如果分庫在不同的服務器,可以配置兩個datahost;如果在一個datahost中配置多個writeHost,則為主從配置。type=”global”時,為全局表

 1 <?xml version="1.0"?>
 2 <!DOCTYPE mycat:schema SYSTEM "schema.dtd">
 3 <mycat:schema xmlns:mycat="http://org.opencloudb/" >
 4 
 5 <!--在這一行參數里面,schema name定義了可以在MyCAT前端顯示的邏輯數據庫的名字,checkSQLschema這個參數為False的時候,表明MyCAT會自動忽略掉表名前的數據庫名,比如說mydatabase1.test1,會被當做test1;sqlMaxLimit指定了SQL語句返回的行數限制-->
 6     <schema name="TESTDB" checkSQLschema="false" sqlMaxLimit="100">
 7         <!-- 主鍵范圍規則 -->
 8         <!-- 這一行代表在MyCAT前端會顯示哪些表名,類似幾行都代表一樣的意思,這里強調的是表,而MyCAT並不會在配置文件里面定義表結構,如果在前端使用show create table ,MyCAT會顯示正常的表結構信息,觀察Debug日志,可以看到,MyCAT把命令分發給了dn1代表的數據庫,然后把dn1的查詢結果返回給了前端 可以判斷,類似的數據庫級別的一些查詢指令,有可能是單獨分發給某個節點,然后再把某個節點的信息返回給前端。
 9         dataNode的意義很簡單,這個邏輯表的數據存儲在后端的哪幾個數據庫里面rule代表的是這個邏輯表students的具體切分策略,目前MyCAT只支持按照某一個特殊列,遵循一些特殊的規則來切分,如取模,枚舉等,具體的留給之后細說                  
10             --> 
11         <table name="travelrecord" dataNode="dn1,dn2,dn3" rule="auto-sharding-long" />
12 
13         <table name="company" primaryKey="ID" dataNode="dn3,dn2,dn1" rule="mod-long"/>
14         <table name="goods" primaryKey="ID" type="global" dataNode="dn1,dn2" />
15         <!--求模分片隨機規則 -->
16         <table name="hotnews" primaryKey="ID" dataNode="dn1,dn2,dn3"
17             rule="mod-long" />
18 
19         <table name="employee" primaryKey="ID" dataNode="dn1,dn2"
20             rule="sharding-by-intfile" />
21         <table name="customer" primaryKey="ID" dataNode="dn1,dn2"
22             rule="sharding-by-intfile">
23              <!-- 
24                 childtable我在測試中並沒有實際用起來不過在MyCAT的設計文檔里面有提到,childtable是一種依賴於父表的結構,
25                 這意味着,childtable的joinkey會按照父表的parentKey的策略一起切分,當父表與子表進行連接,
26                 且連接條件是childtable.joinKey=parenttable.parentKey時,不會進行跨庫的連接.
27                 --> 
28             <childTable name="orders" primaryKey="ID" joinKey="customer_id"
29                 parentKey="id">
30                 <childTable name="order_items" joinKey="order_id"
31                     parentKey="id" />
32             </childTable>
33             <childTable name="customer_addr" primaryKey="ID" joinKey="customer_id"
34                 parentKey="id" />
35         </table>
36 
37         <!-- 全局表是自動克隆到所有定義的數據節點,這樣可以與拆分節點的任何表連接查詢,是在同一個數據節點-->
38         <table name="news_table" primaryKey="ID" type="global" dataNode="dn1,dn2,dn3" />
39     </schema>
40 
41     <dataNode name="dn1" dataHost="localhost1" database="mycatDB1" />
42     <dataNode name="dn2" dataHost="localhost1" database="mycatDB2" />
43     <dataNode name="dn3" dataHost="localhost1" database="mycatDB3" />
44 
45     <!--
46           dataHost配置的是實際的后端數據庫集群,大部分參數簡單易懂,這里就不一個個介紹了,只介紹比較重要的兩個參數,writeType和balance.
47          --> 
48         <!-- writeType和balance是用來控制后端集群的讀寫分離的關鍵參數,這里我用了雙主雙從的集群配置
49             這里的測試過程比較麻煩,所以直接貼結論:
50            1.balance=0時,讀操作都在localhost上(localhost失敗時,后端直接失敗)
51            2.balance=1時,讀操作會隨機分散在localhost1和兩個readhost上面(localhost失敗時,寫操作會在localhost1,如果localhost1再失敗,則無法進行寫操作)
52            3.balance=2時,寫操作會在localhost上,讀操作會隨機分散在localhost1,localhost1和兩個readhost上面(同上)
53            4.writeType=0時,寫操作會在localhost上,如果localhost失敗,會自動切換到localhost1,localhost恢復以后並不會切換回localhost進行寫操作
54            5.writeType=1時,寫操作會隨機分布在localhost和localhost1上,單點失敗並不會影響集群的寫操作,但是后端的從庫會無法從掛掉的主庫獲取更新,會在讀數據的時候出現數據不一致
55            舉例:localhost失敗了,寫操作會在localhost1上面進行,localhost1的主從正常運行,但是localhost的從庫無法從localhost獲取更新,localhost的從庫於其他庫出現數據不一致
56          --> 
57     <dataHost name="localhost1" maxCon="1000" minCon="10" balance="0"
58         writeType="0" dbType="mysql" dbDriver="native" switchType="1"  slaveThreshold="100">
59         <heartbeat>select user()</heartbeat>
60         <!-- can have multi write hosts -->
61         <writeHost host="hostM1" url="localhost:3306" user="root"
62             password="123456">
63             <!-- can have multi read hosts -->
64             <!--<readHost host="hostS2" url="192.168.1.200:3306" user="root" password="xxx" />-->
65         </writeHost>
66     </dataHost>
67 
68 </mycat:schema>

 


server.xml配置文件

 1 <?xml version="1.0" encoding="UTF-8"?>
 2 <!-- - - Licensed under the Apache License, Version 2.0 (the "License"); 
 3     - you may not use this file except in compliance with the License. - You 
 4     may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 
 5     - - Unless required by applicable law or agreed to in writing, software - 
 6     distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT 
 7     WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the 
 8     License for the specific language governing permissions and - limitations 
 9     under the License. -->
10 <!DOCTYPE mycat:server SYSTEM "server.dtd">
11 <mycat:server xmlns:mycat="http://org.opencloudb/">
12     <system>
13     <property name="defaultSqlParser">druidparser</property>
14       <!--  <property name="useCompression">1</property>--> <!--1為開啟mysql壓縮協議-->
15     <!-- <property name="processorBufferChunk">40960</property> -->
16     <!-- 
17     <property name="processors">1</property> 
18     <property name="processorExecutor">32</property> 
19      -->
20         <!--默認是65535 64K 用於sql解析時最大文本長度 -->
21         <!--<property name="maxStringLiteralLength">65535</property>-->
22         <!--<property name="sequnceHandlerType">0</property>-->
23         <!--<property name="backSocketNoDelay">1</property>-->
24         <!--<property name="frontSocketNoDelay">1</property>-->
25         <!--<property name="processorExecutor">16</property>-->
26         <!-- 
27             <property name="mutiNodeLimitType">1</property> 0:開啟小數量級(默認) ;1:開啟億級數據排序
28             <property name="mutiNodePatchSize">100</property> 億級數量排序批量
29             <property name="processors">32</property> <property name="processorExecutor">32</property> 
30             <property name="serverPort">8066</property> <property name="managerPort">9066</property> 
31             <property name="idleTimeout">300000</property> <property name="bindIp">0.0.0.0</property> 
32             <property name="frontWriteQueueSize">4096</property> <property name="processors">32</property> -->
33     </system>
34     <user name="test"><!--用戶名-->
35         <property name="password">test</property><!--密碼-->
36          <!--實例名,和schema.xml定義的schema對應,這里的實例名是虛擬名,也就是對mycat服務的一種別名,是應用程序以及客戶端連接的入口。-->
37         <property name="schemas">TESTDB</property>
38     </user>
39 
40     <user name="user">
41         <property name="password">user</property>
42         <property name="schemas">TESTDB</property>
43         <property name="readOnly">true</property>
44     </user>
45     <!-- 
46     <quarantine> 
47        <whitehost>
48           <host host="127.0.0.1" user="mycat"/>
49           <host host="127.0.0.2" user="mycat"/>
50        </whitehost>
51        <blacklist check="false"></blacklist>
52     </quarantine>
53     -->
54 
55 </mycat:server>

 


rule.xml配置文件

  1 <?xml version="1.0" encoding="UTF-8"?>
  2 <!-- - - Licensed under the Apache License, Version 2.0 (the "License"); 
  3     - you may not use this file except in compliance with the License. - You 
  4     may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 
  5     - - Unless required by applicable law or agreed to in writing, software - 
  6     distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT 
  7     WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the 
  8     License for the specific language governing permissions and - limitations 
  9     under the License. -->
 10 <!DOCTYPE mycat:rule SYSTEM "rule.dtd">
 11 <mycat:rule xmlns:mycat="http://org.opencloudb/">
 12     <tableRule name="rule1">
 13         <rule>
 14             <columns>id</columns>
 15             <algorithm>func1</algorithm>
 16         </rule>
 17     </tableRule>
 18 
 19     <tableRule name="rule2">
 20         <rule>
 21             <columns>user_id</columns>
 22             <algorithm>func1</algorithm>
 23         </rule>
 24     </tableRule>
 25 
 26     <tableRule name="sharding-by-intfile">
 27         <rule>
 28             <columns>sharding_id</columns>
 29             <algorithm>hash-int</algorithm>
 30         </rule>
 31     </tableRule>
 32     <tableRule name="auto-sharding-long">
 33         <rule>
 34             <columns>id</columns>
 35             <algorithm>rang-long</algorithm>
 36         </rule>
 37     </tableRule>
 38     <tableRule name="mod-long">
 39         <rule>
 40             <columns>id</columns>
 41             <algorithm>mod-long</algorithm>
 42         </rule>
 43     </tableRule>
 44     <tableRule name="sharding-by-murmur">
 45         <rule>
 46             <columns>id</columns>
 47             <algorithm>murmur</algorithm>
 48         </rule>
 49     </tableRule>
 50     <tableRule name="sharding-by-month">
 51         <rule>
 52             <columns>create_date</columns>
 53             <algorithm>partbymonth</algorithm>
 54         </rule>
 55     </tableRule>
 56     <tableRule name="latest-month-calldate">
 57         <rule>
 58             <columns>calldate</columns>
 59             <algorithm>latestMonth</algorithm>
 60         </rule>
 61     </tableRule>
 62 
 63     <tableRule name="auto-sharding-rang-mod">
 64         <rule>
 65             <columns>id</columns>
 66             <algorithm>rang-mod</algorithm>
 67         </rule>
 68     </tableRule>
 69 
 70     <tableRule name="jch">
 71         <rule>
 72             <columns>id</columns>
 73             <algorithm>jump-consistent-hash</algorithm>
 74         </rule>
 75     </tableRule>
 76 
 77     <function name="murmur"
 78         class="org.opencloudb.route.function.PartitionByMurmurHash">
 79         <property name="seed">0</property><!-- 默認是0 -->
 80         <property name="count">2</property><!-- 要分片的數據庫節點數量,必須指定,否則沒法分片 -->
 81         <property name="virtualBucketTimes">160</property><!-- 一個實際的數據庫節點被映射為這么多虛擬節點,默認是160倍,也就是虛擬節點數是物理節點數的160倍 -->
 82         <!-- <property name="weightMapFile">weightMapFile</property> 節點的權重,沒有指定權重的節點默認是1。以properties文件的格式填寫,以從0開始到count-1的整數值也就是節點索引為key,以節點權重值為值。所有權重值必須是正整數,否則以1代替 -->
 83         <!-- <property name="bucketMapPath">/etc/mycat/bucketMapPath</property> 
 84             用於測試時觀察各物理節點與虛擬節點的分布情況,如果指定了這個屬性,會把虛擬節點的murmur hash值與物理節點的映射按行輸出到這個文件,沒有默認值,如果不指定,就不會輸出任何東西 -->
 85     </function>
 86     <function name="hash-int"
 87         class="org.opencloudb.route.function.PartitionByFileMap">
 88         <property name="mapFile">partition-hash-int.txt</property>
 89     </function>
 90     <function name="rang-long"
 91         class="org.opencloudb.route.function.AutoPartitionByLong">
 92         <property name="mapFile">autopartition-long.txt</property>
 93     </function>
 94     <function name="mod-long" class="org.opencloudb.route.function.PartitionByMod">
 95         <!-- how many data nodes -->
 96         <property name="count">3</property>
 97     </function>
 98 
 99     <function name="func1" class="org.opencloudb.route.function.PartitionByLong">
100         <property name="partitionCount">8</property>
101         <property name="partitionLength">128</property>
102     </function>
103     <function name="latestMonth"
104         class="org.opencloudb.route.function.LatestMonthPartion">
105         <property name="splitOneDay">24</property>
106     </function>
107     <function name="partbymonth"
108         class="org.opencloudb.route.function.PartitionByMonth">
109         <property name="dateFormat">yyyy-MM-dd</property>
110         <property name="sBeginDate">2015-01-01</property>
111     </function>
112 
113     <function name="rang-mod" class="org.opencloudb.route.function.PartitionByRangeMod">
114             <property name="mapFile">partition-range-mod.txt</property>
115     </function>
116 
117     <function name="jump-consistent-hash" class="org.opencloudb.route.function.PartitionByJumpConsistentHash">
118         <property name="totalBuckets">3</property>
119     </function>
120 </mycat:rule>

 

Mycat連接mysql示例

cmd命令運行:
這里寫圖片描述
結果:
這里寫圖片描述

Mycat連接mysql結果

這里寫圖片描述
這里寫圖片描述
上圖上面的mycatdb1,mycatdb2,mycatdb3數據庫是真實物理數據庫,TESTDB是中間件邏輯數據庫,此時已經所有工作都准備好。

閑的蛋疼,隨便研究一些好東西,.net環境太封閉,每個.net程序員都要擴展視野,技術交流,本人QQ827937686


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM