日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

mycat 10 分钟轻松入门

發(fā)布時間:2025/3/20 编程问答 21 豆豆
生活随笔 收集整理的這篇文章主要介紹了 mycat 10 分钟轻松入门 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

??點擊上方?好好學(xué)java?,選擇?星標?公眾號

重磅資訊、干貨,第一時間送達 今日推薦:分享一個牛逼的 Java 開源后臺管理系統(tǒng),不要造輪子了!個人原創(chuàng)+1博客:點擊前往,查看更多 作者:sf4y 來源:https://segmentfault.com/a/1190000022237732

基本原理

mycat是一個把自己偽裝成mysql服務(wù)的中間件,推薦閱讀Mycat權(quán)威指南官方下載[:下載地址]:https://github.com/MyCATApache/Mycat-Server/blob/4135f25df8239d52d220529cbf7cb697ede40e12/mycat-definitive-guide.pdf

安裝

下載安裝包解壓即用 [點擊我下載]:http://dl.mycat.io/ ,下載對應(yīng)的版本:Mycat-server-1.6-RELEASE-20161028204710-linux.tar.gz,建議安裝在 usr/local/mycat,解壓到當(dāng)前目錄,目錄結(jié)構(gòu):

bin catlet conf lib logs version.txt

環(huán)境變量配置MYCAT_HOME,vim /etc/profile 添加 MYCAT_HOME=/usr/local/mycat

運行

linux:

./mycat start 啟動

./mycat stop 停止

./mycat console 前臺運行

./mycat restart 重啟服務(wù)

./mycat pause 暫停

./mycat status 查看啟動狀態(tài)

windows:

startup_nowrap.bat

基本配置:

啟動需要配置一些jvm 參數(shù),這個根據(jù)系統(tǒng)的需要來設(shè)置,打開conf/wrapper.conf文件,里面有一些我們平時常用的jvm參數(shù),一般只要調(diào)整Xmx、Xms、MaxDirectMemorySize 內(nèi)存大小就可以, JVM 參數(shù),必須設(shè)置- XX:MaxDirectMemorySize 和 -Xmx 例如:-Xmx1024m -Xmn512m -XX:MaxDirectMemorySize=2048m -Xss256K -XX:+UseParallelGC了, MaxDirectMemorySize 盡可能設(shè)置大些,可以加快結(jié)果集處理時間

# Java Additional Parameters wrapper.java.additional.1=-DMYCAT_HOME=. wrapper.java.additional.2=-server wrapper.java.additional.3=-XX:MaxPermSize=64M wrapper.java.additional.4=-XX:+AggressiveOpts wrapper.java.additional.5=-XX:MaxDirectMemorySize=2G wrapper.java.additional.6=-Dcom.sun.management.jmxremote wrapper.java.additional.7=-Dcom.sun.management.jmxremote.port=1984 wrapper.java.additional.8=-Dcom.sun.management.jmxremote.authenticate=false wrapper.java.additional.9=-Dcom.sun.management.jmxremote.ssl=false wrapper.java.additional.10=-Xmx1G wrapper.java.additional.11=-Xmn512M

規(guī)則配置

Mycat最重要的3大配置文件:

  • server.xml

主要有user 和 system 標簽。這個user標簽主要用于定義登錄 mycat的用戶和權(quán)限。例如上面的例子中,我定 義了一個用戶,用戶名為 mycat、密碼也為 mycat,可訪問的 schema 也只有 TESTDB 一個。如果我在 schema.xml 中定義了多個 schema,那么這個用戶是無法訪問其他的 schema。

<?xml version="1.0" encoding="UTF-8" standalone="no"?> <!DOCTYPE mycat:server SYSTEM "server.dtd"> <mycat:server xmlns:mycat="http://org.opencloudb/"> <user name="mycat"><property name="password">mycat</property><property name="schemas">TESTDB</property> </user></mycat:server>

同時訪問多個 schema 的話使用 , 隔開,例如:

<property name="schemas">TESTDB,db1,db2</property>

