天天看點

mysql分布式中間件cobar

Cobar的分布式主要是通過将表放入不同的庫來實作:

     1.Cobar支援将一張表水準拆分成多份分别放入不同的庫來實作表的水準拆分

     2.Cobar也支援将不同的表放入不同的庫

     3.多數情況下,使用者會将以上兩種方式混合使用

     4.Cobar不支援将一張表,例如test表拆分成test_1, test_2, test_3.....放在同一個庫中,必須将拆分後的表分别放入不同的庫來實作分布式

缺點:

    1.不支援跨庫的關聯操作:join、分頁、排序、子查詢

    2.不支援SAVEPOINT操作

    3.不支援SET語句的執行,事務和字元集設定語句除外

    4.隻支援MySQL資料節點

    5.對于拆分表,插入操作須給出列名,必須包含拆分字段

環境規劃:

IP                         資料庫      表

192.168.1.247        test01       t1

192.168.1.247        test02       t1

192.168.1.247        test03       t1

說明:在本伺服器建立三個資料庫,資料庫中建立相同的表和表類型,将t1表中的資料拆分到teat01,02,03資料庫中.

1.建立資料庫和表

[root@tong1 ~]# /usr/local/mysql-5.6.23/bin/mysql -u root -p

Enter password:

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

Your MySQL connection id is 6028

Server version: 5.6.23-log MySQL Community Server (GPL)

Copyright (c) 2000, 2015, 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.

mysql> create database test01;                 --建立資料庫test01,02,03

Query OK, 1 row affected (0.03 sec)

mysql> create database test02;

mysql> create database test03;

mysql> \u test01

Database changed

mysql> create table t1(a int,b char(5));        --在三個資料庫建立相同的表

Query OK, 0 rows affected (0.34 sec)

mysql> \u test02

mysql> create table t1(a int,b char(5));

Query OK, 0 rows affected (0.31 sec)

mysql> \u test03

Query OK, 0 rows affected (0.30 sec)

mysql> show tables;

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

| Tables_in_test03 |

| t1               |

1 row in set (0.00 sec)

mysql> grant all privileges on *.* to tong@'localhost' identified by 'system';

Query OK, 0 rows affected (0.05 sec)

mysql> flush privileges;

Query OK, 0 rows affected (0.06 sec)

mysql> exit

Bye

[root@tong1 bin]#

2.安裝java開發軟體包

[root@tong1 ~]# tar xvf jdk-7u71-linux-x64.tar.gz  -C /usr/local/

[root@tong1 ~]# cd /usr/local/

[root@tong1 local]# chown  -R root:root jdk1.7.0_71/

[root@tong1 local]# vim /etc/profile       --添加環境變量

export PATH=$PATH:/usr/local/protobuf-2.5.0/bin:/usr/local/jdk1.7.0_71/bin

export JAVA_HOME=/usr/local/jdk1.7.0_71/

export CLASS_HOME=/usr/local/jdk1.7.0_71/lib

[root@tong1 local]# . /etc/profile

[root@tong1 local]# java -version          --檢視java是否安裝成功

java version "1.7.0_71"

Java(TM) SE Runtime Environment (build 1.7.0_71-b14)

Java HotSpot(TM) 64-Bit Server VM (build 24.71-b01, mixed mode)

[root@tong1 local]#

3.下載下傳安裝cobar

下載下傳位址:http://pan.baidu.com/s/1o6igLwY

[root@tong1 ~]# tar xvf cobar-server-1.2.7.tar.gz  -C /usr/local/

[root@tong1 ~]# cd /usr/local/cobar-server-1.2.7/

[root@tong1 cobar-server-1.2.7]# ll

total 36

drwxr-xr-x. 2 root root  4096 Dec 29  2012 bin

drwxr-xr-x. 2 root root  4096 Dec 29  2012 conf

-rwsrwsrwt. 1 root root   575 Dec 29  2012 COPYRIGHT

drwxr-xr-x. 3 root root  4096 May 14 10:13 lib

-rwsrwsrwt. 1 root root 11549 Dec 29  2012 LICENSE

drwxr-xr-x. 2 root root  4096 Dec 29  2012 logs

-rwsrwsrwt. 1 root root   428 Dec 29  2012 README

[root@tong1 cobar-server-1.2.7]# cd conf/

[root@tong1 conf]# ll

total 16

-rw-r--r--. 1 root root 2604 Dec 29  2012 log4j.xml

-rw-r--r--. 1 root root 1262 Dec 29  2012 rule.xml

-rw-r--r--. 1 root root 1966 Dec 29  2012 schema.xml    --mysql資料庫的IP,端口

-rw-r--r--. 1 root root 2292 Dec 29  2012 server.xml

[root@tong1 conf]# vim schema.xml

