DBLE 是企业级开源分布式中间件,江湖人送外号 “MyCat Plus”;以其简单稳定,持续维护,良好的社区环境和广大的群众基础得到了社区的大力支持;
环境准备
DBLE项目资料
DBLE官方网站:https://opensource.actionsky.com
可以详细了解DBLE的背景和应用场景,本文不涉及到的细节都可在官方文档获得更细节都信息;对于刚了解到同学,可以以本文为快速入门基础
DBLE官方项目:https://github.com/actiontech/dble
如对源码有兴趣或者需要定制的功能的可以通过源码编译
DBLE下载地址:https://github.com/actiontech/dble/releases
建议下载最新的releases版本,下载tar压缩包即可,如有源码编译需求的,可以下载源码包
复制代码
安装JDK环境
DBLE是使用java开发的,所以需要启动dble需要先在机器上安装java版本1.8或以上,并且确保JAVA_HOME参数被正确的设置;
安装DBLE
DBLE的安装其实只要解压下载的目录就可以了,非常简单。
- 通过此连接下载最新安装包 github.com/actiontech/…
(注意:我们这边下载的是2.8版本的)
- 解压并安装dble到指定文件夹中
mkdir -p $working_dir
cd $working_dir
tar -xvf actiontech-dble-$version.tar.gz
cd $working_dir/dble/conf
mv schema_template.xml schema.xml
mv rule_template.xml rule.xml
mv server_template.xml server.xml
复制代码
应用场景一:数据拆分
scheam.xml
自行修改数据库地址,用户名,密码即可。
<?xml version="1.0"?>
<!DOCTYPE dble:schema SYSTEM "schema.dtd">
<dble:schema xmlns:dble="http://dble.cloud/">
<schema name="testdb">
<table name="users" primaryKey="ID" dataNode="dn1,dn2" rule="sharding-by-mod2" />
</schema>
<!-- 分片配置 -->
<dataNode name="dn1" dataHost="Group1" database="testdb"/>
<dataNode name="dn2" dataHost="Group2" database="testdb"/>
<!-- 物理数据库配置 -->
<dataHost name="Group1" maxCon="1000" minCon="10" balance="0" switchType="1" slaveThreshold="100">
<heartbeat>show slave status</heartbeat>
<writeHost host="MySQLA" url="172.16.3.1:14014" user="test" password="password"/>
</dataHost>
<dataHost name="Group2" maxCon="1000" minCon="10" balance="0" switchType="1" slaveThreshold="100">
<heartbeat>show slave status</heartbeat>
<writeHost host="MySQLA" url="172.16.3.1:14015" user="test" password="password"/>
</dataHost>
</dble:schema>
复制代码
rule.xml
<tableRule name="sharding-by-mod2">
<rule>
<columns>id</columns>
<algorithm>hashmod2</algorithm>
</rule>
</tableRule>
<function name="hashmod2" class="Hash">
<property name="partitionCount">2</property>
<property name="partitionLength">1</property>
</function>
复制代码
验证配置生效
## 进入DBLE安装目录,执行start命令
./bin/dble start
tail -f logs/wrapper.log查看启动日志
复制代码
通过DBLE流量入口8066登陆数据库
mysql -P8066 -h 127.0.0.1 -utest -ppassword
复制代码
插入两条用户记录,并获取DBLE侧的查询记录
mysql> insert into users(id,user) values(1,"zhangsan");
Query OK, 1 row affected (0.09 sec)
mysql> insert into users(id,user) values(2,"lisi");
Query OK, 1 row affected (0.09 sec)
mysql> explain select * from users;
+-----------+----------+---------------------+
| DATA_NODE | TYPE | SQL/REF |
+-----------+----------+---------------------+
| dn1 | BASE SQL | select * from users |
| dn2 | BASE SQL | select * from users |
+-----------+----------+---------------------+
2 rows in set (0.00 sec)
mysql> select * from users;
+----+----------+
| id | user |
+----+----------+
| 2 | lisi |
| 1 | zhangsan |
+----+----------+
2 rows in set (0.01 sec)
复制代码
获取MySQLA和MySQLB的记录
# mysql -P14014 -h 127.0.0.1 -utest -ppassword
mysql> select * from users;
+----+----------+
| id | user |
+----+----------+
| 2 | lisi |
+----+----------+
1 rows in set (0.01 sec)
# mysql -P14015 -h 127.0.0.1 -utest -ppassword
mysql> select * from users;
+----+----------+
| id | user |
+----+----------+
| 1 | zhangsan |
+----+----------+
1 rows in set (0.01 sec)
复制代码
从上面的验证流程,往DBLE插入的数据,会按照取模的方式下发到真实的物理库,来实现数据库的自动分片;同时通过DBLE下发的查询会被DBLE自动下发给实际的物理库,合并返回给客户端,可以通过explain执行计划观察到下发的实际下发给物理库的SQL语句
应用场景二:读写分离
搭建主从数据库
通过docker搭建,可以推荐一个链接,但是还是有个坑,可以留言讨论或者自行百度www.cnblogs.com/tian8745409…
配置schema.xml
一定要记得配置table,要不然启动会报错。
验证
通过mysql命令下发查询sql发现读操作都在slave机器上,写操作都在master机器中。
入坑指南
- 读写分离的时候一定要在schema.xml中配置table,否则启动dble会报错
- 在新的机器上如果没有安装mysql,会报没有mysql命令,需要在另外一台安装了mysql的机器上进行dble的sql下发和管理