system 這個標簽內(nèi)嵌套的所有 property 標簽都與系統(tǒng)配置有關(guān),如果沒有特殊需求默認即可

<system> <property name="charset">utf8</property> <!--這個屬性主要用于指定系統(tǒng)可用的線程數(shù),默認值為機器 CPU 核心線程數(shù)。--> <property name="processors">1</property> <!--這個屬性主要用于指定 NIOProcessor 上共享的 businessExecutor 固定線程池大小。 mycat 在需要處理一 些異步邏輯的時候會把任務(wù)提交到這個線程池中。 新版本中這個連接池的使用頻率不是很大了,可以設(shè)置一個較 小的值。--> <property name="processorExecutor">32</property> <!--分布式事務(wù)開關(guān),0為不過濾分布式事務(wù),1為過濾分布式事務(wù) (如果分布式事務(wù)內(nèi)只涉及全局表,則不過濾),2為不過濾分布式事務(wù), 但是記錄分布式事務(wù)日志--> <property name="handleDistributedTransactions">0</property> ... </system>
  • schema.xml

    文件地址 mycat/conf/schema.xml,這個xml 是mycat配置的重頭戲,里面有幾個很關(guān)鍵的標簽 schema table dataNode dataHost 等等。首先配置schema 標簽:

    table : schema標簽中包含了table 屬性,mycat中table有2種類型,一種是全局廣播表,一種是分片表,如果沒有在這里面配置的表呢,schema 標簽有個 dataNode 屬性,沒有配置默認讀寫在這個庫里面, table中還有一個屬性 subTables,是指把一個表拆分成多個子表,例如下面表示有3個表 t_order1,t_order2,t_order3

subTables="t_order$1-2,t_order3"

目前分表 1.6 以后開始支持 并且 dataNode 在分表條件下只能配置一個,分表條件下不支持各種條件的 join 語句, 這種適合單個數(shù)據(jù)庫需要分表的情況。

dataNode : 標簽定義了 MyCat 中的數(shù)據(jù)節(jié)點,也就是我們通常說所的數(shù)據(jù)分片。一個 dataNode 標簽就是 一個獨立的數(shù)據(jù)分片

dataHost : 該標簽在 mycat 邏輯庫中也是作為最底層的標簽存在,直接定義了具 體的數(shù)據(jù)庫實例、讀寫分離配置和心跳語句。writeHost 標簽、readHost 標簽, writeHost 指 定寫實例、readHost 指定讀實例, 用來做讀寫分離。

<!-- 配置默認的name邏輯庫名稱,checkSQLschema屬性為false的時候,sql查詢是會帶上邏輯庫的名稱TESTDB.tableName,如果不想帶上邏輯庫名稱,設(shè)置為true,sqlMaxLimit表示分頁最大limit,dataNode表示沒有分片的表默認使用這個庫--><schema name="TESTDB" checkSQLschema="false" sqlMaxLimit="100" dataNode="dn1"><!-- mycat中table有2種類型,一種是全局廣播表,一種是分片表,type="global" 表示全局表,會同步到所有的庫,一般是用于數(shù)據(jù)字典表,方便join 操作,分片表只type不用指定,默認就是分片,需要配置分片規(guī)則, primaryKey對應(yīng)邏輯表對應(yīng)真實表的主鍵,例如:分片的規(guī)則是使用非主鍵進行分片的,那么在使用主鍵查詢的時候,就會發(fā)送查詢語句到所有配置的 DN 上,如果使用該屬性配置真實表的主鍵。那么 MyCat 會緩存主鍵與具體 DN 的 信息,那么再次使用非主鍵進行查詢的時候就不會進行廣播式的查詢,--><table name="travelrecord" dataNode="dn1,dn2" rule="auto-sharding-long" /><table name="goods" primaryKey="ID" type="global" dataNode="dn1,dn2" /><!-- 設(shè)置dataNode 對應(yīng)的數(shù)據(jù)庫,及 mycat 連接的地址dataHost 對應(yīng)dataHost 標簽上定義的 name 屬性,使用名字為 dh01 數(shù)據(jù)庫實例上的 db1 物理數(shù)據(jù)庫 --><dataNode name="dn01" dataHost="dh01" database="db01" /><dataNode name="dn02" dataHost="dh02" database="db02" /><!-- balance為0 不開啟讀寫分離機制,writeType="0"所有寫操作發(fā)送到配置的第一個 writeHost,switchType=1 默認值,自動切換 --><dataHost name="dh01" writeType="0" switchType="1" balance="0" dbType="mysql" maxCon="1000" minCon="10" dbDriver="native"><heartbeat>select user()</heartbeat><writeHost host="hostM1" url="127.0.0.1:3306" user="root" password="root" ><!-- 配置讀寫分離, can have multi read hosts --><readHost host="hostS1" url="192.168.1.200:3306" user="root" password="123456" /></writeHost></dataHost><!-- 如果是用多臺數(shù)據(jù)庫實例,需要配置多個dataHost,如果只是單實例多個數(shù)據(jù)庫,只要配置一個就可以了 --><dataHost name="dh02" writeType="0" switchType="1" balance="0" dbType="mysql" maxCon="1000" minCon="10" dbDriver="native"><heartbeat>select user()</heartbeat><writeHost host="hostM2" url="192.168.11.123:3306" user="root" password="root" ></writeHost></dataHost></schema>
  • rule.xml

/usr/local/mycat/conf/rule.xml

這個標簽定義表規(guī)則,這個文件里面主要有 tableRule 和 function 這兩個標簽。tableRule標簽中的 name 對應(yīng)上面table標簽中的rule 屬性,columns 內(nèi)指定要拆分的列名字。algorithm 使用 function 標簽中的 name 屬性。

<tableRule name="rule1"> <rule> <columns>id</columns> <algorithm>func1</algorithm> </rule> </tableRule>

name 指定算法的名字。class 制定路由算法具體的類名字。

<function name="hash-int" class="io.mycat.route.function.PartitionByFileMap"><property name="mapFile">partition-hash-int.txt</property> </function>

Mycat 常用的分片規(guī)則

這個是本次分庫分表的核心所在,直接影響到后續(xù)的sql執(zhí)行效率,所以在分片規(guī)則的選擇上,需要對表有比較清楚的認識

1. 分片枚舉

通過在配置文件中配置可能的枚舉 id,自己配置分片,本規(guī)則適用于特定的場景,比如有些業(yè)務(wù)需要按照省 份或區(qū)縣來做保存,而全國省份區(qū)縣固定的,這類業(yè)務(wù)使用本條規(guī)則

<tableRule name="sharding-by-intfile"> <rule> <columns>user_id</columns> <algorithm>hash-int</algorithm> </rule> </tableRule> <function name="hash-int" class="io.mycat.route.function.PartitionByFileMap"> <property name="mapFile">partition-hash-int.txt</property> <property name="type">0</property> <property name="defaultNode">0</property> </function> partition-hash-int.txt 配置: 10000=0 10010=1 DEFAULT_NODE=1

其中分片函數(shù)配置中,mapFile 標識配置文件名稱,type 默認值為 0,0 表示 Integer,非零表示 String, 所有的節(jié)點配置都是從 0 開始,及 0 代表節(jié)點 1 /**

  • defaultNode 默認節(jié)點:小于 0 表示不設(shè)置默認節(jié)點,大于等于 0 表示設(shè)置默認節(jié)點 * 默認節(jié)點的作用:枚舉分片時,如果碰到不識別的枚舉值,就讓它路由到默認節(jié)點

  • 如果不配置默認節(jié)點(defaultNode 值小于 0 表示不配置默認節(jié)點),碰到

  • 不識別的枚舉值就會報錯,

  • like this:can’t find datanode for sharding column:column_nameval:ffffffff */

2. 固定分片 hash 算法

