Cobar介紹及配置


from:http://code.alibabatech.com/wiki/display/cobar/Home

Skip to end of metadata
 
Go to start of metadata
 
首頁 | 下載 | 產品文檔 | 產品規划 | 常見問答 | 需求管理 | 聯系我們

概述

Cobar是關系型數據的分布式處理系統,它可以在分布式的環境下看上去像傳統數據庫一樣為您提供海量數據服務。

  • 產品在阿里巴巴B2B公司已經穩定運行了3年以上。
  • 目前已經接管了3000+個MySQL數據庫的schema,為應用提供數據服務。
  • 據最近統計cobar集群目前平均每天處理近50億次的SQL執行請求。

快速啟動

場景描述

  • 系統對外提供的數據庫名是dbtest,並且其中有兩張表tb1和tb2。
  • tb1表的數據被映射到物理數據庫dbtest1的tb1上。
  • tb2表的一部分數據被映射到物理數據庫dbtest2的tb2上,另外一部分數據被映射到物理數據庫dbtest3的tb2上。
    如下圖所示:

步驟一:環境准備

  • 軟件准備

    操作系統: 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文件)

  • 數據准備

    假設本文MySQL所在服務器IP為192.168.0.1,端口為3306,用戶名為test,密碼為空,我們需要創建schema:dbtest1、dbtest2、dbtest3,table:tb1、tb2,腳本如下:

    數據庫創建腳本
    ?
    #創建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));

步驟二:部署和配置Cobar

請確保機器上設置了JAVA環境變量JAVA_HOME
  • 下載Cobar壓縮文件並解壓,進入conf目錄可以看到schema.xml, rule.xml, server.xml等相關的配置文件
    ?
    wget http: //code .alibabatech.com /mvn/releases/com/alibaba/cobar/cobar-server/1 .2.4 /cobar-server-1 .2.4. tar .gz
    tar zxf cobar-server-1.2.4. tar .gz
    cd cobar-server-1.2.4 #可以看到bin,conf,lib,logs四個目錄
  • schema.xml配置如下(注意:schema.xml包含MySQL的IP、端口、用戶名、密碼等配置,您需要按照注釋替換為您的MySQL信息。)
    schema.xml 配置
    ?
    <? xml version = "1.0" encoding = "UTF-8" ?>
    <!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.0.1:3306/dbtest1</ location > <!--注意:替換為您的MySQL IP和Port-->
           < location >192.168.0.1:3306/dbtest2</ location > <!--注意:替換為您的MySQL IP和Port-->
           < location >192.168.0.1:3306/dbtest3</ location > <!--注意:替換為您的MySQL IP和Port-->
         </ property >
         < property name = "user" >test</ property > <!--注意:替換為您的MySQL用戶名-->
         < property name = "password" ></ property > <!--注意:替換為您的MySQL密碼-->
         < property name = "sqlMode" >STRICT_TRANS_TABLES</ property >
       </ dataSource >
    </ cobar:schema >
  • rule.xml配置如下(本文僅以數字類型的id字段作為拆分字段,將數據拆分到兩個庫中。)
    rule.xml 配置
    ?
    <? xml version = "1.0" encoding = "UTF-8" ?>
    <!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 >
  • server.xml配置如下
    server.xml 配置
    ?
    <? xml version = "1.0" encoding = "UTF-8" ?>
    <!DOCTYPE cobar:server SYSTEM "server.dtd">
    < cobar:server xmlns:cobar = "http://cobar.alibaba.com/" >
      
       <!--定義Cobar用戶名,密碼-->
       < user name = "test" >
         < property name = "password" >test</ property >
         < property name = "schemas" >dbtest</ property >
       </ user >
    </ cobar:server >

步驟三:啟動和使用Cobar

  • 啟動Cobar,進入bin目錄可以看到Cobar的啟動、停止與重啟腳本
    ?
    . /startup .sh #Cobar進程名為CobarStartup
  • 查看logs目錄下stdout.log, 啟動成功日志如下
    ?
    10 : 54 : 19 , 264 INFO  ===============================================
    10 : 54 : 19 , 265 INFO  Cobar is ready to startup ...
    10 : 54 : 19 , 265 INFO  Startup processors ...
    10 : 54 : 19 , 443 INFO  Startup connector ...
    10 : 54 : 19 , 446 INFO  Initialize dataNodes ...
    10 : 54 : 19 , 470 INFO  dnTest1: 0 init success
    10 : 54 : 19 , 472 INFO  dnTest3: 0 init success
    10 : 54 : 19 , 473 INFO  dnTest2: 0 init success
    10 : 54 : 19 , 481 INFO  CobarManager is started and listening on 9066
    10 : 54 : 19 , 483 INFO  CobarServer is started and listening on 8066
    10 : 54 : 19 , 484 INFO  ===============================================
  • 訪問Cobar同訪問MySQL的方式完全相同, 常用訪問方式如下(注意:本文將Cobar部署在192.168.0.1這台機器上,否則請替換為您的Cobar所在IP,其他信息不變)
    ?
    #命令行
    mysql -h192. 168.0 . 1 -utest -ptest -P8066 -Ddbtest
      
    #JDBC(建議 5.1 以上的mysql driver版本)
    Class.forName( "com.mysql.jdbc.Driver" );
    Connection conn = DriverManager.getConnection( "jdbc:mysql://192.168.0.1:8066/dbtest" , "test" , "test" );
    ......
  • SQL執行示例,執行語句時與使用傳統單一數據庫無區別
    ?
    mysql>show databases;                                                #dbtest1、dbtest2、dbtest3對用戶透明
    + ----------+
    | DATABASE |
    + ----------+
    | dbtest   |
    + ----------+
      
    mysql>show tables;                                                   #dbtest中有兩張表tb1和tb2
    + -------------------+
    | Tables_in_dbtest1 |
    + -------------------+
    | tb1               |
    | tb2               |
    + -------------------+
      
    mysql> insert into tb1 (id, gmt) values (1, now());                   #向表tb1插入一條數據
    mysql> insert into tb2 (id, val) values (1, "part1" );                 #向表tb2插入一條數據
    mysql> insert into tb2 (id, val) values (2, "part1" ), (513, "part2" ); #向表tb2同時插入多條數據
    mysql> select * from tb1;                                             #查詢表tb1,驗證數據被成功插入
    + ----+---------------------+
    | id | gmt                 |
    + ----+---------------------+
    |  1 | 2012-06-12 15:00:42 |
    + ----+---------------------+
      
    mysql> select * from tb2;                                             #查詢tb2,驗證數據被成功插入
    + -----+-------+
    | id  | val   |
    + -----+-------+
    |   1 | part1 |
    |   2 | part1 |
    | 513 | part2 |
    + -----+-------+
      
    mysql> select * from tb2 where id in (1, 513);                        #根據id查詢
    + -----+-------+
    | id  | val   |
    + -----+-------+
    |   1 | part1 |
    | 513 | part2 |
    + -----+-------+
  • 查看后端MySQL數據庫dbtest1,dbtest2和dbtest3,驗證數據分布在不同的庫中
