天天看點

cobar配置安裝

1、下載下傳cobar http://code.alibabatech.com/wiki/display/cobar/release

2、進入cobar-server-1.2.4目錄,可以看到Cobar的主要目錄如下:

bin    #包含Cobar的啟動、重新開機、停止等腳本檔案

conf   #包含Cobar所有配置檔案

lib    #包含Cobar及其依賴的jar檔案

logs   #包含Cobar所有日志檔案

3、Cobar的所有配置檔案全部放在conf目錄中,進入conf目錄,可以看到:

server.xml   #Cobar系統、使用者、叢集等相關配置

schema.xml   #schema,dataNode,dataSource相關配置

rule.xml     #分布式規則定義

log4j.xml    #日志相關配置

4、mysql中資料準備

    配置兩台機器的mysql,ip位址分别為:192.168.1.110 、 192.168.1.113 端口為3306 使用者名 root 密碼為空。我們需要在 192.168.1.110上建立database:dbtest1,dbtest2,dbtest3;table:tb1(在dbtest1上),tb2(dbtest2、dbtest3上)。在192.168.1.113上建立database:dbtest31,dbtest32;table:tb1(dbtest31上),tb2(dbtest32上)

資料庫建立腳本:

#########################################192.168.1.110

#建立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));

#########################################192.168.1.113

#建立dbtest31

drop database if exists dbtest1;

create database dbtest1;

use dbtest31;

#在dbtest1上建立tb1

create table tb1(

id int not null,

gmt datetime);

#建立dbtest32

drop database if exists dbtest2;

create database dbtest2;

use dbtest32;

#在dbtest2上建立tb2

create table tb2(

id int not null,

val varchar(256));

5、配置schema.xml

參考:http://code.alibabatech.com/wiki/pages/viewpage.action?pageId=7671478

請確定機器上設定了JAVA環境變量JAVA_HOME

<!--定義schema db_single, 該schema未做分布式存儲,類似于5.1節中schema邏輯層次圖中的db2-->

<!--對schema db_single所有表的通路均路由到dnTest1 上執行-->

<!--<schema name="db_single" dataNode="dnTest1"/>-->

<!--定義schema db_shard-->

<!--所有除tb1,tb2之外表的通路都路由到dnTest1 去執行-->

<schema name="db_shard" dataNode="dnTest1">

 <!--對tb1的通路會根據規則tb1Rule路由到dnTest1,dnTest1的某一個或某幾個datanode執行-->

 <table name="tb1" dataNode="dnTest1,dnTest1" rule="rule1" />

 <!--對tb2的通路會根據規則string_val_2路由到dnTest2,dnTest3,dnTest5的某一個或兩個datanode執行-->

 <table name="tb2" dataNode="dnTest2,dnTest3,dnTest5" rule="rule1" />

</schema>

 <!--rule1,将會在rule.xml的tableRule中定義,可以不想同-->

<!--資料節點由主、備資料源,心跳,連接配接池等配置組成。-->

  <!--資料節點名稱-->

  <dataNode name="dnTest1">

    <property name="dataSource">

      <!--第一行dataSourceRef表示主資料源-->

      <dataSourceRef>dsTest[0]</dataSourceRef>

      <!--第二行dataSourceRef表示備資料源-->

      <!--<dataSourceRef>ds_single_slave</dataSourceRef>-->

      <!--如果需要一主多備的情況,可以将第二備資料源配置在第三行,以此類推-->

      <!--<dataSourceRef>ds_single_slave2</dataSourceRef>-->

    </property>

    <!--Cobar與後端資料源連接配接池大小設定-->

    <!--<property name="poolSize">256</property>-->

    <!--Cobar通過心跳來實作後端資料源HA,一旦主資料源心跳失敗,便切換到備資料源上工作-->

    <!--Cobar心跳是通過向後端資料源執行一條SQL語句,根據該語句的傳回結果判斷資料源的運作情況-->

    <!--<property name="heartbeat">select user()<property>-->

  </dataNode>

   <dataNode name="dnTest2">

    <property name="dataSource">

      <dataSourceRef>dsTest[1]</dataSourceRef>

    </property>

  </dataNode>

