MyCAT 配置詳解
MyCAT 配置解析
server.xml Mycat的配置檔案,設定賬號、引數等
schema.xml Mycat對應的物理資料庫和資料庫表的配置
rule.xml Mycat分片(分庫分表)規則
一 :wrapper.conf
--配置jdk
wrapper.java.command=D:/Program Files/Java/jdk1.8.0_131/bin/java.exe
二:server.xml
1、user標籤
user 使用者配置節點
--name 登入的使用者名稱,也就是連線Mycat的使用者名稱
--password 登入的密碼,也就是連線Mycat的密碼
--schemas 資料庫名,這裡會和schema.xml中的配置關聯,多個用逗號分開,例如需要這個使用者需要管理兩個資料庫db1,db2,則配置db1,dbs
2、privileges標籤
對使用者的 schema以及表進行精細化的DML許可權控制
--check 表示是否開啟DML許可權檢查。預設是關閉。server.dtd檔案中 說明可以有多個schema的配置。
--dml 順序說明:insert,update,select,delete
- system標籤
這個標籤內巢狀的所有 property 標籤都與系統配置有關。
utf8
字符集
1
處理執行緒數量,預設是cpu數量。
每次讀取留的數量,預設4096。
建立共享buffer需要佔用的總空間大小。processorBufferChunkprocessors100。
預設為0。0表示DirectByteBufferPool,1表示ByteBufferArena。
二級共享buffer是processorBufferPool的百分比,這裡設定的是百分比。
全域性ID生成方式。(0:為本地檔案方式,1:為資料庫方式;2:為時間戳序列方式;3:為ZK生成ID;4:為ZK遞增ID生成。
是否開啟mysql壓縮協議。1為開啟,0為關閉,預設關閉。
指定 Mysql 協議中的報文頭長度。預設 4。
指定 Mysql 協議可以攜帶的資料最大長度。預設 16M。
指定連線的空閒超時時間。某連線在發起空閒檢查下,發現距離上次使用超過了空閒時間,那麼這個連線會被回收,就是被直接的關閉掉。預設 30 分鐘,單位毫秒。
前端連線的初始化事務隔離級別,只在初始化的時候使用,後續會根據客戶端傳遞過來的屬性對後端資料庫連線進行同步。預設為 REPEATED_READ,設定值為數字預設 3。
READ_UNCOMMITTED = 1;
READ_COMMITTED = 2;
REPEATED_READ = 3;
SERIALIZABLE = 4;
SQL 執行超時的時間,Mycat 會檢查連線上最後一次執行 SQL 的時間,若超過這個時間則會直接關閉這連線。預設時間為 300 秒,單位秒。
清理 NIOProcessor 上前後端空閒、超時和關閉連線的間隔時間。預設是 1 秒,單
位毫秒。
對後端連線進行空閒、超時檢查的時間間隔,預設是 300 秒,單位毫秒。
對後端所有讀、寫庫發起心跳的間隔時間,預設是 10 秒,單位毫秒。
mycat 服務監聽的 IP 地址,預設值為 0.0.0.0。
定義 mycat 的使用埠,預設值為 8066。
定義 mycat 的管理埠,預設值為 9066。
mycat 模擬的 mysql 版本號,預設值為 5.6 版本,如非特需,不要修改這個值,目前支援設定 5.5,5.6,5.7 版本,其他版本可能會有問題。
是否開啟實時統計。1為開啟;0為關閉 。
是否開啟全域性表一致性檢測。1為開啟;0為關閉 。
分散式事務開關。0為不過濾分散式事務;1為過濾分散式事務;2 為不過濾分散式事務,但是記錄分散式事務日誌。
預設是65535。 64K 用於sql解析時最大文字長度
以上舉例的屬性僅僅是一部分,可以配置的變數很多,具體可以檢視SystemConfig這個類的屬性內容。
System標籤下的屬性,一般是上線後,需要根據實際執行的情況,分析後調優的時候進行修改。
- Firewall標籤
顧名思義,這個就是關於防火牆的設定,也就是在網路層對請求的地址進行限制,主要是從安全形度來保證Mycat不被匿名IP進行訪問
設定很簡單,很容易理解,只要設定了白名單,表示開啟了防火牆,只有白名單的連線才可以進行連線。
三:schema.xml
--schema 資料庫設定,此資料庫為邏輯資料庫,name與server.xml中schema對應
--dataNode 分片資訊,也就是分庫相關配置
--dataHost 物理資料庫,真正儲存資料的資料庫
1、schema 標籤
schema標籤用來定義mycat例項中的邏輯庫,mycat可以有多個邏輯庫,每個邏輯庫都有自己的相關配置。可以使用schema標籤來劃分這些不同的邏輯庫
如果不配置schema標籤,所有表的配置會屬於同一個預設的邏輯庫。邏輯庫的概念和MySql的database的概念一樣,我們在查詢兩個不同邏輯庫中的表的時候,需要切換到該邏輯庫下進行查詢。
--name 邏輯資料庫名,與server.xml中的schema對應
--checkSQLschema 資料庫字首相關設定,當該值為true時,例如我們執行語句select * from TESTDB.company 。mycat會把語句修改為 select * from company 去掉TESTDB。
--sqlMaxLimit 當該值設定為某個數值時,每條執行的sql語句,如果沒有加上limit語句,Mycat會自動加上對應的值。不寫的話,預設返回所有的值。
需要注意的是,如果執行的schema為非拆分庫的,那麼該屬性不會生效。需要自己sql語句加limit。
2、table 標籤
- childTable標籤
3、dataNode標籤
datanode標籤定義了mycat中的資料節點,也就是我們所說的資料分片。一個datanode標籤就是一個獨立的資料分片。
例子中的表述的意思為,使用名字為localhost1資料庫例項上的db1物理資料庫,這就組成一個數據分片,最後我們用dn1來標示這個分片。
--name 定義資料節點的名字,這個名字需要唯一。我們在table標籤上用這個名字來建立表與分片對應的關係
--dataHost 用於定義該分片屬於哪個資料庫例項,屬性與datahost標籤上定義的name對應
--database 用於定義該分片屬於資料庫例項上 的具體庫。
4、dataHost標籤
這個標籤直接定義了具體資料庫例項,讀寫分離配置和心跳語句。
--name 唯一標示dataHost標籤,供上層使用
--maxCon 指定每個讀寫例項連線池的最大連線。
--minCon 指定每個讀寫例項連線池的最小連線,初始化連線池的大小
--balance 負載均稱型別
balance="0":不開啟讀寫分離機制,所有讀操作都發送到當前可用的writeHost上
balance="1":全部的readHost與stand by writeHost參與select語句的負載均衡,簡單的說,當雙主雙從模式(M1-S1,M2-S2 並且M1 M2互為主備),正常情況下,M2,S1,S2都參與select語句的負載均衡。
balance="2":所有讀操作都隨機的在writeHost、readHost上分發
balance="3":所有讀請求隨機的分發到writeHst對應的readHost執行,writeHost不負擔讀寫壓力。(1.4之後版本有)
--writeType 負載均衡型別。
writeType="0", 所有寫操作傳送到配置的第一個 writeHost,第一個掛了切到還生存的第二個writeHost,重新啟動後已切換後的為準,切換記錄在配置檔案中:dnindex.properties .
writeType="1",所有寫操作都隨機的傳送到配置的 writeHost。1.5以後版本廢棄不推薦。
--switchType -1不自動切換
1 預設值 自動切換
2 基於MySql主從同步的狀態決定是否切換心跳語句為 show slave status
3 基於mysql galary cluster 的切換機制(適合叢集)1.4.1 心跳語句為 show status like 'wsrep%'
--dbType 指定後端連結的資料庫型別目前支援二進位制的mysql協議,還有其他使用jdbc連結的資料庫,例如:mongodb,oracle,spark等
--dbDriver 指定連線後段資料庫使用的driver,目前可選的值有native和JDBC。使用native的話,因為這個值執行的是二進位制的mysql協議,所以可以使用mysql和maridb,其他型別的則需要使用JDBC驅動來支援。
如果使用JDBC的話需要符合JDBC4標準的驅動jar 放到mycat\lib目錄下,並檢查驅動jar包中包括如下目錄結構檔案 META-INF\services\java.sql.Driver。 在這個檔案寫上具體的driver類名,例如com.mysql.jdbc.Driver
writeHost readHost指定後端資料庫的相關配置給mycat,用於例項化後端連線池。
--tempReadHostAvailable
如果配置了這個屬性 writeHost 下面的 readHost 仍舊可用,預設 0 可配置(0、1)。
1)heartbeat標籤
這個標籤內指明用於和後端資料庫進行心跳檢查的語句。
例如:MYSQL 可以使用 select user(),Oracle 可以使用 select 1 from dual 等。
2) writeHost /readHost 標籤
這兩個標籤都指定後端資料庫的相關配置,用於例項化後端連線池。唯一不同的是,writeHost 指定寫例項、readHost 指定讀例項。
在一個 dataHost 內可以定義多個 writeHost 和 readHost。但是,如果 writeHost 指定的後端資料庫宕機,那麼這個 writeHost 繫結的所有 readHost 都將不可用。
另一方面,由於這個 writeHost 宕機,系統會自動的檢測到,並切換到備用的 writeHost 上去。這兩個標籤的屬性相同,這裡就一起介紹。
--host 用於標識不同例項,一般 writeHost 我們使用M1,readHost 我們用S1。
--url 後端例項連線地址。Native:地址:埠 JDBC:jdbc的url
--password 後端儲存例項需要的密碼
--user 後端儲存例項需要的使用者名稱字
--weight 權重 配置在 readhost 中作為讀節點的權重
--usingDecrypt 是否對密碼加密,預設0。具體加密方法看官方文件。
四: Rule.xml
ule.xml 裡面就定義了我們對錶進行拆分所涉及到的規則定義。我們可以靈活的對錶使用不同的分片演算法,或者對錶使用相同的演算法但具體的引數不同。 包含的標籤 tableRule 和 function。
- tableRule 標籤
這個標籤定義表規則。
定義的表規則,在 schema.xml:
--name 屬性指定唯一的名字,用於標識不同的表規則。 內嵌的 rule 標籤則指定對物理表中的哪一列進行拆分和使用什麼路由演算法。
--columns 內指定要拆分的列名字。
--algorithm 使用 function 標籤中的 name 屬性。連線表規則和具體路由演算法。當然,多個表規則可以連線到 同一個路由演算法上。table 標籤內使用。讓邏輯表使用這個規則進行分片。
2. function 標籤
--name 指定演算法的名字。
--class 制定路由演算法具體的類名字。
--property 為具體演算法需要用到的一些屬性。
是故無冥冥之志者,無昭昭之明;無惛惛之事者,無赫赫之功。
本文來自部落格園,作者:wuguofeng,轉載請註明原文連結:https://www.cnblogs.com/wuguofeng/p/15522965.html