日韩久久久精品,亚洲精品久久久久久久久久久,亚洲欧美一区二区三区国产精品 ,一区二区福利

數(shù)據(jù)庫–Cobar分布式數(shù)據(jù)庫集群MySQL中間件

系統(tǒng) 2996 0

運行環(huán)境:

  • 主機(jī)1:Ubuntu14.04 Desktop + MySQL5.5 + JDK 1.7(HP Z400) ?內(nèi)網(wǎng)IP地址:192.168.137.8
  • NODE1:Ubuntu 13.04 server + MySQL5.5 ?內(nèi)網(wǎng)IP地址:192.168.137.31
  • NODE2:Ubuntu 13.04 server + MySQL5.5 ?內(nèi)網(wǎng)IP地址:192.168.137.32

注:(NODE1和NODE2運行于XEN虛擬化平臺,硬件環(huán)境HP Z800)

Cobar簡介:

Cobar是關(guān)系型數(shù)據(jù)庫的分布式處理系統(tǒng),它可以在分布式的環(huán)境下看上去像傳統(tǒng)數(shù)據(jù)庫一樣為您提供海量數(shù)據(jù)服務(wù)。

  • ? ? ? ?產(chǎn)品在阿里巴巴B2B公司已經(jīng)穩(wěn)定運行了3年以上。
  • ? ? ? ?目前已經(jīng)接管了3000+個MySQL數(shù)據(jù)庫的schema,為應(yīng)用提供數(shù)據(jù)服務(wù)。
  • ? ? ? ?據(jù)最近統(tǒng)計cobar集群目前平均每天處理近50億次的SQL執(zhí)行請求。

Cobar最主要解決的問題是:分布式和HA。

分布式:主要是通過將同一個表的數(shù)據(jù)拆分成多個,放入不同的數(shù)據(jù)庫實例,查詢的時候也會按照同樣的操作方式,來更新具體數(shù)據(jù)庫實例中的對應(yīng)的數(shù)據(jù)。

HA:高可用性,在設(shè)置了MYSQL心跳的情況下,如果主數(shù)據(jù)庫發(fā)生了異常,Cobar會自動連接從數(shù)據(jù)庫,如果主數(shù)據(jù)庫恢復(fù)正常,只能手動恢復(fù)到主數(shù)據(jù)庫。Cobar只負(fù)責(zé)切換數(shù)據(jù)庫實例,不負(fù)責(zé)主從數(shù)據(jù)庫的同步,所以需要提前將主從數(shù)據(jù)庫設(shè)置雙向同步。

存在的不足:

  • ? (1).不支持跨庫情況下的join、分頁、排序、子查詢操作。
  • ? (2).SET語句執(zhí)行會被忽略,事務(wù)和字符集設(shè)置除外。
  • ? (3).分庫情況下,insert語句必須包含拆分字段列名。
  • ? (4).分庫情況下,update語句不能更新拆分字段的值。
  • ? (5).不支持SAVEPOINT操作。
  • ? (6).暫時只支持MySQL數(shù)據(jù)節(jié)點。
  • ? (7).使用JDBC時,不支持rewriteBatchedStatements=true參數(shù)設(shè)置(默認(rèn)為false)。
  • ? (8).使用JDBC時,不支持useServerPrepStmts=true參數(shù)設(shè)置(默認(rèn)為false)。
  • ? (9).使用JDBC時,BLOB, BINARY, VARBINARY字段不能使用setBlob()或setBinaryStream()方法設(shè)置參數(shù)。

當(dāng)然,如果想努力實現(xiàn)這些功能,可以fork官方的源碼: https://github.com/alibaba/cobar

環(huán)境搭建

  • Cobar服務(wù)器:192.168.137.8:8066 用戶名/密碼:root/sa 實例名:dbtest
  • 主機(jī)1:192.168.137.8:3306 用戶名/密碼:cobar/sa 實例名:dbtest1
  • Node1:192.168.137.31:3306 用戶名/密碼:cobar/sa 實例名:dbtest2
  • Node2:192.168.137.32:3306 用戶名/密碼:cobar/sa 實例名:dbtest3

Cobar-Server-1.2.7版本下載: http://pan.baidu.com/s/1pJudQh9

實驗拓?fù)鋱D如下:

?

cobar

?

首先分別在三個主機(jī)創(chuàng)建數(shù)據(jù)庫實例:

      
        #創(chuàng)建dbtest1腳本

   dropdatabaseif exists dbtest1;

   createdatabasedbtest1;

   use dbtest1;

   #在dbtest1上創(chuàng)建tb1

   createtabletb1(

   id   intnotnull,

   gmt   datetime);