<dataNode name="dnTest3">

    <property name="dataSource">

      <dataSourceRef>dsTest[2]</dataSourceRef>

    </property>

  </dataNode>

<dataNode name="dnTest4">

    <property name="dataSource">

      <dataSourceRef>dsTest[3]</dataSourceRef>

    </property>

  </dataNode>

<dataNode name="dnTest5">

    <property name="dataSource">

      <dataSourceRef>dsTest[4]</dataSourceRef>

    </property>

  </dataNode>

<!-- 資料源定義,資料源是一個具體的後端資料連接配接的表示。-->

  <!--資料源的名稱與類型,Cobar暫時隻支援mysql這種類型-->

  <dataSource name="dsTest" type="mysql">

    <!--連接配接的位址,端口和schema名稱-->

    <property name="location">

        <location>192.168.1.110:3306/dbtest1</location>

     <location>192.168.1.110:3306/dbtest2</location>

     <location>192.168.1.110:3306/dbtest3</location>

     <location>192.168.1.113:3306/dbtest31</location>

     <location>192.168.1.113:3306/dbtest32</location>

    </property>

     <!--連接配接使用者名,密碼-->

    <property name="user">root</property>

    <property name="password"></property>

    <!--連接配接的SQL模式-->

    <property name="sqlMode">STRICT_TRANS_TABLES</property>

  </dataSource>

此處要注意開啟遠端連接配接root使用者的權限

grant all privileges on *.* to root#'%'

6、配置rule.xml

tableRule

tableRule主要作用是用來判斷SQL語句路由到哪些datanode執行,Cobar是通過在SQL中提取一個或多個字段的值,并根據這些字段的值來決定路由到哪個庫執行。是以,tableRule定義兩個要素:

1)按表中的哪個字段路由?------下文中我們稱此字段為路由字段

2)有了字段值,如何路由?------即路由函數

<tableRule name="rule1">

    <rule>

      <!--id為路由字段-->

      <columns>id</columns>

      <!--func1 是路由函數,參數為id-->

      <algorithm><![CDATA[func1(${id})]]></algorithm>

    </rule>

</tableRule>

function

參考:http://code.alibabatech.com/wiki/pages/viewpage.action?pageId=7671871

<!--定義function名稱,如果路由字段是字元串類型,對應class路徑為com.alibaba.cobar.route.function.PartitionByString-->

  <function name="func" class="com.alibaba.cobar.route.function.PartitionByString">

    <!--該路由函數将1024分成多少個區段-->

    <property name="partitionCount">4</property>

    <!--每一區段的長度, 滿足4 * 256 = 1024-->

    <property name="partitionLength">256</property>

    <!--字元串需要先取hash值再做映射,這裡定義取字元串的哪一部分子串做hash-->

    <!--:8表示子串的下标,意思是取路由字段的前8個字元做hash,該文法與python取字元串下标方式相同-->

    <property name="hashSlice">:8</property>

  </function>

 <function name="func1" class="com.alibaba.cobar.route.function.PartitionByLong">

    <!--該路由函數将1024分成多少個區段-->

    <property name="partitionCount">2</property>

    <!--每一區段的長度, 滿足4 * 256 = 1024-->

    <property name="partitionLength">512</property>

    <!--字元串需要先取hash值再做映射,這裡定義取字元串的哪一部分子串做hash-->

  </function>

7、配置server.xml

System

<!--system中包含系統參數定義,服務端口、管理端口,處理器個數、線程池等定義-->

<!--這些配置都有預設值,一般情況下使用者可以完全不用配置-->

<system>

    <!--端口定義,如果沒有端口沖突,可不用配置-->

    <!--Cobar服務端口, 通過此端口執行SQL語句,預設值8066-->

    <property name="serverPort">8066</property>

    <!--Cobar管理端口,通過此端口執行Cobar管理指令, 預設值9066-->

    <property name="managerPort">9066</property>

    <!--Cobar内部處理器個數,線程池等定義,預設值為Cobar所在機器處理器個數-->

    <!--這些配置主要影響Cobar内部處理性能,可在做性能優化時調整-->

    <property name="initExecutor">16</property>

    <property name="timerExecutor">4</property>

    <property name="managerExecutor">4</property>

    <property name="processors">4</property>

    <property name="processorHandler">8</property>

    <property name="processorExecutor">8</property>

    <!--Cobar與Cobar間心跳的使用者名和密碼, 預設值即是_HEARTBEAT_USER_和_HEARTBEAT_PASS_-->

    <!--如果兩台Cobar之間需要心跳,這兩項配置必須相同,一般不建議自行配置,使用預設值即可-->

    <property name="clusterHeartbeatUser">_HEARTBEAT_USER_</property>

    <property name="clusterHeartbeatPass">_HEARTBEAT_PASS_</property>

  </system>