Labels:
cobar cobar Delete
quickstart quickstart Delete
doc doc Delete
Enter labels to add to this page:
Please wait 
 
 
Looking for a label? Just start typing.
  1. 六月 14, 2012

    Anonymous

    請問如何配置HA, 如果做數據遷移?

    1. 六月 14, 2012

      schema.xml中對應的dataNode可以配置心跳探測語句,並可以自動和手動切換,詳細的管理手冊和開發手冊正在准備中。

      1. 六月 20, 2012

        Anonymous

        打算在一個產品中采用corba,
        期待詳細的管理手冊和開發手冊!!

  2. 六月 14, 2012

    Anonymous

    順便說一下,該產品太強大了,使用也非常簡單.... 期待更新....

    1. 六月 14, 2012

      多謝支持,歡迎多提意見和建議。

      1. 六月 15, 2012

        Anonymous

        Woo, 無法注冊,不過該項目確實很方便易用,而且很容易被靈活且幾乎無縫的加入到項目中.
        我已經安排人員研究該項目了,由於文檔還不完善,看來只能通過閱讀dtd和研究部分源代碼來了解了.
        其實該項目的性能測試指標和數據可否貼出來呢?
        不過我也已經安排人員在初步研究完成后先利用虛擬環境做性能測試了.
        祝你們的該項目發展順利,該項目的設計思路實在是好,簡單清晰。

        另,作為該項目的功能模塊或子項目,我相信會有很多開發人員系統集成memcached的分片處理的.
        希望你們可以采納我的建議,加入到你們Jira的Backlogs里面,

        1. 六月 15, 2012

          歡迎,詳細文檔正在准備當中,為了對用戶負責我們現階段會對文檔本身做詳細校對,確保用戶不會因為文檔里的手誤而帶來煩惱。
          您的建議也非常好,后期我們可以保持進一步的聯系。
          雖然該產品在阿里內部已經run了3年以上了,但是作為開源我們才剛剛准備,還有很多地方百廢待興,所以歡迎大家共同建設。

  3. 六月 15, 2012

    Anonymous

    Hi, 我按照上面的教程把整個環境搭起來了,跑起來也OK。
    環境:MySql 5.5.25布署在CentOS 64bit下面, Cobar布署在Win7上面,JDK 1.6
    遇到了一個問題,就是用Cobar如何做分頁:

    dbtest2.tb2的數據如下:
    ---------------------------------

    id val created_on

    ---------------------------------

    1 zhangshan 2012-06-15 02:04:25
    2 lisi 2012-06-15 02:04:56
    3 wangwu 2012-06-15 02:05:05
    4 jimliu 2012-06-15 02:05:11
    5 jacky 2012-06-15 02:05:17
    511 elvis 2012-06-15 02:12:14
    512 leon 2012-06-15 02:30:30

    ---------------------------------

    dbtest3.tb2的數據如下:
    ------------------------------

    id val created_on

    ------------------------------

    512 guson 2012-06-15 02:29:04
    513 maple 2012-06-15 02:32:24
    1000 maple 2012-06-15 02:35:17

    ------------------------------

    現在我對Cobar發送一條查詢語句:
    mysql> select * from tb2 order by created_on desc limit 0,2;

    返回結果如下:
    ------------------------------

    id val created_on

    ------------------------------

    512 leon 2012-06-15 02:30:30
    511 elvis 2012-06-15 02:12:14
    1000 maple 2012-06-15 02:35:17
    513 maple 2012-06-15 02:32:24

    ------------------------------

    我發現返回的結果是分別取了dbtest2和dbtest3下面的tb2的按created_on排倒序的前兩條,所以結果就有四條數據。 這樣的話做分頁還需要編寫代碼對返回的結果再處理。
    請問Cobar對於這個問題有沒有解決方案?

    1. 六月 15, 2012

      是的,跨庫的排序、分頁當前版本不支持。需要應用處理,當前版本的使用約束我們后面會給出。
      所以查詢盡量要帶上拆分字段,避免跨庫的這類操作。
      這個特性我們正在開發期望能有更好的支持,但是對於大數據集的merge可能會有所限制。

  4. 六月 19, 2012

    Anonymous

    牆裂求用戶文檔, 未完成的也可以先放出來一睹為快嘛

    1. 六月 19, 2012

      謝謝關注,我們的同事們正在忙碌的整理中,相信很快就會放出,請耐心等待。

  5. 六月 19, 2012

    Anonymous

    不知道cobar是否支持擴展其它類型數據庫?還是只會支持MySQL?
    確實是個非常棒的項目,持續關注~

    1. 六月 19, 2012

      后期計划會對PostgresQL數據庫做支持增強

  6. 七月 01, 2012

    Anonymous

    很是敬佩這里技術開源精神,也十分看好這款產品。期待文檔!秉承開源精神,也很樂意幫忙開發或完善文檔、或提供任何力所能及的幫助!linuxedu@foxmail.com

    1. 七月 02, 2012

      謝謝支持!我們也很歡迎大家的參與,具體可以先發郵件給我們:ali-cobar@googlegroups.com或者ali-cobar@list.alibaba-inc.com

  7. 七月 02, 2012

    Anonymous

    新手使用cobar有問題請教,按照參考教程步驟走,如果在dbtest1上跟dbtest2和dbtest3上創建同樣的tb2表的話,從8066端口進入mysql的話,show tables,就能看到兩個tb2表,如果王tb2表中插入的話,全部插入到了后端dbtest1數據庫中的表中,其他兩個后端數據庫的tb2表沒有數據,這樣的情況該如何設置呢?
    mysql -utest -ptest -P8066 -h192.168.2.100

    mysql> show tables;

    -------------------

    Tables_in_dbtest1

    -------------------

    tb1
    tb2
    tb2

    -------------------

    1. 七月 02, 2012

      可能是你在定義表以及規則時有問題,貼一下你的schema.xml和rule.xml的配置文件以及執行插入的SQL語句或者將信息發到我們的郵件列表中。

      1. 七月 03, 2012

        Anonymous

        謝謝你的回復,你好,下面是schema.xml的配置。應該要如何修改呢?
        <!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.2.100:3306/dbtest1</location>
        <location>192.168.2.100:3306/dbtest2</location>
        <location>192.168.2.100:3306/dbtest3</location>
        </property>
        <property name="user">root</property>
        <property name="password">root</property>
        <property name="sqlMode">STRICT_TRANS_TABLES</property>
        </dataSource>

        這是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($

        Unknown macro: {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>

        謝謝!

        1. 七月 04, 2012

          Anonymous

          不錯非常實用,而且也很簡單

    2. 十一月 14, 2012

      Anonymous

      你試過沒。。按找默認rule,就算你在dbtest1中有tb2的話,在插入記錄的時候也不會放到這個里面,而會根據rule放到dbtest2或者dbtest3中的tb2里頭。。我已經試過了。。分布式存儲依然成功。

      1. 八月 02, 2013

        Anonymous

        我也研究了好幾周了,還是沒配置好,求指點,老是抱這個錯誤怎么解決呢,求賜教啊我郵箱:ft3058@163.com
        14:20:44,095 INFO ===============================================
        14:20:44,095 INFO Cobar is ready to startup ...
        14:20:44,095 INFO Startup processors ...
        14:20:44,220 INFO Startup connector ...
        14:20:44,220 INFO Initialize dataNodes ...
        14:20:44,236 WARN dnTest1:0 init error.
        java.util.concurrent.ExecutionException: java.lang.ArrayIndexOutOfBoundsException: 65
        at java.util.concurrent.FutureTask$Sync.innerGet(FutureTask.java:232)
        at java.util.concurrent.FutureTask.get(FutureTask.java:91)
        at com.alibaba.cobar.mysql.bio.MySQLChannel.connect(MySQLChannel.java:185)
        at com.alibaba.cobar.mysql.MySQLDataSource.getChannel(MySQLDataSource.java:159)
        at com.alibaba.cobar.mysql.MySQLDataNode.initSource(MySQLDataNode.java:357)
        at com.alibaba.cobar.mysql.MySQLDataNode.init(MySQLDataNode.java:78)
        at com.alibaba.cobar.CobarServer.startup(CobarServer.java:124)
        at com.alibaba.cobar.CobarStartup.main(CobarStartup.java:36)
        Caused by: java.lang.ArrayIndexOutOfBoundsException: 65
        at com.alibaba.cobar.mysql.MySQLMessage.readUB4(MySQLMessage.java:91)
        at com.alibaba.cobar.net.mysql.HandshakePacket.read(HandshakePacket.java:64)
        at com.alibaba.cobar.mysql.bio.MySQLChannel.handshake(MySQLChannel.java:324)
        at com.alibaba.cobar.mysql.bio.MySQLChannel.access$000(MySQLChannel.java:66)
        at com.alibaba.cobar.mysql.bio.MySQLChannel$1.call(MySQLChannel.java:180)
        at com.alibaba.cobar.mysql.bio.MySQLChannel$1.call(MySQLChannel.java:176)
        at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:303)
        at java.util.concurrent.FutureTask.run(FutureTask.java:138)
        at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:886)
        at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:908)
        at java.lang.Thread.run(Thread.java:619)
        14:20:44,236 ERROR #!Cobar#dnTest1 init failure
        14:20:44,236 WARN dnTest3:0 init error.
        java.util.concurrent.ExecutionException: java.lang.ArrayIndexOutOfBoundsException: 65
        at java.util.concurrent.FutureTask$Sync.innerGet(FutureTask.java:232)
        at java.util.concurrent.FutureTask.get(FutureTask.java:91)
        at com.alibaba.cobar.mysql.bio.MySQLChannel.connect(MySQLChannel.java:185)
        at com.alibaba.cobar.mysql.MySQLDataSource.getChannel(MySQLDataSource.java:159)
        at com.alibaba.cobar.mysql.MySQLDataNode.initSource(MySQLDataNode.java:357)
        at com.alibaba.cobar.mysql.MySQLDataNode.init(MySQLDataNode.java:78)
        at com.alibaba.cobar.CobarServer.startup(CobarServer.java:124)
        at com.alibaba.cobar.CobarStartup.main(CobarStartup.java:36)
        Caused by: java.lang.ArrayIndexOutOfBoundsException: 65
        at com.alibaba.cobar.mysql.MySQLMessage.readUB4(MySQLMessage.java:91)
        at com.alibaba.cobar.net.mysql.HandshakePacket.read(HandshakePacket.java:64)
        at com.alibaba.cobar.mysql.bio.MySQLChannel.handshake(MySQLChannel.java:324)
        at com.alibaba.cobar.mysql.bio.MySQLChannel.access$000(MySQLChannel.java:66)
        at com.alibaba.cobar.mysql.bio.MySQLChannel$1.call(MySQLChannel.java:180)
        at com.alibaba.cobar.mysql.bio.MySQLChannel$1.call(MySQLChannel.java:176)
        at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:303)
        at java.util.concurrent.FutureTask.run(FutureTask.java:138)
        at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:886)
        at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:908)
        at java.lang.Thread.run(Thread.java:619)
        14:20:44,236 ERROR #!Cobar#dnTest3 init failure
        14:20:44,236 WARN dnTest2:0 init error.
        java.util.concurrent.ExecutionException: java.lang.ArrayIndexOutOfBoundsException: 65
        at java.util.concurrent.FutureTask$Sync.innerGet(FutureTask.java:232)
        at java.util.concurrent.FutureTask.get(FutureTask.java:91)
        at com.alibaba.cobar.mysql.bio.MySQLChannel.connect(MySQLChannel.java:185)
        at com.alibaba.cobar.mysql.MySQLDataSource.getChannel(MySQLDataSource.java:159)
        at com.alibaba.cobar.mysql.MySQLDataNode.initSource(MySQLDataNode.java:357)
        at com.alibaba.cobar.mysql.MySQLDataNode.init(MySQLDataNode.java:78)
        at com.alibaba.cobar.CobarServer.startup(CobarServer.java:124)
        at com.alibaba.cobar.CobarStartup.main(CobarStartup.java:36)
        Caused by: java.lang.ArrayIndexOutOfBoundsException: 65
        at com.alibaba.cobar.mysql.MySQLMessage.readUB4(MySQLMessage.java:91)
        at com.alibaba.cobar.net.mysql.HandshakePacket.read(HandshakePacket.java:64)
        at com.alibaba.cobar.mysql.bio.MySQLChannel.handshake(MySQLChannel.java:324)
        at com.alibaba.cobar.mysql.bio.MySQLChannel.access$000(MySQLChannel.java:66)
        at com.alibaba.cobar.mysql.bio.MySQLChannel$1.call(MySQLChannel.java:180)
        at com.alibaba.cobar.mysql.bio.MySQLChannel$1.call(MySQLChannel.java:176)
        at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:303)
        at java.util.concurrent.FutureTask.run(FutureTask.java:138)
        at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:886)
        at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:908)
        at java.lang.Thread.run(Thread.java:619)
        14:20:44,236 ERROR #!Cobar#dnTest2 init failure
        14:20:44,236 INFO CobarManager is started and listening on 9066
        14:20:44,251 INFO CobarServer is started and listening on 8066
        14:20:44,251 INFO ===============================================

  8. 七月 05, 2012

    Anonymous

    為什么網上關於Cobar這個產品的資料這么少?

    1. 七月 05, 2012

      因為之前我們沒有對外開源,也很少做對外介紹或者宣傳該產品。

  9. 七月 05, 2012

    Anonymous

    請問Cobar支持存儲過程、事務么?請問Cobar在未來可能支持Oracle么?

    1. 七月 05, 2012

      事務支持的,存儲過程沒做過測試,可能會遇到一些問題,因為我們內部對存儲過程的使用幾乎沒有,有也會建議去掉改用其他方式。
      對於oracle cobar-1.0.x系列是支持的,但是限制會比較多比如SQL語法不是full support,事務也不支持等,所以cobar-1.2.x以后暫時不支持oracle。

      1. 七月 05, 2012

        Anonymous

        回復非常及時,謝了:)

  10. 七月 16, 2012

    Anonymous

    請問Cobar在阿里巴巴內部主要用於支持哪些方面的應用,對網絡帶寬有沒有嚴格要求,有沒有事務管理

    1. 七月 16, 2012

      阿里B2B絕大部分使用mysql的都會使用cobar(包括分庫與不分庫的),單庫事務和數據庫一致,多庫使用二段協議(不能保證理論上的強一致性),詳細見產品文檔。網絡都是千兆

      1. 八月 02, 2013

        Anonymous

        你好,我按照上面配置好后運行cobar后提示下列錯誤:1、運行界面只顯示log4j:WARN 2013-08-02 10:11:11 [] load completed 2、在stdout.log中顯示
        10:19:46,767 INFO ===============================================
        10:19:46,767 INFO Cobar is ready to startup ...
        10:19:46,767 INFO Startup processors ...
        10:19:46,876 INFO Startup connector ...
        10:19:46,892 INFO Initialize dataNodes ...
        10:19:46,892 WARN dnTest1:0 init error.
        java.util.concurrent.ExecutionException: java.lang.ArrayIndexOutOfBoundsException: 65
        at java.util.concurrent.FutureTask$Sync.innerGet(FutureTask.java:232)
        at java.util.concurrent.FutureTask.get(FutureTask.java:91)
        at com.alibaba.cobar.mysql.bio.MySQLChannel.connect(MySQLChannel.java:185)
        at com.alibaba.cobar.mysql.MySQLDataSource.getChannel(MySQLDataSource.java:159)
        at com.alibaba.cobar.mysql.MySQLDataNode.initSource(MySQLDataNode.java:357)
        at com.alibaba.cobar.mysql.MySQLDataNode.init(MySQLDataNode.java:78)
        at com.alibaba.cobar.CobarServer.startup(CobarServer.java:124)
        at com.alibaba.cobar.CobarStartup.main(CobarStartup.java:36)
        Caused by: java.lang.ArrayIndexOutOfBoundsException: 65
        at com.alibaba.cobar.mysql.MySQLMessage.readUB4(MySQLMessage.java:91)
        at com.alibaba.cobar.net.mysql.HandshakePacket.read(HandshakePacket.java:64)
        at com.alibaba.cobar.mysql.bio.MySQLChannel.handshake(MySQLChannel.java:324)
        at com.alibaba.cobar.mysql.bio.MySQLChannel.access$000(MySQLChannel.java:66)
        at com.alibaba.cobar.mysql.bio.MySQLChannel$1.call(MySQLChannel.java:180)
        at com.alibaba.cobar.mysql.bio.MySQLChannel$1.call(MySQLChannel.java:176)
        at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:303)
        at java.util.concurrent.FutureTask.run(FutureTask.java:138)
        at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:886)
        at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:908)
        at java.lang.Thread.run(Thread.java:619)
        10:19:46,908 ERROR #!Cobar#dnTest1 init failure
        10:19:46,908 WARN dnTest3:0 init error.
        java.util.concurrent.ExecutionException: java.lang.ArrayIndexOutOfBoundsException: 65
        at java.util.concurrent.FutureTask$Sync.innerGet(FutureTask.java:232)
        at java.util.concurrent.FutureTask.get(FutureTask.java:91)
        at com.alibaba.cobar.mysql.bio.MySQLChannel.connect(MySQLChannel.java:185)
        at com.alibaba.cobar.mysql.MySQLDataSource.getChannel(MySQLDataSource.java:159)
        at com.alibaba.cobar.mysql.MySQLDataNode.initSource(MySQLDataNode.java:357)
        at com.alibaba.cobar.mysql.MySQLDataNode.init(MySQLDataNode.java:78)
        at com.alibaba.cobar.CobarServer.startup(CobarServer.java:124)
        at com.alibaba.cobar.CobarStartup.main(CobarStartup.java:36)
        Caused by: java.lang.ArrayIndexOutOfBoundsException: 65
        at com.alibaba.cobar.mysql.MySQLMessage.readUB4(MySQLMessage.java:91)
        at com.alibaba.cobar.net.mysql.HandshakePacket.read(HandshakePacket.java:64)
        at com.alibaba.cobar.mysql.bio.MySQLChannel.handshake(MySQLChannel.java:324)
        at com.alibaba.cobar.mysql.bio.MySQLChannel.access$000(MySQLChannel.java:66)
        at com.alibaba.cobar.mysql.bio.MySQLChannel$1.call(MySQLChannel.java:180)
        at com.alibaba.cobar.mysql.bio.MySQLChannel$1.call(MySQLChannel.java:176)
        at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:303)
        at java.util.concurrent.FutureTask.run(FutureTask.java:138)
        at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:886)
        at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:908)
        at java.lang.Thread.run(Thread.java:619)
        10:19:46,908 ERROR #!Cobar#dnTest3 init failure
        10:19:46,908 WARN dnTest2:0 init error.
        java.util.concurrent.ExecutionException: java.lang.ArrayIndexOutOfBoundsException: 65
        at java.util.concurrent.FutureTask$Sync.innerGet(FutureTask.java:232)
        at java.util.concurrent.FutureTask.get(FutureTask.java:91)
        at com.alibaba.cobar.mysql.bio.MySQLChannel.connect(MySQLChannel.java:185)
        at com.alibaba.cobar.mysql.MySQLDataSource.getChannel(MySQLDataSource.java:159)
        at com.alibaba.cobar.mysql.MySQLDataNode.initSource(MySQLDataNode.java:357)
        at com.alibaba.cobar.mysql.MySQLDataNode.init(MySQLDataNode.java:78)
        at com.alibaba.cobar.CobarServer.startup(CobarServer.java:124)
        at com.alibaba.cobar.CobarStartup.main(CobarStartup.java:36)
        Caused by: java.lang.ArrayIndexOutOfBoundsException: 65
        at com.alibaba.cobar.mysql.MySQLMessage.readUB4(MySQLMessage.java:91)
        at com.alibaba.cobar.net.mysql.HandshakePacket.read(HandshakePacket.java:64)
        at com.alibaba.cobar.mysql.bio.MySQLChannel.handshake(MySQLChannel.java:324)
        at com.alibaba.cobar.mysql.bio.MySQLChannel.access$000(MySQLChannel.java:66)
        at com.alibaba.cobar.mysql.bio.MySQLChannel$1.call(MySQLChannel.java:180)
        at com.alibaba.cobar.mysql.bio.MySQLChannel$1.call(MySQLChannel.java:176)
        at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:303)
        at java.util.concurrent.FutureTask.run(FutureTask.java:138)
        at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:886)
        at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:908)
        at java.lang.Thread.run(Thread.java:619)
        10:19:46,908 ERROR #!Cobar#dnTest2 init failure
        10:19:46,908 INFO CobarManager is started and listening on 9066
        10:19:46,908 INFO CobarServer is started and listening on 8066
        10:19:46,908 INFO ===============================================
        10:19:46,939 INFO [thread=Processor1-H0,class=ServerConnection,host=192.168.16.209,port=2690,schema=null]'HEARTBEAT_USER' login success

      2. 八月 02, 2013

        Anonymous

        請問這個問題怎么解決啊,是那些原因引起的,請一定抽出您寶貴的時間給予解答,謝謝

  11. 七月 17, 2012

    Anonymous

    請問cobar可以應用於廣域網上百台MySQL服務器的分布式系統嗎,阿里內部有沒有具體這么應用過

    1. 七月 17, 2012

      連通性和規模上是沒問題的,但是性能上需要考慮網絡延遲的因素,cobar在千兆網的環境下單台QPS可達8萬每秒左右,
      考慮到生產環境SQL的差異性一般建議2-4萬QPS。阿里內部,一般cobar和MySQL部署在同一IDC。

  12. 七月 17, 2012

    Anonymous

    文檔中說的SQL語句中的路由字段是要由應用程序填寫,還是Cobar填寫?

    1. 七月 17, 2012

      路由字段實際上是指表的某一列,因為Cobar需要根據表中某一列的值對表進行 行拆分
      用戶在配置文件中設定路由字段,Cobar根據用戶的配置提取SQL中的路由字段值來判斷如何路由。

      比如:

      ?
      # 在schema.xml中配置tb2按照路由規則rule1路由
      < schema name = "dbtest" dataNode = "dnTest1" >
           < table name = "tb2" dataNode = "dnTest2,dnTest3" rule = "rule1" />
         </ schema >
      ?
      # 在rule.xml中設置rule1的路由字段為id
      < tableRule name = "rule1" >
           < rule >
             < columns >id</ columns >
             < algorithm > <![CDATA[ func1(${id})]]> </ algorithm >
           </ rule >
         </ tableRule >

      上述兩個配置便是設定了tb2這個表的路由字段為id。
      當執行SQL語句,如 select * from tb2 where id = 1,Cobar便會提取該SQL語句中的id的值(本例中為1),來判斷語句如何路由。

      1. 七月 18, 2012

        Anonymous

        Cobar相當於一個中間件,這個中間件只有一台服務器上會安裝,還是每個DATANODE有一個獨立的Cobar,如果只有一台機上有Cobar,好像安全性就大大降低了。
        Cobar能不能應用於集群后的數據庫,也就是多個集群的分布式。

        1. 七月 18, 2012

          這個完全取決於你怎么部署,另外cobar有訪問用戶和schema權限的控制的,並有隔離區的概念。
          假設cobar+MySQL節點是一套關系型數據分布式處理系統的話,你可以把cobar理解成是系統的分布式處理的一部分。

          1. 七月 18, 2012

            Anonymous

            有沒有QQ群

            1. 七月 18, 2012

              因為公司內部用QQ溝通比較少,所以暫時沒有QQ群,一般以郵件組的方式溝通比較多。
              不過為了更加方便的交流,QQ群也是個不錯的方式,如果我們建好了,會在聯系我們告訴大家。

              1. 八月 22, 2013

                Anonymous

                你好,請問按照上面的配置如果id超過1024時,給數據苦力插入數據時他是按什么規則插到兩個庫里去的

            2. 七月 18, 2012

              QQ群已建好,群號250345828,歡迎加入討論

              1. 十月 16, 2012

                Anonymous

                群滿了

  13. 七月 28, 2012

    Anonymous

    能否補充一下:主從結構的讀寫分離、負載均衡的例子

    1. 七月 30, 2012

      考慮到讀寫的延遲,暫時不支持讀寫分離。

  14. 七月 30, 2012

    Anonymous

    既然Cobar不支持跨庫的連接操作,那么是否有對應的解決方案呢?

    1. 七月 30, 2012

      設計時盡量不要出現跨庫的join,目前只能由應用端去解決和處理該問題。

  15. 八月 07, 2012

    Anonymous

    Cobar支持存儲過程的調用嗎?
    比如路由到一台mysql服務器上調用其存儲過程?

  16. 八月 13, 2012

    Anonymous

    語句:
    SELECT aid FROM cdb_attachments a LEFT JOIN cdb_posts p ON p.authorid=a.uid WHERE p.tid

    ='124434943' AND a.tid='124434943' AND p.first =1 limit 1

    規則cdb_posts表按tid%1024取模切分,長度為0-511 512-1023兩個
    post_shard0:包含cdb_posts和其他表 cdb_posts規則:0<= cdb_post <=511
    post_shard1:只包含cdb_posts表 cdb_posts規則:512<= cdb_post <=1023

    #########################################
    #理論上: #
    #124434943%1024 ===> post_shard0 #
    #cdb_posts ===> post_shard0 #
    #其他表 ===》post_shard1 #
    #cdb_attachments ===>post_shard1 #
    #########################################

    實際上都是發送到===> post_shard0,但是在post_shard0上木有cdb_attachments就會引起報錯,是這種

    情況的跨庫join么?是這么理解么

    1. 八月 13, 2012

      Anonymous

      說錯 應該是
      post_shard0:只包含cdb_posts表 cdb_posts規則:0<= cdb_post <=511
      post_shard1:包含cdb_posts和其他表 cdb_posts規則:512<= cdb_post <=1023

  17. 八月 24, 2012

    Anonymous

    請問打包好的版本只支持id字段切分嗎?
    如果自定義的話,修改何處的代碼呢?
    謝謝!

  18. 九月 05, 2012

    Anonymous

    哎呀 不支持分頁 排序 這些 好像很難在項目應用中實現啊?

    有沒有什么建議 謝謝~!

  19. 九月 14, 2012

    Anonymous

    粗略看了一下,跟AMOEBA很相似,不支持的功能也很相似。

    以后能否支持Oracle,支持多表、跨庫表Join

  20. 九月 21, 2012

    Anonymous

    在cobar-server-1.2.6版本里,按照默認配置啟動了cobar服務,當通過offline命令設置后;發現如下情況:
    一:查看狀態
    mysql> show cobar_status;
    ERROR 1053 (HY000): The server has been shutdown
    二:顯示數據庫
    mysql> show databases;
    ----------

    DATABASE

    ----------

    dbtest

    ----------
    1 row in set (0.00 sec)
    三:執行數據插入操作能夠成功;
    那么,請問,在offline命令操作后,是否要限制對數據庫的操作呢?

  21. 十月 11, 2012

    Anonymous

    對於cobar那些限制,如分頁、排序、子查詢、join在客戶端處理有什么相關處理代碼能提供參考嗎?因為畢竟這些是開發中查用的,如果這些都不支持,似乎都沒有多大意義使用cobar了。

  22. 十月 11, 2012

    Anonymous

    那些限制在淘寶的應用也是cobar實現的嗎?如果是那又是如何實現的,或者有何較好的思路呢?難道淘寶上的那些查詢都不用排序、分頁、join?希望能否提供一些客戶端處理的思路

  23. 十月 15, 2012

    Anonymous

    新手使用,按教程搭建起環境,唯一區別是在dbtet1中也創建了tb2表。

    一、有兩處配置做了修改,其他都按教程配置:
    1、配置文件 :schema.xml修改如下,其他都按教程配置
    <!-- schema定義 -->
    <schema name="dbtest" dataNode="dnTest1">
    <table name="tb2" dataNode="dnTest1,dnTest2,dnTest3" rule="rule1" />
    </schema>
    2、rule.xml修改了如下,其他都按教程部署
    <property name="partitionCount">3</property>

    二、運行后,但是在mysql中看到了兩個tb2,請問是那個地方配置有問題。
    mysql> show tables;
    ------------------

    Tables_in_dbtest

    ------------------

    tb2
    tb1
    tb2

    ------------------
    3 rows in set (0.00 sec)

  24. 十一月 01, 2012

    Anonymous

    大家好,我查詢cobar 日子發現這個警告。是什么意思能幫我解答下我?謝謝
    15:07:53,796 WARN [thread=Processor3-R,class=ServerConnection,host=105.182.68.12,port=59605,schema=farm]
    java.nio.channels.AsynchronousCloseException
    at java.nio.channels.spi.AbstractInterruptibleChannel.end(AbstractInterruptibleChannel.java:185)
    at sun.nio.ch.SocketChannelImpl.read(SocketChannelImpl.java:272)
    at com.alibaba.cobar.net.AbstractConnection.read(AbstractConnection.java:160)
    at com.alibaba.cobar.net.NIOReactor$R.read(NIOReactor.java:131)
    at com.alibaba.cobar.net.NIOReactor$R.run(NIOReactor.java:99)
    at java.lang.Thread.run(Thread.java:662)

    1. 十一月 08, 2012

      這個是在客戶端主動非正常斷開連接時可能會報這樣的異常,如果不是很頻繁的報可以忽略掉。

  25. 十一月 02, 2012

    Anonymous

    支持開源

    1. 十一月 13, 2012

      Anonymous

      I'm so glad that the ienntret allows free info like this!

    2. 十一月 14, 2012

      Anonymous

      DXW8Y5 , [url=http://zbfdutnoujxj.com/]zbfdutnoujxj[/url], [link=http://lepblryeqftx.com/]lepblryeqftx[/link], http://pebueqemfnhp.com/

    3. 十一月 16, 2012

      Anonymous

      yUDDdp <a href="http://jixsjkhrymbt.com/">jixsjkhrymbt</a>

  26. 十一月 06, 2012

    Anonymous

    17:07:56,613 INFO ===============================================
    17:07:56,614 INFO Cobar is ready to startup ...
    17:07:56,614 INFO Startup processors ...
    17:07:56,721 INFO Startup connector ...
    17:07:56,723 INFO Initialize dataNodes ...
    17:08:06,748 WARN dnTest1:0 init error.
    java.util.concurrent.TimeoutException
    at java.util.concurrent.FutureTask$Sync.innerGet(FutureTask.java:228)
    at java.util.concurrent.FutureTask.get(FutureTask.java:91)
    at com.alibaba.cobar.server.node.MySQLChannel.connect(MySQLChannel.java:185)
    at com.alibaba.cobar.server.node.MySQLDataSource.getChannel(MySQLDataSource.java:156)
    at com.alibaba.cobar.server.node.MySQLDataNode.initSource(MySQLDataNode.java:287)
    at com.alibaba.cobar.server.node.MySQLDataNode.init(MySQLDataNode.java:61)
    at com.alibaba.cobar.CobarServer.startup(CobarServer.java:129)
    at com.alibaba.cobar.CobarStartup.main(CobarStartup.java:37)
    17:08:06,751 ERROR #!Cobar#dnTest1 init failure
    17:08:16,757 WARN dnTest3:0 init error.
    java.util.concurrent.TimeoutException
    at java.util.concurrent.FutureTask$Sync.innerGet(FutureTask.java:228)
    at java.util.concurrent.FutureTask.get(FutureTask.java:91)
    at com.alibaba.cobar.server.node.MySQLChannel.connect(MySQLChannel.java:185)
    at com.alibaba.cobar.server.node.MySQLDataSource.getChannel(MySQLDataSource.java:156)
    at com.alibaba.cobar.server.node.MySQLDataNode.initSource(MySQLDataNode.java:287)
    at com.alibaba.cobar.server.node.MySQLDataNode.init(MySQLDataNode.java:61)
    at com.alibaba.cobar.CobarServer.startup(CobarServer.java:129)
    at com.alibaba.cobar.CobarStartup.main(CobarStartup.java:37)
    17:08:16,757 ERROR #!Cobar#dnTest3 init failure
    17:08:26,7java.util.concurrent.TimeoutException
    at java.util.concurrent.FutureTask$Sync.innerGet(FutureTask.java:228)
    at java.util.concurrent.FutureTask.get(FutureTask.java:91)
    at com.alibaba.cobar.server.node.MySQLChannel.connect(MySQLChannel.java:185)
    at com.alibaba.cobar.server.node.MySQLDataSource.getChannel(MySQLDataSource.java:156)
    at com.alibaba.cobar.server.node.MySQLDataNode.initSource(MySQLDataNode.java:287)
    at com.alibaba.cobar.server.node.MySQLDataNode.init(MySQLDataNode.java:61)
    at com.alibaba.cobar.CobarServer.startup(CobarServer.java:129)
    at com.alibaba.cobar.CobarStartup.main(CobarStartup.java:37)
    17:08:26,767 ERROR #!Cobar#dnTest2 init failure67 WARN dnTest2:0 init error.
    三個數據源都未啟動怎么回事兒?

    1. 十一月 08, 2012

      檢查你的數據源配置信息是否正確,或者網絡的連通性或者延遲是不是比較大,也可以考慮把timeout時間配置的長一點,默認連接超時時間大概是10秒。

  27. 十一月 06, 2012

    Anonymous

    本地機器啟動cobar,一直報錯,遠程主機關閉連接, 這個是什么原因呢?防火牆?
    22:57:16,897 INFO ===============================================
    22:57:57,590 INFO [thread=Processor1-H0,class=ServerConnection,host=127.0.0.1,port=57699,schema=dbtest]'test' login success
    22:57:57,895 WARN [thread=Processor1-R,class=ServerConnection,host=127.0.0.1,port=57699,schema=dbtest]
    java.io.IOException: 遠程主機強迫關閉了一個現有的連接。
    at sun.nio.ch.SocketDispatcher.read0(Native Method)
    at sun.nio.ch.SocketDispatcher.read(SocketDispatcher.java:25)
    at sun.nio.ch.IOUtil.readIntoNativeBuffer(IOUtil.java:198)
    at sun.nio.ch.IOUtil.read(IOUtil.java:171)
    at sun.nio.ch.SocketChannelImpl.read(SocketChannelImpl.java:245)
    at com.alibaba.cobar.net.AbstractConnection.read(AbstractConnection.java:160)
    at com.alibaba.cobar.net.NIOReactor$R.read(NIOReactor.java:131)
    at com.alibaba.cobar.net.NIOReactor$R.run(NIOReactor.java:99)
    at java.lang.Thread.run(Thread.java:662)

  28. 十一月 09, 2012

    Anonymous

    這個中間件好強大,我想問一下這個問題,在淘寶有一個Tengine,是nginx基礎上做的延伸開發,其中有這么一段配置
    http {

    upstream dbgroup

    Unknown macro: { drizzle_server host1}


    server {
    location /mysql

    Unknown macro: { set $sql "select * from cats"; drizzle_query $sql; drizzle_pass dbgroup; rds_json on; }


    }
    }

    里面配置了mysql的信息,我的問題是,如果使用這個中間件,我是不是就不用在dbgroup中配置多個mysql數據庫了?
    因為按照你的說法,我只要配置一個數據庫,就可以享受集群數據庫的服務了,
    謝謝!

  29. 十一月 13, 2012

    Anonymous

    When you think about it, that's got to be the right awnser.

  30. 十一月 14, 2012

    Anonymous

    CEySeZ <a href="http://pkwhvrvchtyo.com/">pkwhvrvchtyo</a>

  31. 十一月 14, 2012

    Anonymous

    W569Yu , [url=http://iuncvbixrbyj.com/]iuncvbixrbyj[/url], [link=http://kdthxodvrkgv.com/]kdthxodvrkgv[/link], http://qtwuibnsrhli.com/

  32. 十一月 14, 2012

    Anonymous

    java.lang.StackOverflowError
    at java.lang.ClassLoader.defineClass1(Native Method)
    at java.lang.ClassLoader.defineClassCond(ClassLoader.java:631)
    at java.lang.ClassLoader.defineClass(ClassLoader.java:615)
    at java.security.SecureClassLoader.defineClass(SecureClassLoader.java:141)
    at java.net.URLClassLoader.defineClass(URLClassLoader.java:283)
    at java.net.URLClassLoader.access$000(URLClassLoader.java:58)
    at java.net.URLClassLoader$1.run(URLClassLoader.java:197)
    at java.security.AccessController.doPrivileged(Native Method)
    at java.net.URLClassLoader.findClass(URLClassLoader.java:190)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:306)
    at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:301)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:247)
    at java.lang.ClassLoader.defineClass1(Native Method)
    at java.lang.ClassLoader.defineClassCond(ClassLoader.java:631)
    at java.lang.ClassLoader.defineClass(ClassLoader.java:615)
    at java.security.SecureClassLoader.defineClass(SecureClassLoader.java:141)
    at java.net.URLClassLoader.defineClass(URLClassLoader.java:283)
    at java.net.URLClassLoader.access$000(URLClassLoader.java:58)
    at java.net.URLClassLoader$1.run(URLClassLoader.java:197)
    at java.security.AccessController.doPrivileged(Native Method)
    at java.net.URLClassLoader.findClass(URLClassLoader.java:190)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:306)
    at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:301)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:247)
    at java.lang.ClassLoader.defineClass1(Native Method)
    at java.lang.ClassLoader.defineClassCond(ClassLoader.java:631)
    at java.lang.ClassLoader.defineClass(ClassLoader.java:615)
    at java.security.SecureClassLoader.defineClass(SecureClassLoader.java:141)
    at java.net.URLClassLoader.defineClass(URLClassLoader.java:283)
    at java.net.URLClassLoader.access$000(URLClassLoader.java:58)
    at java.net.URLClassLoader$1.run(URLClassLoader.java:197)
    at java.security.AccessController.doPrivileged(Native Method)
    at java.net.URLClassLoader.findClass(URLClassLoader.java:190)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:306)
    at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:301)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:247)
    at java.lang.ClassLoader.defineClass1(Native Method)
    at java.lang.ClassLoader.defineClassCond(ClassLoader.java:631)
    at java.lang.ClassLoader.defineClass(ClassLoader.java:615)
    at java.security.SecureClassLoader.defineClass(SecureClassLoader.java:141)
    at java.net.URLClassLoader.defineClass(URLClassLoader.java:283)
    at java.net.URLClassLoader.access$000(URLClassLoader.java:58)
    at java.net.URLClassLoader$1.run(URLClassLoader.java:197)
    at java.security.AccessController.doPrivileged(Native Method)
    at java.net.URLClassLoader.findClass(URLClassLoader.java:190)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:306)
    at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:301)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:247)
    at com.alibaba.cobar.parser.recognizer.FunctionManager.<init>(FunctionManager.java:256)
    at com.alibaba.cobar.parser.recognizer.FunctionManager.<clinit>(FunctionManager.java:233)
    at com.alibaba.cobar.loader.RuleLoader.<init>(RuleLoader.java:58)
    at com.alibaba.cobar.loader.SchemaLoader.<init>(SchemaLoader.java:52)
    at com.alibaba.cobar.loader.ConfigLoader.<init>(ConfigLoader.java:47)
    at com.alibaba.cobar.CobarConfig.<init>(CobarConfig.java:58)
    at com.alibaba.cobar.CobarServer.<init>(CobarServer.java:74)
    at com.alibaba.cobar.CobarServer.<clinit>(CobarServer.java:53)
    at com.alibaba.cobar.CobarStartup.main(CobarStartup.java:33)

    1. 十一月 14, 2012

      Anonymous

      at com.alibaba.cobar.parser.recognizer.FunctionManager.<init>(FunctionManager.java:256)
      at com.alibaba.cobar.parser.recognizer.FunctionManager.<clinit>(FunctionManager.java:233)
      FunctionManager.java怎么在源碼里找不到?

      1. 十一月 14, 2012

        Anonymous

        在cobar-parser目錄下面啊。。。

  33. 十一月 16, 2012

    Anonymous

    38NKxo <a href="http://dubgxsbbaeyu.com/">dubgxsbbaeyu</a>

  34. 十一月 17, 2012

    Anonymous

    DmaNTJ , [url=http://niuezbkkcrvb.com/]niuezbkkcrvb[/url], [link=http://uhcpdsxroddw.com/]uhcpdsxroddw[/link], http://dfhdkmunyyec.com/

  35. 十一月 23, 2012

    Anonymous

    是不是也兼容基於mysql的列式數據庫infobright呢?

  36. 十一月 23, 2012

    Anonymous

    不支持跨庫的分頁排序,我覺得在實際應用用可不可以這樣看待:比如淘寶的用戶購物記錄表,你按uid來切,可以將用戶的記錄分散到不同的表中,但是同一用戶的數據就在一個表內,這樣就變成單表分頁排序了,按說這么處理的話就沒啥問題吧?

  37. 十一月 29, 2012

    Anonymous

    請問cobar與mysql cluster的區別是不是:cluster還需指定查詢是哪個節點,而cobar對連接應用來說就像是一個數據庫?cobar做HA是不是要每個存放table的數據庫也要有個主主?

  38. 十一月 30, 2012

    Anonymous

    cobar對表的拆分方式,一張表水平拆分多份到不同的庫中,而不是放入同一個庫中。
    請問這種拆分方式是基於什么考慮?
    謝謝!

    1. 十二月 11, 2012

      Anonymous

      對於數據庫來說一個表能處理的量是有限的,當數據量達到億級別時,拆分到多個庫基本是唯一的選擇,為了實現現實復雜的業務邏輯還需要同時使用SearchEngine等技術

  39. 十二月 03, 2012

    Anonymous

    當某一節點宕機,那這個節點的數據就無法訪問吧?

    1. 十二月 11, 2012

      Anonymous

      一個結點掛掉會通過心跳監測發現結點問題,Cobar會自動切到備用結點

  40. 十二月 18, 2012

    Anonymous

    cobar啟動成功,但在命令行中訪問的時候總是出現 Access denied for user ‘test’ @'localhost'錯誤,這是什么情況是數據庫那邊設置不對么?

  41. 十二月 25, 2012

    Anonymous

    不知道分頁功能cobar團隊有什么思路,困分頁問題很長時間了,沒有合適的解決方案,求指導啊,求參考啊,

  42. 十二月 25, 2012

    Anonymous

    Cobar使用MySQL協議來處理與MySQL交互的數據包,為什么不直接使用jdbc來連接數據庫呢?
    這樣設計是出於什么樣的考慮?

  43. 十二月 31, 2012

    Anonymous

    hi,cobar-server-1.2.7.zip包打的好像有問題:
    在startup.bat
    set "APP_VERSION=1.3.0"

    REM set COBAR_CLASSPATH
    set "COBAR_CLASSPATH=%COBAR_HOME%\conf;%COBAR_HOME%\lib\classes"
    set "COBAR_CLASSPATH=%COBAR_CLASSPATH%;%COBAR_HOME%\lib\cobar-server-%APP_VERSION%.jar"

    指向的版本為:1.3.0 ;
    啟動時報錯:
    Exception in thread "main" java.lang.NoClassDefFoundError: com/alibaba/cobar/CobarStartup
    Caused by: java.lang.ClassNotFoundException: com.alibaba.cobar.CobarStartup
    at java.net.URLClassLoader$1.run(URLClassLoader.java:202)
    at java.security.AccessController.doPrivileged(Native Method)
    at java.net.URLClassLoader.findClass(URLClassLoader.java:190)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:306)
    at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:301)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:247)
    Could not find the main class: com.alibaba.cobar.CobarStartup. Program will exit.

  44. 一月 05, 2013

    Anonymous

    yxdbeyond@gmail.com

    剛知道這個軟件,怎么用來mysql讀寫分離啊,求大神給我最簡單的配置方法,郵箱是yxdbeyond@gmail.com

  45. 一月 08, 2013

    Anonymous

    count 有多個返回結果:

    -------------------
    select count from user;

    -------------------
    2 row returned

    count
    13
    0

    ==================
    怎么解決?

  46. 一月 10, 2013

    Anonymous

    我按照上面的配置都弄好了 但是啟動時(startup.bat win7下面的環境) 出現異常找不到主方法類(java.lang.NoClassDefFoundError:com/alibaba/cobar/CobarStartup)

    1. 二月 05, 2013

      Anonymous

      把 start.bat 中的 version = 1.3.0 改成 1.2.7 或解壓 cobarxxx.jar 到 classes 下

  47. 一月 23, 2013

    Anonymous

    不錯的東西!

  48. 一月 29, 2013

    Anonymous

    按照例子中,假如我要在最終的tb1,tb2中互相復制數據,比如從tb2復制數據到tb1,假定tb1和tb2結構一致,使用如下語句:
    insert into tb1 select * from tb2;

    按照這樣的語言復制數據,會提示:
    ERROR 1146 (42S02): Table 'dbtest2.tb1' doesn't exist

    請問這種情況如何解決。

  49. 一月 31, 2013

    Anonymous

    您好,我有一個有意思的問題。我使用的兩種不同的數據庫,oracle和mysql。

    這樣能不能用Cobar做分布式數據庫。

    PS(我的數據分發庫是oracle,這個庫我不能用,只能用於取數據。自建的是Mysql數據庫)

  50. 二月 20, 2013

    Anonymous

    你好,
    我是一個新手, 想請教一個問題:
    11:12:13,410 WARN com.alibaba.cobar.heartbeat.CobarDetector@b1f125
    java.net.ConnectException: Connection refused: no further information
    at sun.nio.ch.SocketChannelImpl.checkConnect(Native Method)
    at sun.nio.ch.SocketChannelImpl.finishConnect(SocketChannelImpl.java:701)
    at com.alibaba.cobar.net.BackendConnection.finishConnect(BackendConnection.java:100)
    at com.alibaba.cobar.net.NIOConnector.finishConnect(NIOConnector.java:104)
    at com.alibaba.cobar.net.NIOConnector.run(NIOConnector.java:76)
    這是什么意思啊?

    1. 二月 21, 2013

      Anonymous

      已解決

  51. 三月 14, 2013

    Anonymous

    在windows我已經裝好了java jdk1.6,並且以設置JAVA_HOME環境變量,也使用了java -version進行安裝測試,沒出現問題,但是用cmd進入cobar-server-1.2.4\bin是說 沒有設置環境變量?

  52. 四月 08, 2013

    Anonymous

    你好,我用文中的實例驗證時發現一個bug
    tb2 在兩個庫存在時。一個庫中的表為空時
    獲取統計如 max ,min 是返回2 行。一行值為null
    操作:
    mysql> select min(id) from tb2
    -> ;
    ---------

    min(id)

    ---------

    NULL
    1

    ---------
    2 rows in set (0.00 sec)

    mysql> select * from tb2 limit 1,1000
    -> ;
    ---------+

    id val

    ---------+

    2 part1
    3 part3
    4 part1
    5 part1

    ---------+
    4 rows in set (0.00 sec)

    mysql> select * from tb2 limit 1,1000

    1. 四月 08, 2013

      Anonymous

      同上:
      select count count from tb2 where val='part2'
      這樣還發回多個
      如:
      -------

      count

      -------

      0
      3

      -------

  53. 五月 06, 2013

    Anonymous

    您好,我在使用cobar的時候發現dataNode初始化總是失敗。
    通過源碼調試之后發現,Handshake Initialization Packet是:[70, 0, 0, 0, -1, 106, 4, 72, 111, 115, 116, 32, 39, 49, 57, 50, 46, 49...]

    根據mysql的協議,70應該是包的長度,3個字節的0應該是包的ID,接下來的一個字節-1應該是Protocol Version,但是Protocol Version按照規范應該是0X0A才對,接下來的
    server version也不對,最后導致握手不成功。也就是說mysql的Handshake Initialization Packet好像是錯的,麻煩能告訴我是哪里錯了嗎?

    我的mysql安裝在centos 6.4上,mysql用的是5.6.11。

  54. 五月 27, 2013

    Anonymous

    你好,如果cobar服務下掛載的數據庫節點太多,cobar服務還不會負荷很重?對此有沒有相關cobar集群方式解決方案?

  55. 六月 05, 2013

    Anonymous

    你好!
    我是一個新手,
    現在我已經把cobar部署好了,一共3個庫,庫test1下邊是表tb1,庫test2和庫test3下邊是表tb2,我寫了一個app去訪問cobar,在訪問test1和test2下邊的表數據沒問題,但是訪問test3下邊的表數據時,總是訪問不到,schema.xml配置如下,其他配置文件不變。
    <!-- 數據節點定義,數據節點由數據源和其他一些參數組織而成。-->
    <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>10.8.12.39:3306/test1</location>
    <location>10.8.12.39:3306/test2</location>
    <location>10.8.12.39:3306/test3</location>
    </property>
    <property name="user">root</property>
    <property name="password"></property>
    <property name="sqlMode">STRICT_TRANS_TABLES</property>
    </dataSource>
    求解答,萬分感謝!

  56. 六月 26, 2013

    Anonymous

    您好,我想問下, cobar有類似 start transaction; insert into tb1; insert into tb2; commit;這樣的事務支持么? 我連接cobar執行start transaction返回"unsupported statement"; 所說的支持事務是不是指的是update tb2 where id>5;這樣的單條語句跨庫的情況?

  57. 七月 17, 2013

    Anonymous

    不錯的東西,不知道還有后續發展的計划嗎,還是要和tddl合並了?

  58. 八月 09, 2013

    Anonymous

    同問,新版本還有計划發布嗎
    好久都沒有更新過版本了

    1. 八月 12, 2013

      Anonymous

      cobar已死,有事燒紙。github上面都沒有cobar的身影了。

      1. 八月 20, 2013

        Anonymous

        不會吧。這個東東挺有意思的。竟然無后續了。失望啊!!

  59. 八月 20, 2013

    Anonymous

    已經試過,事務控制有效,不錯。

    就是配置的路由規則只能1024的分配這個不是很舒服。

    如果我現在是4個庫做分庫操作,后續增加第5,6個庫進去,需要對現有的庫進行梳理,

    這個動作不小啊。

    希望作者考慮路由規則設置的合理性和健壯性。

  60. 八月 21, 2013

    Anonymous

    我在測試cobar服務時,客戶端無法連接,cobar 服務端jvm棧信息如下:
    Thread 25189: (state = BLOCKED)

    • sun.misc.Unsafe.park(boolean, long) @bci=0 (Compiled frame; information may be imprecise)
    • java.util.concurrent.locks.LockSupport.park(java.lang.Object) @bci=14, line=158 (Compiled frame)
    • java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject.await() @bci=42, line=1987 (Compiled frame)
    • com.alibaba.cobar.net.buffer.BufferQueue.put(java.nio.ByteBuffer) @bci=27, line=66 (Compiled frame)
    • com.alibaba.cobar.net.AbstractConnection.write(java.nio.ByteBuffer) @bci=34, line=223 (Compiled frame)
    • com.alibaba.cobar.net.AbstractConnection.writeToBuffer(byte[], java.nio.ByteBuffer) @bci=47, line=327 (Compiled frame)
    • com.alibaba.cobar.net.mysql.BinaryPacket.write(java.nio.ByteBuffer, com.alibaba.cobar.net.FrontendConnection) @bci=33, line=53 (Compiled frame)
    • com.alibaba.cobar.mysql.bio.executor.SingleNodeExecutor.handleRowData(com.alibaba.cobar.route.RouteResultsetNode, com.alibaba.cobar.server.session.BlockingSession, com.alibaba.cobar.mysql.bio.MySQLChannel, java.nio.ByteBuffer, byte) @bci=213, line=316 (Compiled frame)
    • com.alibaba.cobar.mysql.bio.executor.SingleNodeExecutor.access$400(com.alibaba.cobar.mysql.bio.executor.SingleNodeExecutor, com.alibaba.cobar.route.RouteResultsetNode, com.alibaba.cobar.server.session.BlockingSession, com.alibaba.cobar.mysql.bio.MySQLChannel, java.nio.ByteBuffer, byte) @bci=8, line=54 (Interpreted frame)
    • com.alibaba.cobar.mysql.bio.executor.SingleNodeExecutor$3.run() @bci=24, line=340 (Interpreted frame)
    • java.util.concurrent.ThreadPoolExecutor$Worker.runTask(java.lang.Runnable) @bci=59, line=886 (Compiled frame)
    • java.util.concurrent.ThreadPoolExecutor$Worker.run() @bci=28, line=908 (Interpreted frame)
    • java.lang.Thread.run() @bci=11, line=662 (Interpreted frame)

    Thread 25188: (state = BLOCKED)

    • sun.misc.Unsafe.park(boolean, long) @bci=0 (Compiled frame; information may be imprecise)
    • java.util.concurrent.locks.LockSupport.park(java.lang.Object) @bci=14, line=158 (Compiled frame)
    • java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject.await() @bci=42, line=1987 (Compiled frame)
    • com.alibaba.cobar.net.buffer.BufferQueue.put(java.nio.ByteBuffer) @bci=27, line=66 (Compiled frame)
    • com.alibaba.cobar.net.AbstractConnection.write(java.nio.ByteBuffer) @bci=34, line=223 (Compiled frame)
    • com.alibaba.cobar.net.AbstractConnection.writeToBuffer(byte[], java.nio.ByteBuffer) @bci=47, line=327 (Compiled frame)
    • com.alibaba.cobar.net.mysql.BinaryPacket.write(java.nio.ByteBuffer, com.alibaba.cobar.net.FrontendConnection) @bci=33, line=53 (Compiled frame)
    • com.alibaba.cobar.mysql.bio.executor.SingleNodeExecutor.handleRowData(com.alibaba.cobar.route.RouteResultsetNode, com.alibaba.cobar.server.session.BlockingSession, com.alibaba.cobar.mysql.bio.MySQLChannel, java.nio.ByteBuffer, byte) @bci=213, line=316 (Compiled frame)
    • com.alibaba.cobar.mysql.bio.executor.SingleNodeExecutor.access$400(com.alibaba.cobar.mysql.bio.executor.SingleNodeExecutor, com.alibaba.cobar.route.RouteResultsetNode, com.alibaba.cobar.server.session.BlockingSession, com.alibaba.cobar.mysql.bio.MySQLChannel, java.nio.ByteBuffer, byte) @bci=8, line=54 (Interpreted frame)
    • com.alibaba.cobar.mysql.bio.executor.SingleNodeExecutor$3.run() @bci=24, line=340 (Interpreted frame)
    • java.util.concurrent.ThreadPoolExecutor$Worker.runTask(java.lang.Runnable) @bci=59, line=886 (Compiled frame)
    • java.util.concurrent.ThreadPoolExecutor$Worker.run() @bci=28, line=908 (Interpreted frame)
    • java.lang.Thread.run() @bci=11, line=662 (Interpreted frame)

    Thread 25187: (state = BLOCKED)

    • sun.misc.Unsafe.park(boolean, long) @bci=0 (Compiled frame; information may be imprecise)
    • java.util.concurrent.locks.LockSupport.park(java.lang.Object) @bci=14, line=158 (Compiled frame)
    • java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject.await() @bci=42, line=1987 (Compiled frame)
    • java.util.concurrent.LinkedBlockingQueue.take() @bci=29, line=399 (Compiled frame)
    • java.util.concurrent.ThreadPoolExecutor.getTask() @bci=78, line=947 (Interpreted frame)
    • java.util.concurrent.ThreadPoolExecutor$Worker.run() @bci=18, line=907 (Interpreted frame)
    • java.lang.Thread.run() @bci=11, line=662 (Interpreted frame)

    Thread 25186: (state = BLOCKED)

    • sun.misc.Unsafe.park(boolean, long) @bci=0 (Compiled frame; information may be imprecise)
    • java.util.concurrent.locks.LockSupport.park(java.lang.Object) @bci=14, line=158 (Compiled frame)
    • java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject.await() @bci=42, line=1987 (Compiled frame)
    • com.alibaba.cobar.net.buffer.BufferQueue.put(java.nio.ByteBuffer) @bci=27, line=66 (Compiled frame)
    • com.alibaba.cobar.net.AbstractConnection.write(java.nio.ByteBuffer) @bci=34, line=223 (Compiled frame)
    • com.alibaba.cobar.net.AbstractConnection.writeToBuffer(byte[], java.nio.ByteBuffer) @bci=47, line=327 (Compiled frame)
    • com.alibaba.cobar.net.mysql.BinaryPacket.write(java.nio.ByteBuffer, com.alibaba.cobar.net.FrontendConnection) @bci=33, line=53 (Compiled frame)
    • com.alibaba.cobar.mysql.bio.executor.SingleNodeExecutor.handleRowData(com.alibaba.cobar.route.RouteResultsetNode, com.alibaba.cobar.server.session.BlockingSession, com.alibaba.cobar.mysql.bio.MySQLChannel, java.nio.ByteBuffer, byte) @bci=213, line=316 (Compiled frame)
    • com.alibaba.cobar.mysql.bio.executor.SingleNodeExecutor.access$400(com.alibaba.cobar.mysql.bio.executor.SingleNodeExecutor, com.alibaba.cobar.route.RouteResultsetNode, com.alibaba.cobar.server.session.BlockingSession, com.alibaba.cobar.mysql.bio.MySQLChannel, java.nio.ByteBuffer, byte) @bci=8, line=54 (Interpreted frame)
    • com.alibaba.cobar.mysql.bio.executor.SingleNodeExecutor$3.run() @bci=24, line=340 (Interpreted frame)
    • java.util.concurrent.ThreadPoolExecutor$Worker.runTask(java.lang.Runnable) @bci=59, line=886 (Compiled frame)
    • java.util.concurrent.ThreadPoolExecutor$Worker.run() @bci=28, line=908 (Interpreted frame)
    • java.lang.Thread.run() @bci=11, line=662 (Interpreted frame)

    請問這是什么問題?

Add Comment

 
 
 
 
 
     

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM