|
数据库垂直拆分,水平拆分利器,cobar升级版mycat
数据库垂直拆分,水平拆分利器,cobar升级版mycat,有需要的朋友可以参考下。
1,关于Mycat
Mycat情报
基于阿里的开源cobar ,可以用于生产系统中,目前在做如下的一些改进:
非阻塞IO的实现,相对于目前的cobar,并发性能大大提升,而且不会陷入假死状态
优化线程池的分配,目前cobar的线程池分配效率不高
修复cobar一些BUG
参考impala中的impala front部分的Java代码,实现高效的Map-Reduce,能够处理上亿的大数据量
实现自动分片特性,目前cobar需要手工分片,并有一定的编程限制
官方网站:
https://github.com/MyCATApache/
好多文档,大多数都是word的,写的非常详细。
https://github.com/MyCATApache/Mycat-doc
Mycat是cobar重新优化开发的版本,和cobar的很多配置都类似。
可以参考之前写的cobar安装:
http://blog.csdn.net/freewebsys/article/details/44022421
2,安装Mycat服务
下载二进制安装文件
https://github.com/MyCATApache/Mycat-download
解压缩到/usr/local/mycat
修改配置文件:- <?xml version="1.0"?>
- <!DOCTYPE mycat:schema SYSTEM "schema.dtd">
- <mycat:schema xmlns:mycat="http://org.opencloudb/">
- #数据库名称是TESTDB,sqlMaxLimit设置limit防止错误sql查询大量数据
- <schema name="TESTDB" checkSQLschema="false" sqlMaxLimit="100">
- #自动分库规则
- <!-- auto sharding by id (long) -->
- <table name="travelrecord" dataNode="dn1,dn2,dn3" rule="auto-sharding-long" />
- #全局配置表,所有数据均同步到每个数据库。
- <!-- global table is auto cloned to all defined data nodes ,so can join
- with any table whose sharding node is in the same data node -->
- <table name="company" primaryKey="ID" type="global" dataNode="dn1,dn2,dn3" />
- <table name="goods" primaryKey="ID" type="global" dataNode="dn1,dn2" />
- <!-- random sharding using mod sharind rule -->
- <table name="hotnews" primaryKey="ID" dataNode="dn1,dn2,dn3" rule="mod-long" />
- <table name="employee" primaryKey="ID" dataNode="dn1,dn2"
- rule="sharding-by-intfile" />
- #关联子表配置,不太明白
- <table name="customer" primaryKey="ID" dataNode="dn1,dn2"
- rule="sharding-by-intfile">
- <childTable name="orders" primaryKey="ID" joinKey="customer_id"
- parentKey="id">
- <childTable name="order_items" joinKey="order_id"
- parentKey="id" />
- </childTable>
- <childTable name="customer_addr" primaryKey="ID" joinKey="customer_id"
- parentKey="id" />
- </table>
- </schema>
- #配置多个dataNode,制定dataHost和数据库名称。
- <dataNode name="dn1" dataHost="localhost1" database="db1" />
- <dataNode name="dn2" dataHost="localhost1" database="db2" />
- <dataNode name="dn3" dataHost="localhost1" database="db3" />
- #配置dataHost的读写分配。同时mysql也要配置好,Master-Slave或Master-Master
- <dataHost name="localhost1" maxCon="1000" minCon="10" balance="0"
- writeType="0" dbType="mysql" dbDriver="native">
- <heartbeat>select user()</heartbeat>
- <!-- can have multi write hosts -->
- <writeHost host="hostM1" url="localhost:3306" user="root"
- password="123456">
- <!-- can have multi read hosts -->
- <!-- <readHost host="hostS1" url="localhost:3306" user="root" password="123456"
- /> -->
- </writeHost>
- <!-- <writeHost host="hostM2" url="localhost:3316" user="root" password="123456"/> -->
- </dataHost>
- </mycat:schema>
复制代码 wrapper.conf是mycat的配置文件启动参数等
rule.xml 是配置规则xml
还有几个配置文件慢慢研究
创建数据库- CREATE DATABASE db1 DEFAULT CHARACTER SET utf8 COLLATE utf8_general_ci;
- CREATE DATABASE db2 DEFAULT CHARACTER SET utf8 COLLATE utf8_general_ci;
- CREATE DATABASE db3 DEFAULT CHARACTER SET utf8 COLLATE utf8_general_ci;
复制代码 服务启动:/bin/mycat start
/bin/mycat这个问题同时可以作为service,拷贝到/etc/init.d/目录下即可。
3,登陆mycat服务和管理端
登陆mycat服务:(端口8066)- # mysql -utest -ptest -h 127.0.0.1 -P8066
- Warning: USING a password ON the command line interface can be insecure.
- Welcome TO the MySQL monitor. Commands END WITH ; OR \g.
- Your MySQL connection id IS 1
- Server version: 5.5.8-mycat-1.3 MyCat Server (OpenCloundDB)
- 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> SHOW DATABASES;
- +----------+
- | DATABASE |
- +----------+
- | TESTDB |
- +----------+
- 1 ROW IN SET (0.02 sec)
- mysql> USE TESTDB;
- Reading TABLE information FOR completion OF TABLE AND COLUMN names
- You can turn off this feature TO GET a quicker startup WITH -A
- DATABASE changed
- mysql> SHOW TABLES;
- +------------------+
- | TABLES IN TESTDB |
- +------------------+
- | company |
- | customer |
- | customer_addr |
- | employee |
- | goods |
- | hotnews |
- | orders |
- | order_items |
- | travelrecord |
- +------------------+
- 9 ROWS IN SET (0.00 sec)
- mysql> CREATE TABLE company(id INT NOT NULL PRIMARY KEY,name VARCHAR(100));
- Query OK, 0 ROWS affected (0.05 sec)
- mysql> EXPLAIN CREATE TABLE company(id INT NOT NULL PRIMARY KEY,name VARCHAR(100));
- +-----------+---------------------------------------------------------------------+
- | DATA_NODE | SQL |
- +-----------+---------------------------------------------------------------------+
- | dn1 | CREATE TABLE company(id INT NOT NULL PRIMARY KEY,name VARCHAR(100)) |
- | dn2 | CREATE TABLE company(id INT NOT NULL PRIMARY KEY,name VARCHAR(100)) |
- | dn3 | CREATE TABLE company(id INT NOT NULL PRIMARY KEY,name VARCHAR(100)) |
- +-----------+---------------------------------------------------------------------+
- 3 ROWS IN SET (0.01 sec)
- mysql> INSERT INTO company(id,name) VALUES(1,'hp'); INSERT INTO company(id,name) VALUES(2,'ibm'); INSERT INTO company(id,name) VALUES(3,'oracle');
- Query OK, 3 ROWS affected (0.37 sec)
- Query OK, 3 ROWS affected (0.01 sec)
- Query OK, 3 ROWS affected (0.00 sec)
- mysql> SELECT * FROM company ;
- +----+--------+
- | id | name |
- +----+--------+
- | 1 | hp |
- | 2 | ibm |
- | 3 | oracle |
- +----+--------+
- 3 ROWS IN SET (0.01 sec)
复制代码 使用管理端登陆:(端口9066)4,总结
初步安装测试了下mycat组件,还是非常不错的,确实比起cobar有不少的进步。
同时他们开发团队也说了,解决了cobar之前存在的问题。
有了全局表,这样可以使用join了,同时增加读写分离。
规则增加了不少,能满足大部分需求。
和cobar一样,mycat可以直接伪装成一个mysql服务器,对业务进行垂直拆分,水平拆分。平滑的进行数据扩展。
保证在原有系统上进行优化。接下来继续研究mycat,非常好的解决方案。
数据库垂直拆分,水平拆分利器,cobar升级版mycat
|
|