Cobar介紹、安裝及使用的例子

來源:互聯網
上載者:User

Cobar是阿里巴巴開源(官方github)的一個對應用保持透明的MySQL資料庫分散式處理中介軟體。

Cobar功能


將一張表拆分到不同的庫。
將不同的表放入不同的庫。


提供HA方案

Cobar約束
不支援跨庫情況下的 join、分頁、排序、子查詢操作
SET 語句執行會被忽略,事務和字元集設定除外
分庫情況下,insert 語句必須包含拆分欄位列名
分庫情況下,update 語句不能更新拆分欄位的值
不支援 SAVEPOINT 操作
暫時只支援 MySQL 資料節點

Cobar安裝

wget https://github.com/alibaba/cobar/releases/download/v1.2.7/cobar-server-1.2.7.tar.gz
tar -zxvf cobar-server-1.2.7.tar.gz
cd cobar-server-1.2.7

Cobar配置主要目錄如下:
|--bin #包含Cobar的啟動、重啟、停止等指令檔
| |--startup.sh #Linux環境啟動指令碼
| |--startup.bat #Windows環境啟動指令碼
| |--restart.sh #Linux環境重啟指令碼
| |--shutdown.sh #Linux環境停止指令碼
|--conf #包含Cobar所有設定檔
| |--server.xml #Cobar系統、使用者、叢集等相關配置
| |--schema.xml #schema,dataNode,dataSource相關配置
| |--rule.xml #分布式規則定義
| |--log4j.xml #日誌相關配置
|--lib #包含Cobar及其依賴的jar檔案
|--logs #包含Cobar所有記錄檔

Cobar配置執行個體:
(1)資料準備
1353053439_6762.jpg1) 系統對外提供的資料庫名是dbtest,並且其中有兩張表tb1和tb2。
2) tb1表的資料被映射到物理資料庫dbtest1的tb1上。
3) tb2表的一部分資料被映射到物理資料庫dbtest2的tb2上,另外一部分資料被映射到物理資料庫dbtest3的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));

(2)配置schema.xml(資料庫結構schema、資料節點dataNode、以及資料來源dataSource)

<!DOCTYPE cobar:schema SYSTEM "schema.dtd">
<cobar:schema xmlns:cobar="http://cobar.alibaba.com/">
 
  <!-- schema定義 -->
  <schema name="dbtest" dataNode="dnTest1">
    <table name="tb2" dataNode="dnTest2,dnTest3" rule="rule1" />
  </schema>
 
  <!-- 資料節點定義,資料節點由資料來源和其他一些參數組織而成。-->
  <dataNode name="dnTest1">
    <property name="dataSource">
      <dataSourceRef>dsTest[0]</dataSourceRef>
    </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>
 
  <!-- 資料來源定義,資料來源是一個具體的後端資料連線的表示。-->
  <dataSource name="dsTest" type="mysql">
    <property name="location">
      <location>192.168.15.130:3306/dbtest1</location>
      <location>192.168.15.130:3306/dbtest2</location>
      <location>192.168.15.130:3306/dbtest3</location>
    </property>
    <property name="user">root</property>
    <property name="password">123456</property>
    <property name="sqlMode">STRICT_TRANS_TABLES</property>
  </dataSource>
 
</cobar:schema>

(3)配置rule.xml(分庫分表規則)

<!DOCTYPE cobar:rule SYSTEM "rule.dtd">
<cobar:rule xmlns:cobar="http://cobar.alibaba.com/">
 
  <!-- 路由規則定義,定義什麼表,什麼欄位,採用什麼路由演算法 -->
  <tableRule name="rule1">
    <rule>
      <columns>id</columns>
      <algorithm><![CDATA[ func1(${id}) ]]></algorithm>
    </rule>
  </tableRule>
 
  <!-- 路由函數定義 -->
  <function name="func1" class="com.alibaba.cobar.route.function.PartitionByLong">
    <property name="partitionCount">2</property>
    <property name="partitionLength">512</property>
  </function>
 
</cobar:rule>

(4)配置server.xml(Cobar使用者名稱、密碼、連接埠、叢集等)

<!DOCTYPE cobar:server SYSTEM "server.dtd">
<cobar:server xmlns:cobar="http://cobar.alibaba.com/">
 
  <!-- 系統參數定義,服務連接埠、管理連接埠,處理器個數、線程池等。 -->
  <!--
  <system>
    <property name="serverPort">8066</property>
    <property name="managerPort">9066</property>
    <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>
    <property name="clusterHeartbeatUser">_HEARTBEAT_USER_</property>
    <property name="clusterHeartbeatPass">_HEARTBEAT_PASS_</property>
  </system>
  -->
 
  <!-- 使用者訪問定義,使用者名稱、密碼、schema等資訊。 -->
  <user name="test">
    <property name="password">test</property>
    <property name="schemas">dbtest</property>
  </user>
  <!--
  <user name="root">
    <property name="password"></property>
  </user>
  -->
 
  <!-- 叢集列表定義,指定叢集節點的主機和權重,用於叢集間的心跳和用戶端負載平衡。 -->
  <!--
  <cluster>
    <node name="cobar1">
      <property name="host">127.0.0.1</property>
      <property name="weight">1</property>
    </node>
  </cluster>
   -->
  <!-- 隔離區定義,可以限定某個主機上只允許某個使用者登入。 -->
  <!--
  <quarantine>
    <host name="1.2.3.4">
      <property name="user">test</property>
    </host>
  </quarantine>
  -->
 
</cobar:server>

(5)啟動Cobar

./startup.sh

可以查看啟動成功日誌,logs下stdout.log
01:34:42,078 INFO  ===============================================
01:34:42,078 INFO  Cobar is ready to startup ...
01:34:42,079 INFO  Startup processors ...
01:34:44,115 INFO  Startup connector ...
01:34:44,118 INFO  Initialize dataNodes ...
01:34:44,703 INFO  dnTest3:0 init success
01:34:44,762 INFO  dnTest2:0 init success
01:34:44,915 INFO  dnTest1:0 init success
01:34:45,103 INFO  CobarManager is started and listening on 9066
01:34:45,133 INFO  CobarServer is started and listening on 8066
01:34:45,134 INFO  ===============================================
01:37:28,706 INFO  [thread=Processor1-H0,class=ServerConnection,host=127.0.0.1,port=51797,schema=dbtest]'test' login success
05:19:14,912 WARN  [thread=TimerExecutor3,class=ServerConnection,host=127.0.0.1,port=51797,schema=dbtest] idle timeout
07:41:16,532 INFO  [thread=Processor2-H0,class=ServerConnection,host=127.0.0.1,port=51809,schema=dbtest]'test' login success

(6)使用Cobar

mysql -h127.0.0.1 -utest -ptest -P8066 -Ddbtest
insert into tb1 values (1,now());

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.