#創(chuàng)建dbtest2

   dropdatabaseif exists dbtest2;

   createdatabasedbtest2;

   use dbtest2;

   #在dbtest2上創(chuàng)建tb2

   createtabletb2(

   id   intnotnull,

   val  varchar(
      
      
        256
      
      
        ));

#創(chuàng)建dbtest3

   dropdatabaseif exists dbtest3;

   createdatabasedbtest3;

   use dbtest3;

   #在dbtest3上創(chuàng)建tb2

   createtabletb2(

   id   intnotnull,

   val  varchar(
      
      
        256
      
      ));
    

Cobar配置:

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>

  <!-- 數(shù)據(jù)節(jié)點定義,數(shù)據(jù)節(jié)點由數(shù)據(jù)源和其他一些參數(shù)組織而成。-->

  <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>

  <!-- 數(shù)據(jù)源定義,數(shù)據(jù)源是一個具體的后端數(shù)據(jù)連接的表示。-->

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

    <property name=
      
        "
      
      
        location
      
      
        "
      
      >

      <location>
      
        192.168
      
      .
      
        137.8
      
      :
      
        3306
      
      /dbtest1</location>

      <location>
      
        192.168
      
      .
      
        137.31
      
      :
      
        3306
      
      /dbtest2</location>

      <location>
      
        192.168
      
      .
      
        137.32
      
      :
      
        3306
      
      /dbtest3</location>

    </property>

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

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

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

  </dataSource>

</cobar:schema>
    

server.xml簡單配置

      <!DOCTYPE cobar:server SYSTEM 
      
        "
      
      
        server.dtd
      
      
        "
      
      >

<cobar:server xmlns:cobar=
      
        "
      
      
        http://cobar.alibaba.com/
      
      
        "
      
      >

  <!-- 用戶訪問定義,用戶名、密碼、schema等信息。 -->

  <user name=
      
        "
      
      
        root
      
      
        "
      
      >

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

    <property name=
      
        "
      
      
        schemas
      
      
        "
      
      >dbtest</property>

  </user>

</cobar:server>
    

rule.xml配置

      <!DOCTYPE cobar:rule SYSTEM 
      
        "
      
      
        rule.dtd
      
      
        "
      
      >

<cobar:rule xmlns:cobar=
      
        "
      
      
        http://cobar.alibaba.com/
      
      
        "
      
      >

  <!-- 路由規(guī)則定義,定義什么表,什么字段,采用什么路由算法 -->

  <tableRule name=
      
        "
      
      
        rule1
      
      
        "
      
      >

    <rule>

      <columns>val</columns>

      <algorithm><![CDATA[ func2(${val}) ]]></algorithm>

    </rule>

  </tableRule>

  <!-- 路由函數(shù)定義 -->

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

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

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

  </function>

  <!-- 路由函數(shù)定義 -->

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

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

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

    <property name=
      
        "
      
      
        hashSlice
      
      
        "
      
      >-
      
        5
      
      :</property>

  </function>

</cobar:rule>
    

這里需要說明,INSERT語句中必須包含路由規(guī)則定義的字段,否則Cobar不會對數(shù)據(jù)進(jìn)行拆分,同時存儲到多個數(shù)據(jù)庫實例中,比如上面的tb2表中,id字段如果設(shè)置了auto_increment,插入語句中不用指明id字段,這樣就無法達(dá)到數(shù)據(jù)包拆分的目的。

準(zhǔn)備完成之后直接運行bin目錄下的./startup.sh即可。

然后查看輸入的日志:

      yan@yan-Z400:~/cobar-server-
      
        1.2
      
      .
      
        7
      
      /logs$ tail -
      
        f stdout.log


      
      
        09
      
      :
      
        57
      
      :
      
        00
      
      ,
      
        155
      
       INFO  Cobar 
      
        is
      
      
         ready to startup ...


      
      
        09
      
      :
      
        57
      
      :
      
        00
      
      ,
      
        155
      
      
         INFO  Startup processors ...


      
      
        09
      
      :
      
        57
      
      :
      
        00
      
      ,
      
        198
      
      
         INFO  Startup connector ...


      
      
        09
      
      :
      
        57
      
      :
      
        00
      
      ,
      
        202
      
      
         INFO  Initialize dataNodes ...


      
      
        09
      
      :
      
        57
      
      :
      
        00
      
      ,
      
        811
      
       INFO  dnTest1:
      
        0
      
      
         init success


      
      
        09
      
      :
      
        57
      
      :
      
        00
      
      ,
      
        816
      
       INFO  dnTest3:
      
        0
      
      
         init success


      
      
        09
      
      :
      
        57
      
      :
      
        00
      
      ,
      
        821
      
       INFO  dnTest2:
      
        0
      
      
         init success


      
      
        09
      
      :
      
        57
      
      :
      
        00
      
      ,
      
        835
      
       INFO  CobarManager 
      
        is
      
       started and listening on 
      
        9066
      
      
        09
      
      :
      
        57
      
      :
      
        00
      
      ,
      
        837
      
       INFO  CobarServer 
      
        is
      
       started and listening on 
      
        8066
      
      
        09
      
      :
      
        57
      
      :
      
        00
      
      ,
      
        837
      
       INFO  ===============================================
    