本條規(guī)則類似于十進制的求模運算,區(qū)別在于是二進制的操作,是取 id 的二進制低 10 位,即 id 二進制 &1111111111。此算法的優(yōu)點在于如果按照 10 進制取模運算,在連續(xù)插入 1-10 時候 1-10 會被分到 1-10 個分片,增 大了插入的事務(wù)控制難度,而此算法根據(jù)二進制則可能會分到連續(xù)的分片,減少插入事務(wù)事務(wù)控制難度。

<tableRule name="rule1"> <rule> <columns>user_id</columns> <algorithm>func1</algorithm> </rule> </tableRule> <function name="func1" class="io.mycat.route.function.PartitionByLong"> <!-- dataNote 個數(shù),這邊表示3個--> <property name="partitionCount">2,1</property> <property name="partitionLength">256,512</property> </function>

分區(qū)長度:默認為最大 2^n=1024 ,即最大支持 1024 分區(qū) 約束: count,length 兩個數(shù)組的長度必須是一致的。1024 = sum((count[i]*length[i])). count 和 length 兩個向量的點積恒等于 1024 ,例如: 2*256 + 1*512 = 1024。

例如:以上分為二個分區(qū):0-512,512-1023

1023的二進制&1111111111運算后為1023,故落入第二個分區(qū)

1024的二進制&1111111111運算后為0,故落入第一個分區(qū)

0266 的二進制&1111111111運算后為266,故落入第一個分區(qū)內(nèi)

如果只需要平局分配,配置如下

<!--平均分為 4 分片,partitionCount*partitionLength=1024 --> <function name="func1" class="io.mycat.route.function.PartitionByLong"> <property name="partitionCount">4</property> <property name="partitionLength">256</property> </function>
3. 范圍約定

此分片適用于,提前規(guī)劃好分片字段某個范圍屬于哪個分片

<tableRule name="auto-sharding-long"> <rule> <columns>user_id</columns> <algorithm>rang-long</algorithm> </rule> </tableRule> <function name="rang-long" class="io.mycat.route.function.AutoPartitionByLong"> <property name="mapFile">autopartition-long.txt</property> <property name="defaultNode">0</property> </function>

rang-long 函數(shù)中 mapFile 代表配置文件路徑 defaultNode 超過范圍后的默認節(jié)點。所有的節(jié)點配置都是從 0 開始,及 0 代表節(jié)點 1,此配置非常簡單,即預(yù)先制定可能的 id 范圍到某個分片

0-500M=0 500M-1000M=1 1000M-1500M=2 或 0-10000000=0 10000001-20000000=1
4. 取 模

此種配置非常明確即根據(jù) id 進行十進制求模預(yù)算,相比固定分片 hash,此種在批量插入時可能存在批量插入單 事務(wù)插入多數(shù)據(jù)分片,增大事務(wù)一致性難度。