User

<!--Cobar的使用者定義,包括使用者名,密碼以及通路權限設定,可以配置任意多個使用者-->

  <!--普通使用者配置-->

  <user name="test">                            <!--使用者名-->

    <property name="password">test</property>   <!--密碼-->

    <!--Cobar對使用者進行了簡單的權限控制,可定義使用者對某些schema是否有通路權限-->

    <!--這裡不區分讀寫權限,一旦擁有通路權限,便是讀寫權限-->

    <!--以逗号分隔多個schema, test使用者隻能通路db_single和db_shard兩個Cobar定義的schema-->

    <property name="schemas">db_single,db_shard</property>

  </user>

  <!--超級使用者配置,超級使用者是指對所有schema都有通路權限的使用者-->

  <!—

<user name="root1">

 <property name="password">root</property>

-->

 

 <!--不配置任何通路權限,表示對所有schema都有通路權限-->

 <!--

  </user>

  <user name="root2">

 <property name="password">root</property>

-->

 

    <!--配置為空同樣表示對所有schema都有通路權限-->

    <!-<property name="schemas"></property>

  </user>-->

Cluster

在實際應用中,經常需要部署一個Cobar叢集,我們稱叢集中的一台Cobar為一個Cobar節點。

<!--組建一個Cobar叢集,隻需在cluster配置中把所有Cobar節點(注意:包括目前Cobar自身)都配置上便可-->

<cluster>

    <!--node名稱,一個node表示一個Cobar節點,一旦配置了node,目前Cobar便會向此節點定期發起心跳,探測節點的運作情況-->

    <node name="cobar1">

      <!--Cobar節點IP, 表示目前Cobar将會向192.168.1.110上部署的Cobar發送心跳-->

      <property name="host">192.168.1.110</property>

      <!--節點的權重,用于用戶端的負載均衡,使用者可以通過指令查詢某個節點的運作情況以及權重-->

      <property name="weight">1</property>

    </node>

    <!--目前Cobar将會向192.168.1.113上部署的Cobar發送心跳-->

    <node name="cobar2">

      <property name="host">192.168.1.113</property>

      <property name="weight">2</property>

    </node>

    <!--使用者還可以将Cobar節點分組,以便實作schema級别的細粒度負載均衡-->

    <group name="group12">

      <property name="nodeList">cobar1,cobar2</property>

    </group>

</cluster>

使用者隻需登入Cobar的服務端口(8066),運作Cobar自帶的查詢指令show cobar_cluster,便可查詢叢集中所有節點的運作情況以及權重,并根據查詢結果做負載均衡。

mysql -h192.168.1.110 -utest -ptest -P8066

mysql>show cobar_cluster;  #查詢cluster配置中正常的Cobar節點

+---------------+--------+

| HOST          | WEIGHT |

+---------------+--------+

| 192.168.1.110   |      1 |

| 192.168.1.113   |      2 |

+---------------+--------+

注意:

1)如果需要配置Cobar叢集,目前Cobar自身也需要作為一個節點配置在cluster中,Cobar不會預設向自己發心跳;

2)show cobar_cluster隻顯示cluster配置中得正常Cobar節點,如果節點異常(如逾時或錯誤),結果中便不會包含此節點。

8、通路方式

由于Cobar遵循MySQL協定,通路Cobar的方式與通路MySQL資料庫完全相同。

支援MySQL指令行方式通路

#指令行

mysql -h192.168.1.110 -utest -ptest -P8066 -Ddb_shard

轉載于:https://www.cnblogs.com/wuzp/archive/2012/08/29/2661436.html