分布式数据库DBLE 快速入门

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的安装其实只要解压下载的目录就可以了,非常简单。

(注意:我们这边下载的是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,要不然启动会报错。

image.png

验证

通过mysql命令下发查询sql发现读操作都在slave机器上,写操作都在master机器中。

image.png

入坑指南

  1. 读写分离的时候一定要在schema.xml中配置table,否则启动dble会报错

image.png

  1. 在新的机器上如果没有安装mysql,会报没有mysql命令,需要在另外一台安装了mysql的机器上进行dble的sql下发和管理

猜你喜欢

转载自juejin.im/post/7041848597343633422