<tableRule name="mod-long"> <rule> <columns>user_id</columns> <algorithm>mod-long</algorithm> </rule> </tableRule> <function name="mod-long" class="io.mycat.route.function.PartitionByMod"> <!-- how many data nodes --> <property name="count">2</property> </function>
  • 按日期(天)分片

  • 按天分片

    <tableRule name="sharding-by-date"> <rule> <columns>create_time</columns> <algorithm>sharding-by-date</algorithm> </rule> </tableRule> <function name="sharding-by-date" class="io.mycat.route.function.PartitionByDate"> <property name="dateFormat">yyyy-MM-dd</property> <property name="sBeginDate">2014-01-01</property> <property name="sEndDate">2014-01-02</property> <property name="sPartionDay">10</property> </function>

    配置說明: dateFormat :日期格式

    sBeginDate :開始日期

    sEndDate:結(jié)束日期

    sPartionDay :分區(qū)天數(shù),即默認從開始日期算起,分隔 10 天一個分區(qū) 如果配置了 sEndDate 則代表數(shù)據(jù)達到了這個日期的分片后后循環(huán)從開始分片插入

  • 取模范圍約束

  • 截取數(shù)字做 hash 求模范圍約束

  • 應(yīng)用指定

  • 截取數(shù)字 hash 解析

  • 一致性 hash

  • 按單月小時拆分

  • ....

    日志排查

    設(shè)置 conf/log4j2.xml,設(shè)置mycat 日志地址

    <RollingFile name="RollingFile" fileName="${sys:MYCAT_HOME}/logs/mycat.log"filePattern="${sys:MYCAT_HOME}/logs/${date:yyyy-MM}/mycat-%d{MM-dd}-%i.log.gz">

    后面可以在logs 中查看mycat.log 文件

    《新程序員》:云原生和全面數(shù)字化實踐50位技術(shù)專家共同創(chuàng)作,文字、視頻、音頻交互閱讀

    總結(jié)

    以上是生活随笔為你收集整理的mycat 10 分钟轻松入门的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。

    主站蜘蛛池模板: 国产一区第一页 | 久色免费视频 | 色男人在线| 嫩草影院永久入口 | 国产精品一区二区三区四区在线观看 | 久久久久久毛片 | 冲田杏梨一区二区三区 | 日韩精品色哟哟 | 黄色性生活一级片 | 国产97在线观看 | 超级变态重口av番号 | 亚洲伦理网 | 成人黄色小说视频 | 麻豆精品国产 | 日本久久影视 | 色婷婷精品 | 国产精品日日夜夜 | 涩涩视频在线看 | 成人中文字幕+乱码+中文字幕 | 成年免费在线观看 | 国产视频a | 黄在线免费 | 九九热最新网址 | 国产二级一片内射视频播放 | 亚洲精品美女在线观看 | 人妖和人妖互交性xxxx视频 | 亚洲精品乱码久久久久久蜜桃麻豆 | 国产视频一二三 | 久草蜜桃 | 国产亚洲欧美在线精品 | 2018狠狠干| a中文在线 | 特级少妇| 欧美日韩123 | 欧美小视频在线 | 奶水喷溅虐奶乳奴h文 | 逼逼爱插插网站 | 日韩国产欧美精品 | 成人免费看类便视频 | 久久久久亚洲av成人毛片韩 | 天天射天天干天天操 | 四虎在线观看视频 | 久久久香蕉 | 成熟人妻av无码专区 | 日韩人妻一区二区三区 | 国产成人一区在线观看 | 国产女人呻吟高潮抽搐声 | 国模av | 中文字幕在线视频一区二区三区 | 美国一级特黄 | 国产成人一级 | av资源在线免费观看 | 好吊妞视频一区二区三区 | 男生和女生一起差差差很痛的视频 | 伊人久久成人 | 男女午夜爽爽爽 | 综合色爱 | 97色吧| 国产成人麻豆免费观看 | 国产亚洲精品成人 | 一区二区视频免费在线观看 | 国产精品99在线观看 | 国产精品三区四区 | 九九自拍 | 久久精品国产电影 | 国产强被迫伦姧在线观看无码 | 国产精品久久久久av | 国产农村妇女毛片精品久久麻豆 | 国产视频污 | 一级片免费视频 | 啊灬啊灬啊灬秀婷 | 九九少妇 | 玖玖免费| 第四色视频 | 丰满放荡岳乱妇91ww | 国产一区二区av在线 | 国产熟女一区二区丰满 | 青青青在线观看视频 | 小镇姑娘1979版| 中文字幕第8页 | 操三八男人的天堂 | 日本不卡在线视频 | 成人毛片一区二区三区 | 亚洲午夜伦理 | 在线看国产精品 | 精品人妻少妇嫩草av无码专区 | 岛国精品一区二区三区 | 欧美精品一级二级 | 四虎影视免费看 | 美女试爆场恐怖电影在线观看 | 成人性生交大片免费看r链接 | 国产美女裸体无遮挡免费视频 | 香港三级日本三级韩国三级 | 极品少妇xxxx精品少妇偷拍 | 成片免费观看视频大全 | 玖玖爱资源站 | 日韩中文字幕亚洲 | 国产人人插 | 日本高清免费看 |