?

這樣cobar服務(wù)端就已經(jīng)啟動。

直接使用jdbc或mysql終端連接cobar:

      yan@yan-Z400:~$ mysql -uroot -psa -P8066 -h192.
      
        168.137
      
      .
      
        8
      
      
        

Welcome to the MySQL monitor.  Commands end with ; or \g.

Your MySQL connection id 
      
      
        is
      
      
        1
      
      
        

Server version: 
      
      
        5.1
      
      .
      
        48
      
      -cobar-
      
        1.2
      
      .
      
        7
      
      
         Cobar Server (ALIBABA)



Copyright (c) 
      
      
        2000
      
      , 
      
        2013
      
      , Oracle and/
      
        or its affiliates. All rights reserved.



Oracle 
      
      
        is
      
       a registered trademark of Oracle Corporation and/
      
        or its

affiliates. Other names may be trademarks of their respective

owners.



Type 
      
      
        '
      
      
        help;
      
      
        '
      
       or 
      
        '
      
      
        \h
      
      
        '
      
      
        for
      
       help. Type 
      
        '
      
      
        \c
      
      
        '
      
       to clear the current input statement.
    

下面使用幾句Pyhton進(jìn)行數(shù)據(jù)庫的插入操作:

      #!/usr/bin/
      
        env python

#coding
      
      =utf-
      
        8
      
      
        

import MySQLdb



#連接

cxn 
      
      = MySQLdb.Connect(host=
      
        '
      
      
        192.168.137.8
      
      
        '
      
      ,port=
      
        8066
      
      , user = 
      
        '
      
      
        root
      
      
        '
      
      , passwd = 
      
        '
      
      
        sa
      
      
        '
      
      
        )

#游標(biāo)

cur 
      
      =
      
         cxn.cursor()



cur.execute(
      
      
        "
      
      
        USE dbtest
      
      
        "
      
      
        )




      
      
        for
      
       i 
      
        in
      
       range(
      
        1
      
      ,
      
        200
      
      
        ):

    cur.execute(
      
      
        "
      
      
        INSERT INTO tb2 (val) values ('this is a test record %d')
      
      
        "
      
      %
      
        i)

    print 
      
      
        '
      
      
        insert the %d record into cobar
      
      
        '
      
      %
      
        i 



cur.close()

cxn.commit()

cxn.close()
      
    

插入后查看數(shù)據(jù)庫dbtest2和數(shù)據(jù)dbtest3的情況:

可以看到有100條數(shù)據(jù)插入了dbtest2,99條數(shù)據(jù)插入了dbtest3。

后面會對Cobar進(jìn)行更深入的了解。我的Fork分支

(完)

?

?

原創(chuàng)作品,轉(zhuǎn)載請標(biāo)明:http://blog.geekcome.com/archives/252

數(shù)據(jù)庫–Cobar分布式數(shù)據(jù)庫集群MySQL中間件


更多文章、技術(shù)交流、商務(wù)合作、聯(lián)系博主

微信掃碼或搜索:z360901061

微信掃一掃加我為好友

QQ號聯(lián)系: 360901061

您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點擊下面給點支持吧,站長非常感激您!手機(jī)微信長按不能支付解決辦法:請將微信支付二維碼保存到相冊,切換到微信,然后點擊微信右上角掃一掃功能,選擇支付二維碼完成支付。

【本文對您有幫助就好】

您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描上面二維碼支持博主2元、5元、10元、自定義金額等您想捐的金額吧,站長會非常 感謝您的哦?。?!

發(fā)表我的評論
最新評論 總共0條評論
主站蜘蛛池模板: 阿图什市| 秦皇岛市| 平远县| 昌乐县| 台东市| 邻水| 元朗区| 安新县| 和静县| 会同县| 壶关县| 永定县| 兴隆县| 田林县| 通江县| 保德县| 同仁县| 建始县| 卓尼县| 绍兴市| 宁夏| 贺兰县| 电白县| 广河县| 普兰店市| 崇明县| 嘉黎县| 张北县| 游戏| 迭部县| 北宁市| 拉孜县| 安图县| 汝阳县| 沿河| 区。| 常德市| 青岛市| 禹城市| 姜堰市| 甘谷县|