日韩黑丝制服一区视频播放|日韩欧美人妻丝袜视频在线观看|九九影院一级蜜桃|亚洲中文在线导航|青草草视频在线观看|婷婷五月色伊人网站|日本一区二区在线|国产AV一二三四区毛片|正在播放久草视频|亚洲色图精品一区

分享

Mycat 配置

 陳永正的圖書館 2017-04-13

前言

Mycat 是一個數(shù)據(jù)庫分庫分表中間件

MyCAT 是作為通用代理設(shè)計的,后端是以 Mysql協(xié)議 和 JDBC 的方式連接數(shù)據(jù)庫,可以支持 Oracle、DB2、SQL Server 、 mongodb、mysql

這里簡單分享一下 Mycat 中的概念及配置的相關(guān)基礎(chǔ) ,詳細(xì)內(nèi)容可以參考 官方文檔 、 Mycat-Server 和 Get Start

Tip: 當(dāng)前的最新版本為 Mycat server 1.5 GA


概要


概念

數(shù)據(jù)庫中間件

Mycat 其實只是一個數(shù)據(jù)中間件,或數(shù)據(jù)庫代理

Tip: 所有難搞定的事情都可以通過中間件有效處理,中間件能有效解耦并專注于特定領(lǐng)域問題,LVM、LVS、MQ 都是這個思路(房屋中介,銀行也都是這個思路)

所以Mycat沒有存儲引擎,本身并不存儲數(shù)據(jù),只是起到了請求分析,拆解,路由與結(jié)果聚合的作用,為前端應(yīng)用提供統(tǒng)一接口,Mycat 與后端的數(shù)據(jù)庫集群有機(jī)組合才一起構(gòu)成一個分布式數(shù)據(jù)庫系統(tǒng)


邏輯庫(schema)

類似于LVM中VG的概念(VG由一個或多個PV構(gòu)成),邏輯庫是由一個或多個后端數(shù)據(jù)庫構(gòu)成的,展示給應(yīng)用的是一個單一視圖,是分布式數(shù)據(jù)庫在邏輯上的一個抽象


邏輯表(table)

  • 邏輯表

與數(shù)據(jù)庫中表相對應(yīng)的,分布式數(shù)據(jù)表在邏輯上的一個抽象

  • 分片表

數(shù)據(jù)表切分后的一個部分(原表的一個真子集)

  • 非分片表

沒有分片的表,就是非分片表

  • ER表

保留了實體關(guān)系特性的表,就是ER表

關(guān)系型數(shù)據(jù)庫是基于實體關(guān)系模型的相關(guān)理論來構(gòu)建的數(shù)據(jù)庫,表與表間有依賴關(guān)系,通過表分組(Table Group) 讓有依賴的表在同一實例庫中從而避免了數(shù)據(jù)Join不會跨庫操作

  • 全局表

全局表是所有分片上都有一份完整拷貝的表

字典表或符合字典特性的表可以被設(shè)置為全局表

有以下特點的表,被稱作字典表:

  • 變動不頻繁
  • 數(shù)據(jù)量總體變化不大
  • 數(shù)據(jù)規(guī)模不大(很少超過十萬條記錄)
  • 會與其它表發(fā)生關(guān)聯(lián)

這類表可以通過冗余來解決join問題,也就是所有的分片都放上一份數(shù)據(jù)的拷貝來避免跨分片聯(lián)查

Tip: 數(shù)據(jù)冗余和表分組是解決跨分片數(shù)據(jù)join的好思路,也是數(shù)據(jù)切分規(guī)劃的重要規(guī)則


分片節(jié)點(dataNode)

每個表分片所在的數(shù)據(jù)庫就是分片節(jié)點


節(jié)點主機(jī)(dataHost)

分片節(jié)點所在的服務(wù)器就是節(jié)點主機(jī)

Tip: 盡量將讀寫壓力高的分片節(jié)點均衡放在不同的節(jié)點主機(jī)上,以避免單節(jié)點主機(jī)并發(fā)數(shù)限制


分片規(guī)則(rule)

分片規(guī)則就是切分?jǐn)?shù)據(jù)的規(guī)則


全局序列號(sequence)

保證數(shù)據(jù)全局唯一性標(biāo)識的外部機(jī)制就是全局序列號

Tip: 單機(jī)(單實例)環(huán)境下的主鍵約束在分布式環(huán)境中將失效,因此得通過外部機(jī)制以全局視角來保證數(shù)據(jù)唯一性


多租戶

多租戶技術(shù)也叫多重租憑技術(shù),就是在確保用戶間數(shù)據(jù)隔離的前提下實現(xiàn)在多用戶環(huán)境中共用相同系統(tǒng)或程序等軟硬件資源的一種軟件架構(gòu)技術(shù)

Tip: web 中廣范使用的 VirtualHost 就是一種典型的多租戶技術(shù),多租戶技術(shù)是為了更充分的使用到現(xiàn)有資源,同時不失權(quán)限控制的一種技術(shù)

  • 獨立數(shù)據(jù)庫
  • 共享數(shù)據(jù)庫,隔離數(shù)據(jù)架構(gòu)
  • 共享數(shù)據(jù)庫,共享數(shù)據(jù)架構(gòu)

隔離級別越來越低,共享程度越來越高,均攤成本越來越低

整體關(guān)系


配置

Mycat 的大部分配置都是以 XML 的格式設(shè)定的

[root@h102 mycat]# ll conf/schema.xml 
-rwxrwxrwx 1 root root 4129 Feb 17 10:30 conf/schema.xml
[root@h102 mycat]# ll conf/rule.xml 
-rwxrwxrwx 1 root root 4510 Feb 17 10:30 conf/rule.xml
[root@h102 mycat]# ll conf/server.xml 
-rwxrwxrwx 1 root root 2507 Feb 17 10:30 conf/server.xml
[root@h102 mycat]# ll conf/wrapper.conf 
-rwxrwxrwx 1 root root 4318 Feb 24 21:20 conf/wrapper.conf
[root@h102 mycat]#  
ConfComment
conf/wrapper.conf JVM運行環(huán)境配置
conf/server.xml 用來定義系統(tǒng)相關(guān)變量
conf/schema.xml 用來定義邏輯庫,表,分片節(jié)點
conf/rule.xml 用來定義分片規(guī)則

wrapper.conf

我們使用這個文件來配置JVM的相關(guān)運行參數(shù)

[root@h102 conf]# cat wrapper.conf | egrep "(Xm|MaxDirectMemorySize)"
#wrapper.java.additional.5=-XX:MaxDirectMemorySize=2G
wrapper.java.additional.5=-XX:MaxDirectMemorySize=256m
#wrapper.java.additional.10=-Xmx4G
wrapper.java.additional.10=-Xmx512m
#wrapper.java.additional.11=-Xms1G
wrapper.java.additional.11=-Xms128m
[root@h102 conf]# 

以上配置是常用的對JVM內(nèi)存的控制


server.xml

XML的格式就是各類標(biāo)簽

注釋

這個標(biāo)簽用來框定注釋范圍

<!--
...
...
-->

mycat:server

這個標(biāo)簽用來框定服務(wù)配置范圍

<mycat:server xmlns:mycat="http://org.opencloudb/">
</mycat:server>

system

這個標(biāo)簽用來框定系統(tǒng)配置范圍,用來保存幾乎所有mycat需要的系統(tǒng)配置信息(其在代碼內(nèi)直接的映射類為SystemConfig )

<system>
</system>

property

用來設(shè)定服務(wù)的具體參數(shù)

<property name="defaultSqlParser">druidparser</property>
<property name="processors">2</property>
<property name="serverPort">8066</property> 
<property name="managerPort">9066</property>
<property name="bindIp">0.0.0.0</property> 

user

用來設(shè)定一個租戶,與相關(guān)權(quán)限

這里設(shè)定了一個 cc 的租戶,密碼為 cc , 可以訪問 cctest 的數(shù)據(jù)庫(schema)

<user name="cc">
	<property name="password">cc</property>
	<property name="schemas">cctest</property>
</user>

schema.xml

mycat:schema

這個標(biāo)簽用來框定shema的配置范圍

<mycat:schema xmlns:mycat="http://org.opencloudb/">
</mycat:schema>

schema

用來配置一個邏輯庫(schema)

這里配置了一個名叫 cctest 的邏輯庫,不檢查SQL,默認(rèn)limit為100(sql中不添加limit的情況下,mycat會隱式添加,以避免返回太多結(jié)果),其中包含兩個邏輯表,catworld 和 catworld4 ,catworld 有三個分片,使用 mod-long 的規(guī)則,catworld4 有四個分片,使用 mod4-long 的分片規(guī)則

<schema name="cctest" checkSQLschema="false" sqlMaxLimit="100">
	       <table name="catworld"  dataNode="sd1,sd2,sd3"  rule="mod-long" />
	       <table name="catworld4"  dataNode="sd1,sd2,sd3,sd4"  rule="mod4-long" />
</schema>
AttributeComment
checkSQLschema 隱式刪除schema前綴
sqlMaxLimit 隱式添加limit語句

table

AttributeComment
dataNode 指定所屬數(shù)據(jù)節(jié)點
rule 指定分片規(guī)則

dataNode

這個標(biāo)簽用來定義數(shù)據(jù)節(jié)點(數(shù)據(jù)分片存放的地方)

<dataNode name="sd1" dataHost="h101" database="my1" />
<dataNode name="sd2" dataHost="h101" database="my2" />
<dataNode name="sd3" dataHost="h101" database="my3" />
<dataNode name="sd4" dataHost="h202" database="my4" />
AttributeComment
dataHost 指定所屬數(shù)據(jù)庫實例
database 指定數(shù)據(jù)庫實例上的實際數(shù)據(jù)庫名(一定要和真實庫一樣的名字,這個不是被標(biāo)簽定義的,是要提前在實例中手動創(chuàng)建的)

