更多博文请关注:没有伞的孩子必须努力奔跑 (www.xuchanggang.cn)
这篇文章不能称之为原创,完全是基于cobar的官方文档搭建,从这里也间接的可以看到cobar的文档有多详细
#创建dbtest1脚本 dropdatabaseif exists dbtest1; createdatabasedbtest1; use dbtest1; #在dbtest1上创建tb1 createtabletb1( id intnotnull, gmt datetime); #创建dbtest2 dropdatabaseif exists dbtest2; createdatabasedbtest2; use dbtest2; #在dbtest2上创建tb2 createtabletb2( id intnotnull, val varchar(256)); #创建dbtest3 dropdatabaseif exists dbtest3; createdatabasedbtest3; use dbtest3; #在dbtest3上创建tb2 createtabletb2( id intnotnull, val varchar(256));
3.cobar配置:
# 这个文件主要配置cobar对外提供的数据库名和表名,以及后面真实数据库的地址和库名,登陆真实数据库的账号密码 [root@centos cobar-server-1.2.7]# cd conf/ [root@centos conf]# vim schema.xml # 配置如下 <?xmlversion="1.0"encoding="UTF-8"?> <!DOCTYPE cobar:schema SYSTEM "schema.dtd"> <cobar:schemaxmlns:cobar="http://cobar.alibaba.com/"> <!-- schema定义 --> <schemaname="dbtest"dataNode="dnTest1"> <tablename="tb2"dataNode="dnTest2,dnTest3"rule="rule1"/> </schema> <!-- 数据节点定义,数据节点由数据源和其他一些参数组织而成。--> <dataNodename="dnTest1"> <propertyname="dataSource"> <dataSourceRef>dsTest[0]</dataSourceRef> </property> </dataNode> <dataNodename="dnTest2"> <propertyname="dataSource"> <dataSourceRef>dsTest[1]</dataSourceRef> </property> </dataNode> <dataNodename="dnTest3"> <propertyname="dataSource"> <dataSourceRef>dsTest[2]</dataSourceRef> </property> </dataNode> <!-- 数据源定义,数据源是一个具体的后端数据连接的表示。--> <dataSourcename="dsTest"type="mysql"> <propertyname="location"> <location>192.168.1.102:3306/dbtest1</location><!--注意:替换为您的MySQL IP和Port--> <location>192.168.1.102:3307/dbtest2</location><!--注意:替换为您的MySQL IP和Port--> <location>192.168.1.100:3306/dbtest3</location><!--注意:替换为您的MySQL IP和Port--> </property> # 这里登陆数据库的用户记得要授权 <propertyname="user">cobar</property><!--注意:替换为您的MySQL用户名--> <propertyname="password">kongzhong</property><!--注意:替换为您的MySQL密码--> <propertyname="sqlMode">STRICT_TRANS_TABLES</property> </dataSource> </cobar:schema>
# 此文件主要配置拆分字段规则 [root@centos conf]# vim rule.xml # 配置如下: <?xmlversion="1.0"encoding="UTF-8"?> <!DOCTYPE cobar:rule SYSTEM "rule.dtd"> <cobar:rulexmlns:cobar="http://cobar.alibaba.com/"> <!-- 路由规则定义,定义什么表,什么字段,采用什么路由算法。--> <tableRulename="rule1"> <rule> <columns>id</columns> <algorithm><![CDATA[ func1(${id})]]></algorithm> </rule> </tableRule> <!-- 路由函数定义,应用在路由规则的算法定义中,路由函数可以自定义扩展。--> <functionname="func1"class="com.alibaba.cobar.route.function.PartitionByLong"> <propertyname="partitionCount">2</property> <propertyname="partitionLength">512</property> </function> </cobar:rule>
[root@centos conf]# vim server.xml # 配置如下: <?xmlversion="1.0"encoding="UTF-8"?> <!DOCTYPE cobar:server SYSTEM "server.dtd"> <cobar:serverxmlns:cobar="http://cobar.alibaba.com/"> <!--定义Cobar用户名,密码--> <username="test"> <propertyname="password">test</property> <propertyname="schemas">dbtest</property> </user> </cobar:server>
# 进入cobar安装目录下的bin目录 [root@centos logs]# cd ../bin/ # 执行startup.sh [root@centos bin]# ./startup.sh "/usr/local/java/bin/java" -Dcobar.home="/root/cobar-server-1.2.7" -classpath "/root/cobar-server-1.2.7/conf:/root/cobar-server-1.2.7/lib/classes:/root/cobar-server-1.2.7/lib/cobar-server-1.2.7.jar:/root/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 >> "/root/cobar-server-1.2.7/logs/console.log" 2>&1 & # 执行完启动命令后看日志目录下的stdout.log,显示如下信息为正常 [root@centos bin]# cd ../logs/ [root@centos logs]# more stdout.log 22:39:50,737 INFO =============================================== 22:39:50,738 INFO Cobar is ready to startup ... 22:39:50,741 INFO Startup processors ... 22:39:50,788 INFO Startup connector ... 22:39:50,804 INFO Initialize dataNodes ... 22:39:50,891 INFO dnTest1:0 init success 22:39:50,909 INFO dnTest3:0 init success 22:39:50,911 INFO dnTest2:0 init success ............................. # 查看 cobar进程是否开启 [root@centos logs]# ps -ef |grep cobar root 5843 1 0 22:17 pts/0 00:00:02 /usr/local/java/bin/java -Dcobar.home=/root/cobar-server-1.2.7 -classpath /root/cobar-server-1.2.7/conf:/root/cobar-server-1.2.7/lib/classes:/root/cobar-server-1.2.7/lib/cobar-server-1.2.7.jar:/root/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 root 6005 5428 0 22:41 pts/0 00:00:00 grep cobar # 查看端口是否监听[8066为登陆端口,9066为管理端口] [root@centos logs]# netstat -tulnap |grep 8066 tcp 0 0 :::8066 :::* LISTEN 5843/java [root@centos logs]# netstat -tulnap |grep 9066 tcp 0 0 :::9066 :::* LISTEN 5843/java
# 指定cobar服务器ip地址,端口,账户,密码 [root@centos logs]# mysql -h192.168.1.104 -P8066 -utest -ptest Welcome to the MySQL monitor. Commands end with ; or \g. Your MySQL connection id is 2 Server version: 5.1.48-cobar-1.2.7 Cobar Server (ALIBABA) Copyright (c) 2000, 2011, 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> show databases; +----------+ | DATABASE | +----------+ | dbtest | +----------+ 1 row in set (0.00 sec) mysql> use dbtest Database changed # 显示表 mysql> show tables; +------------------+ | Tables_in_dbtest | +------------------+ | tb1 | | tb2 | +------------------+ 2 rows in set (0.00 sec) # 插入数据测试 mysql> insert into tb1 (id, gmt) values (1, now()); mysql> insert into tb2 (id, val) values (1, "part1"); mysql> insert into tb2 (id, val) values (2, "part1"), (513, "part2"); # 查询数据 mysql> select * from tb1; +----+---------------------+ | id | gmt | +----+---------------------+ | 1 | 2013-12-10 15:04:05 | +----+---------------------+ 1 row in set (0.01 sec) # 仔细看下面这几个数据[这个数据时根据规则插入的,详细可以查看rules.xml] mysql> select * from tb2; +-----+-------+ | id | val | +-----+-------+ | 1 | part1 | | 2 | part1 | | 513 | part2 | +-----+-------+ 3 rows in set (0.00 sec)