cobar mysql cluster_Cobar使用文档(可用作MySQL大型集群解决方案)
最近好不容易抽空研究了下Cobar,感覺這個產品確實很不錯(在文檔方面比Amoeba強多了),特此推薦給大家。Cobar是阿里巴巴研發的關系型數據的分布式處理系統,該產品成功替代了原先基于Oracle的數據存儲方案,目前已經接管了3000+個MySQL數據庫的schema,平均每天處理近50億次的SQL執行請求。
首先,使用Cobar的核心功能如下:
分布式:
Cobar的分布式主要是通過將表放入不同的庫來實現:
1. Cobar支持將一張表水平拆分成多份分別放入不同的庫來實現表的水平拆分
2. Cobar也支持將不同的表放入不同的庫
3. 多數情況下,用戶會將以上兩種方式混合使用
這里需要強調的是,Cobar不支持將一張表,例如test表拆分成test_1, test_2, test_3.....放在同一個庫中,必須將拆分后的表分別放入不同的庫來實現分布式。
HA:
在用戶配置了MySQL心跳的情況下,Cobar可以自動向后端連接的MySQL發送心跳,判斷MySQL運行狀況,一旦運行出現異常,Cobar可以自動切換到備機工作。但需要強調的是:
1. Cobar的主備切換有兩種觸發方式,一種是用戶手動觸發,一種是Cobar的心跳語句檢測到異常后自動觸發。那么,當心跳檢測到主機異常,切換到備機,如果主機恢復了,需要用戶手動切回主機工作,Cobar不會在主機恢復時自動切換回主機,除非備機的心跳也返回異常。
2. Cobar只檢查MySQL主備異常,不關心主備之間的數據同步,因此用戶需要在使用Cobar之前在MySQL主備上配置雙向同步,詳情可以參閱MySQL參考手冊。
其次,我們也需要注意Cobar的功能約束:
1) 不支持跨庫情況下的join、分頁、排序、子查詢操作。
2) SET語句執行會被忽略,事務和字符集設置除外。
3) 分庫情況下,insert語句必須包含拆分字段列名。
4) 分庫情況下,update語句不能更新拆分字段的值。
5) 不支持SAVEPOINT操作。
6) 暫時只支持MySQL數據節點。
7) 使用JDBC時,不支持rewriteBatchedStatements=true參數設置(默認為false)。
8) 使用JDBC時,不支持useServerPrepStmts=true參數設置(默認為false)。
9) 使用JDBC時,BLOB, BINARY, VARBINARY字段不能使用setBlob()或setBinaryStream()方法設置參數。
然后,我們來分析一下Cobar邏輯層次圖:
* dataSource:數據源,表示一個具體的數據庫連接,與物理存在的數據庫schema一一對應。
* dataNode:數據節點,由主、備數據源,數據源的HA以及連接池共同組成,可以將一個dataNode理解為一個分庫。
* table:表,包括拆分表(如tb1,tb2)和非拆分表。
* tableRule:路由規則,用于判斷SQL語句被路由到具體哪些datanode執行。
* schema:cobar可以定義包含拆分表的schema(如schema1),也可以定義無拆分表的schema(如schema2)。
Cobar支持的數據庫結構(schema)的層次關系具有較強的靈活性,用戶可以將表自由放置不同的datanode,也可將不同的datasource放置在同一MySQL實例上。在實際應用中,我們需要通過配置文件(schema.xml)來定義我們需要的數據庫服務器和表的分布策略,這點我們將在后面的安裝和配置部分中介紹到。
接著,我們來介紹Cobar的安裝和配置步驟:下面我們將使用一個最簡單的分庫分表的例子來說明Cobar的基本用法,數據庫schema如下圖(該實例也可參考:Cobar產品首頁)。
1) 系統對外提供的數據庫名是dbtest,并且其中有兩張表tb1和tb2。
2) tb1表的數據被映射到物理數據庫dbtest1的tb1上。
3) tb2表的一部分數據被映射到物理數據庫dbtest2的tb2上,另外一部分數據被映射到物理數據庫dbtest3的tb2上。
1、環境準備
操作系統:Linux或者Windows (推薦在Linux環境下運行Cobar)
MySQL:http://www.mysql.com/downloads/(推薦使用5.1以上版本)
JDK:http://www.oracle.com/technetwork/java/javase/downloads/(推薦使用1.6以上版本)
Cobar:http://code.alibabatech.com/wiki/display/cobar/release/(下載tar.gz或者zip文件)
2、數據準備
假設本文MySQL所在服務器IP為192.168.0.1,端口為3306,用戶名為test,密碼為空,我們需要創建schema:dbtest1、dbtest2、dbtest3,table:tb1、tb2,SQL如下:
#創建dbtest1
drop?database?if?exists?dbtest1;
create?database?dbtest1;
use?dbtest1;
#在dbtest1上創建tb1
create?table?tb1(
id????int?not?null,
gmt???datetime);
#創建dbtest2
drop?database?if?exists?dbtest2;
create?database?dbtest2;
use?dbtest2;
#在dbtest2上創建tb2
create?table?tb2(
id????int?not?null,
val???varchar(256));
#創建dbtest3
drop?database?if?exists?dbtest3;
create?database?dbtest3;
use?dbtest3;
#在dbtest3上創建tb2
create?table?tb2(
id????int?not?null,
val???varchar(256));
3、配置Cobar
Cobar解壓之后有四個目錄:
bin/:可執行文件目錄,包含啟動(start)、關閉(shutdown)和重啟(restart)腳本
lib/:邏輯類庫目錄,包含了Cobar所需的jar包
conf/:配置文件目錄,下面會詳細介紹
logs/:運行日志目錄,最主要的log有兩個:程序日志(stdout.log)和控制臺輸出(console.log)
配置文件的用法如下:
log4j.xml:日志配置,一般來說保持默認即可
schema.xml:定義了schema邏輯層次圖中的所有元素,并利用這些元素以及rule.xml中定義的規則組建分布式數據庫系統
rule.xml:定義了分庫分表的規則
server.xml:系統配置文件
我們在schema.xml中配置數據庫結構(schema)、數據節點(dataNode)、以及數據源(dataSource)。
cobar:schema?SYSTEM?"schema.dtd">
dsTest[0]
dsTest[1]
dsTest[2]
192.168.0.1:3306/dbtest1?
192.168.0.1:3306/dbtest2?
192.168.0.1:3306/dbtest3?
test?
test?
STRICT_TRANS_TABLES
我們注意到,上述配置實際上已經把圖2中的數據庫結構配置好了。dbtest主要映射的是dnTest1庫(即192.168.0.1:3306/dbtest1庫),而其中的tb2表則是按照規則rule1,被分配到dnTest2庫(即192.168.0.1:3306/dbtest2庫)和dnTest3庫(即192.168.0.1:3306/dbtest3庫)中。此外,規則rule1的定義可以在rule.xml中找到,代碼如下:
cobar:rule?SYSTEM?"rule.dtd">
id
2
512
總結
以上是生活随笔為你收集整理的cobar mysql cluster_Cobar使用文档(可用作MySQL大型集群解决方案)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 智能脉冲充电器(什么是人工智能)
- 下一篇: linux mysql依赖关系_[Lin