dataHost

節(jié)點主機(jī)的相關(guān)配置

<dataHost name="h101" maxCon="100" minCon="10" balance="0" writeType="0" dbType="mysql" dbDriver="native" switchType="1"  slaveThreshold="100">
		<heartbeat>select user()</heartbeat>
		<writeHost host="h101M1" url="192.168.100.101:3306" user="root" password="mysql">
		<!-- can have multi read hosts -->
		</writeHost>
</dataHost>
<dataHost name="h202" maxCon="100" minCon="10" balance="0" writeType="0" dbType="mysql" dbDriver="native" switchType="1"  slaveThreshold="100">
		<heartbeat>select user()</heartbeat>
		<writeHost host="h202M1" url="192.168.100.202:3306" user="root" password="mysql">
		<!-- can have multi read hosts -->
		</writeHost>
</dataHost>
AttributeComment
maxCon 一個讀寫實例鏈接池的最大連接數(shù)
minCon 一個讀寫實例鏈接池的最小連接數(shù),初始化連接池的大小
balance 負(fù)載均衡類型:0 代表不開啟讀寫分離機(jī)制,只使用writeHost; 1 代表readHost與writeHost分擔(dān)讀請求; 2 代表隨機(jī)分配讀請求和1類似; 3 代表只由readHost來承擔(dān)讀請求
writeType 負(fù)載均衡類型:0 代表發(fā)到第一個writeHost,掛了后切到還生存的第二個writeHost,重新啟動后以切換后的為準(zhǔn),也就是不漂回;1 代表寫操作隨機(jī)發(fā)送到writeHost,這樣不安全;
dbType 后端數(shù)據(jù)庫類型
dbDriver mysql系可以使用native,其它系列得使用JDBC
switchType 切換類型:-1 代表不切換,1 代表自動切換, 2 代表基于主從同步狀態(tài)決定是否切換
slaveThreshold slave讀的安全邊界,如果Seconds_Behind_Master 大于這個值,這臺slave會被臨時剔除,以免被讀

heartbeat

里面包含一個語句,用語句執(zhí)行成功與否來判定數(shù)據(jù)庫的可用性

writeHost/readHost

AttributeComment
host 一個主機(jī)標(biāo)識,便于區(qū)分,不必和真實主機(jī)名一致
url 后端實例連接地址
user 連接賬戶
password 連接密碼

Tip: 用戶名和密碼要提前在各實例中賦予相應(yīng)連接和操作權(quán)限


rule.xml

此配置用來定義分片規(guī)則

mycat:rule

框定rule的配置范圍

<mycat:rule xmlns:mycat="http://org.opencloudb/">
</mycat:rule>

tableRule

定義一個分片規(guī)則

定義了一個 mod-long 的分片規(guī)則,對 id 列進(jìn)行分片,使用 mod-long 算法;定義了一個 mod4-long 的分片規(guī)則,對 id 列進(jìn)行分片,使用 mod4-long 算法

<tableRule name="mod-long">
                <rule>
                        <columns>id</columns>
                        <algorithm>mod-long</algorithm>
                </rule>
</tableRule>
<tableRule name="mod4-long">
                <rule>
                        <columns>id</columns>
                        <algorithm>mod4-long</algorithm>
                </rule>
</tableRule>

function

<function name="mod-long" class="org.opencloudb.route.function.PartitionByMod">
                <!-- how many data nodes -->
                <property name="count">3</property>
</function>
<function name="mod4-long" class="org.opencloudb.route.function.PartitionByMod">
                <!-- how many data nodes -->
                <property name="count">4</property>
</function>
AttributeComment
class 使用的類
property 通過 count=3/4 來指定分片數(shù)(指定模數(shù))

注意

XML中定義的標(biāo)簽有順序,如果不按照順序進(jìn)行配置,會報錯

比如 schema.xml 中的順序為

  • 1.定義 schema
  • 2.定義 dataNode
  • 3.定義 dataHost

如果不按順序,會無法啟動mycat,并且 mycat.log 中會報錯

這里只對一套簡單基礎(chǔ)的配置進(jìn)行了分析,只涵蓋了一小部分,還未涵蓋到的,可以參考 官方文檔


命令匯總

  • ll conf/schema.xml
  • ll conf/rule.xml
  • ll conf/server.xml
  • ll conf/wrapper.conf
  • cat wrapper.conf | egrep "(Xm|MaxDirectMemorySize)"

    本站是提供個人知識管理的網(wǎng)絡(luò)存儲空間,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點。請注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購買等信息,謹(jǐn)防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請點擊一鍵舉報。
    轉(zhuǎn)藏 分享 獻(xiàn)花(0

    0條評論

    發(fā)表

    請遵守用戶 評論公約

    類似文章 更多