<!-- schema定義 -->

  <schema name="test" dataNode="test1">        --test架構名,用于使用者登陸,test1第一個資料庫

    <table name="t1" dataNode="test2,test3" rule="rule1" />   --t1是表名,拆分的表,test2,test3是兩個資料庫名

  </schema>

  <!-- 資料節點定義,資料節點由資料源和其他一些參數組織而成。-->

  <dataNode name="test1">                    --test1是第一個資料庫

    <property name="dataSource">

      <dataSourceRef>test[0]</dataSourceRef>     --第一個資料庫源

    </property>

  </dataNode>

  <dataNode name="test2">                             --第二個資料庫

      <dataSourceRef>test[1]</dataSourceRef>

  <dataNode name="test3">                            --第三個資料庫

      <dataSourceRef>test[2]</dataSourceRef>

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

  <dataSource name="test" type="mysql">          --test源資料,用于使用者登陸

    <property name="location">

      <location>192.168.1.247:3306/test1</location>    --三個資料庫伺服器和資料庫名,資料庫也可在不同的伺服器上

      <location>192.168.1.247:3306/test2</location>

      <location>192.168.1.247:3306/test3</location>

    <property name="user">tong</property>            --使用者登陸

    <property name="password">system</property>          --密碼

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

  </dataSource>

[root@tong1 conf]# vim rule.xml

  <!-- 路由規則定義,定義什麼表,什麼字段,采用什麼路由算法 -->

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

[root@tong1 conf]# vim server.xml

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

  <system>

    <property name="serverPort">8066</property>             --cobar服務啟動端口

    <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="tong">            --登陸使用者名

    <property name="password">system</property>           --密碼

    <property name="schemas">test</property>                 --架構名,使用者連接配接的資料庫

  </user>

[root@tong1 bin]# ./startup.sh          --啟動服務

"/usr/local/jdk1.7.0_71/bin/java" -Dcobar.home="/usr/local/cobar-server-1.2.7" -classpath "/usr/local/cobar-server-1.2.7/conf:/usr/local/cobar-server-1.2.7/lib/classes:/usr/local/cobar-server-1.2.7/lib/cobar-server-1.2.7.jar:/usr/local/cobar-server-1.2.7/lib/log4j-1.2.16.jar" -server -Xms1024m -Xmx1024m -Xmn256m -Xss256k -XX:+AggressiveOpts -XX:+UseBiasedLocking -XX:+UseFastAccessorMethods -XX:+DisableExplicitGC -XX:+UseParNewGC -XX:+UseConcMarkSweepGC -XX:+CMSParallelRemarkEnabled -XX:+UseCMSCompactAtFullCollection -XX:+UseCMSInitiatingOccupancyOnly -XX:CMSInitiatingOccupancyFraction=75 com.alibaba.cobar.CobarStartup >> "/usr/local/cobar-server-1.2.7/logs/console.log" 2>&1 &

[root@tong1 bin]# cat ../logs/stdout.log     --檢視日志

15:33:02,933 INFO  ===============================================

15:33:02,934 INFO  Cobar is ready to startup ...

15:33:02,934 INFO  Startup processors ...

15:33:03,026 INFO  Startup connector ...

15:33:03,031 INFO  Initialize dataNodes ...

15:33:03,051 INFO  test2:0 init success

15:33:03,053 INFO  test1:0 init success

15:33:03,055 INFO  test3:0 init success

15:33:03,066 INFO  CobarManager is started and listening on 9066

15:33:03,068 INFO  CobarServer is started and listening on 8066

15:33:03,071 INFO  ===============================================

[root@tong1 bin]# cat ../logs/console.log

log4j:WARN 2015-05-14 15:33:02 [/usr/local/cobar-server-1.2.7/conf/log4j.xml] load completed.[root@tong1 bin]# netstat -antup | grep java

tcp        0      0 :::8066                     :::*                        LISTEN      25359/java         

tcp        0      0 :::9066                     :::*                        LISTEN      25359/java         

tcp        0      0 ::ffff:192.168.1.247:52451  ::ffff:192.168.1.247:3306   ESTABLISHED 25359/java         

tcp        0      0 ::ffff:192.168.1.247:52450  ::ffff:192.168.1.247:3306   ESTABLISHED 25359/java         

tcp        0      0 ::ffff:192.168.1.247:52452  ::ffff:192.168.1.247:3306   ESTABLISHED 25359/java         

4.登陸資料庫插入資料(以下紅色部分不能少)

[root@tong1 data]# /usr/local/mysql-5.6.23/bin/mysql -h 192.168.1.247 -utong -p -P8066 -Dtest

Reading table information for completion of table and column names

You can turn off this feature to get a quicker startup with -A

Your MySQL connection id is 1

Server version: 5.1.48-cobar-1.2.7 Cobar Server (ALIBABA)

mysql> show databases;     --用戶端連接配接的資料庫名

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

| DATABASE |

| test     |

mysql> \u test

mysql> show tables;        --表名

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

| Tables_in_test |

| t1             |

2 rows in set (0.00 sec)

mysql> insert into t1 values(1,'c');                --插入資料

Query OK, 2 rows affected (0.14 sec)

mysql> insert into t1 values(2,'z');

Query OK, 2 rows affected (0.20 sec)

mysql> select * from t1;           --不知道為什麼test1資料庫中有重複的資料

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

| a    | b    |

|    1 | c    |

|    2 | z    |

4 rows in set (0.01 sec)

mysql>

5.在另外兩個資料庫中檢視資料

[root@tong1 bin]# /usr/local/mysql-5.6.23/bin/mysql -u root -p -D test2   --在test2檢視資料

Your MySQL connection id is 6124

mysql> select * from t1;     --有資料

3 rows in set (0.00 sec)

繼續閱讀