开源分布式中间件 DBLE 快速入门指南
数据库小白一枚,正在不断学习积累知识,现将学习到的知识记录一下,也是将我的所得分享给大家!而今天这篇文章《开源分布式中间件 DBLE 快速入门指南》带大家来了解一下开源分布式中间件 DBLE 快速入门指南,希望对大家的知识积累有所帮助,从而弥补自己的不足,助力实战开发!
DBLE 是企业级开源分布式中间件,江湖人送外号 “MyCat Plus”;以其简单稳定,持续维护,良好的社区环境和广大的群众基础得到了社区的大力支持;
环境准备
DBLE项目资料
# yum install java-1.8.0-openjdk
确认java环境已配置完成
# java -version openjdk version "1.8.0_191" OpenJDK Runtime Environment (build 1.8.0_191-b12) OpenJDK 64-Bit Server VM (build 25.191-b12, mixed mode)
安装DBLE
DBLE的安装其实只要解压下载的目录就可以了,非常简单。
- 通过此连接下载最新安装包https://github.com/actiontech...
- 解压并安装dble到指定文件夹中
mkdir -p $working_dir cd $working_dir tar -xvf actiontech-dble-$version.tar.gz cd $working_dir/dble/conf
安装完成后,目录如下:
目录 | 说明 |
---|---|
bin | dble命令:启动、重启、停止等 |
conf | dble配置信息,本文重点关注 |
lib | dble引用的jar包 |
logs | 日志文件,包括dble启动的日志和运行的日志 |
配置DBLE
DBLE的配置文件都在conf目录里面,这里介绍几个常用的文件:
文件 | 说明 |
---|---|
server.xml | DBLE server相关参数定义,包括dble性能,定时任务,端口,用户配置等;本文主要涉及到访问用户的配置 |
schema.xml | DBLE具体分片定义,规定table和schema以及dataNode之间的关系,指定每个表格使用哪种类型的分片方法,定义每个dataNode的连接信息等 |
rule.xml | DBLE实际用到的分片算法的配置 |
应用场景一:数据拆分
后端MySQL节点
DBLE的架构其实很好理解,DBLE是代理中间件,DBLE后面就是物理数据库。对于使用者来说,访问的都是DBLE,不会接触到后端的数据库。
我们先演示简单的数据拆分的功能。物理部署结构如下表:
服务 | IP:Port | 说明 |
---|---|---|
DBLE | 172.16.3.1:9066 | DBLE实例,连接数据库时,连接此IP:Port |
Mysql A | 172.16.3.1:14014 | 物理数据库实例A,真正存储数据的数据库 |
Mysql B | 172.16.3.1:14015 | 物理数据库实例B,真正存储数据的数据库 |
备注:为了演示简单,这里将实例都部署在了一台机器上并用不同端口做区分,同学们也可以用三台机器来做环境搭建
在MySQL A和MySQL B中创建库表testdb.users来方便后续的验证,表结构如下:
CREATE TABLE `users` ( `id` int(11) NOT NULL, `user` varchar(20) DEFAULT NULL, PRIMARY KEY (`id`) ) ENGINE=InnoDB DEFAULT CHARSET=latin1
server.xml
server.xml里可以配置跟DBLE自身相关的许多参数,这里重点只关注下面这段访问用户相关的配置,其他默认即可;
第一段 "" 为DBLE的服务端口(默认8066)和管理端口(默认9066)的配置
- 管理端口只能接受DBLE的管理命令,这里不做展开
- 服务端口即DBLE的业务访问端口,可以接受SQL语句
第二段“”配置管理理用户,默认为man1,密码为654321
- 即可以通过 mysql -P9066 -h 127.0.0.1 -u man1 -p654321来下发管理命令
第三段“”配置业务用户,配置了一个账号test 密码password,针对数据库testdb,读写权限都有,没有针对表做任何特殊的权限,故把表配置做了注释
- 即可以通过 mysql -P8066 -h 127.0.0.1 -utest -ppassword下发SQL语句
...... ... 654321 true ... password testdb
参数 | 说明 |
---|---|
user | 用户配置节点 |
name | 登录的用户名,也就是连接DBLE的用户名 |
password | 登录的密码,也就是连接DBLE的密码 |
schemas | 数据库名,这里会和schema.xml中的配置关联,多个用逗号分开,例如需要这个用户需要管理两个数据库db1,db2,则配置db1,db2 |
privileges | 配置用户针对表的增删改查的权限,具体见官方文档,这里不做展开 |
schema.xml
schema.xml是最主要的配置项,我们将users用户表按照取模的方式平均拆分到了MySQL A和MySQL B两个数据数据库实例上,
详细请看配置文件:
show slave status show slave status
参数说明
- schema 逻辑数据库信息,此数据库为逻辑数据库,name 与 server.xml 中 schema对应;
- dataNode 分片信息,此为分片节点的定义;分片名字和schema的dataNode对应;分片与下面的dataHost 物理实例进行关联;
- dataHost 物理实例组信息,dataHost下可以挂载同组的读写物理实例节点,实现高可用或者读写分离;
每个节点的属性逐一说明:
- schema:
属性说明 :
id hashmod2 2 1
验证配置生效
启动DBLE
## 进入DBLE安装目录,执行start命令 ./bin/dble start ## DBLE启动会自动加载配置,需确认进程是否正常启动,如启动失败,建议按照日志报错排查问题,正确启动日志如下: STATUS | wrapper | 2019/01/21 17:31:43 | --> Wrapper Started as Daemon STATUS | wrapper | 2019/01/21 17:31:43 | Launching a JVM... INFO | jvm 1 | 2019/01/21 17:31:43 | OpenJDK 64-Bit Server VM warning: ignoring option MaxPermSize=64M; support was removed in 8.0 INFO | jvm 1 | 2019/01/21 17:31:44 | Wrapper (Version 3.2.3) http://wrapper.tanukisoftware.org INFO | jvm 1 | 2019/01/21 17:31:44 | Copyright 1999-2006 Tanuki Software, Inc. All Rights Reserved. INFO | jvm 1 | 2019/01/21 17:31:44 | INFO | jvm 1 | 2019/01/21 17:31:45 | Server startup successfully. see logs in logs/dble.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语句
应用场景二:读写分离
DBLE除了做数据的分片功能外,也支持读写分离功能;开启读写分离功能后,可以将主实例上的读压力负载给原本stand by的从实例,从而扩展整个集群的吞吐能力;
后端MySQL节点
我们再通过示例,演示DBLE的读写分离的功能。物理部署结构如下表:
服务 | IP:Port | 说明 |
---|---|---|
DBLE | 172.16.3.1:9066 | DBLE实例,连接数据库时,连接此IP:Port |
Mysql A | 172.16.3.1:14014 | 物理数据库实例A,master实例 |
Mysql B | 172.16.3.1:14015 | 物理数据库实例B,slave实例 |
备注:为了演示简单,这里将实例都部署在了一台机器上并用不同端口做区分,同学们也可以用三台机器来做环境搭建
此场景中,我们将MySQL A和MySQL B搭建成主从复制关系,同时我们只变更schema.xml的配置来完成读写分离的架构;
schema.xml
show slave status
DBLE通过balance参数来控制读写分离的负载策略,写节点是否参与均衡与datahost的balance属性有关,本案例中我们将值调整为balance="3",并定义了writeHost和readHost
balance的定义具体见下图

验证配置生效
通过DBLE管理入口9066登陆数据库,注意这里我们通过管理入口的show @@datasource来验证读写分离的状态的正确性
- session1
##session1 登陆DBLE的管理端,查看读写分离的节点状态 mysql -P9066 -h 127.0.0.1 -uman1 -p654321 mysql> show @@datasource; +--------+------------+-------+------+--------+------+------+---------+-----------+------------+ | NAME | HOST | PORT | W/R | ACTIVE | IDLE | SIZE | EXECUTE | READ_LOAD | WRITE_LOAD | +--------+------------+-------+------+--------+------+------+---------+-----------+------------+ | MySQLA | 172.16.3.1 | 19388 | W | 11 | 11 | 1000 | 11 | 0 | 0 | | MySQLB | 172.16.3.1 | 19389 | R | 1 | 4 | 1000 | 3 | 0 | 0 | +--------+------------+-------+------+--------+------+------+---------+-----------+------------+ 2 rows in set (0.00 sec)
- session2
## session2 下发selct语句5次,查看READ_LOAD字段计数器的变化 mysql -P8066 -h 127.0.0.1 -utest -ppassword mysql> select * from users;
- session1
##session1 返回DBLE的管理端,查看读写分离的节点状态 mysql> show @@datasource; +--------+------------+-------+------+--------+------+------+---------+-----------+------------+ | NAME | HOST | PORT | W/R | ACTIVE | IDLE | SIZE | EXECUTE | READ_LOAD | WRITE_LOAD | +--------+------------+-------+------+--------+------+------+---------+-----------+------------+ | MySQLA | 172.16.3.1 | 19388 | W | 11 | 11 | 1000 | 11 | 0 | 0 | | MySQLB | 172.16.3.1 | 19389 | R | 1 | 4 | 1000 | 8 | 5 | 0 | +--------+------------+-------+------+--------+------+------+---------+-----------+------------+ 2 rows in set (0.00 sec)
从show @@datasource;这个管理命令上我们能够观测到READ_LOAD在slave节点上计数器增加了5次,也就是说读流量顺利的下发到了slave节点;当然大家也可以通过打开mysql的general log来观测读写分离的情况
总结
本文通过两个场景来讲解DBLE的快速入门,希望通过简单的示例来给大家梳理DBLE的基本概念,帮助大家快速熟悉和使用DBLE这个中间件;更高阶的使用方法和细节建议大家参考官方文档;

本篇关于《开源分布式中间件 DBLE 快速入门指南》的介绍就到此结束啦,但是学无止境,想要了解学习更多关于数据库的相关知识,请关注golang学习网公众号!

- 上一篇
- 编写一个 SQL 查询来实现分数排名。

- 下一篇
- Python与数据库的新人手册 -- MySQL
-
- 勤奋的小海豚
- 写的不错,一直没懂这个问题,但其实工作中常常有遇到...不过今天到这,看完之后很有帮助,总算是懂了,感谢老哥分享文章!
- 2023-05-03 13:31:47
-
- 激情的芒果
- 这篇文章内容真是及时雨啊,作者大大加油!
- 2023-04-20 10:55:12
-
- 动人的绿茶
- 受益颇多,一直没懂这个问题,但其实工作中常常有遇到...不过今天到这,帮助很大,总算是懂了,感谢作者分享博文!
- 2023-04-16 04:30:23
-
- 敏感的鸵鸟
- 太细致了,收藏了,感谢作者大大的这篇技术贴,我会继续支持!
- 2023-04-13 13:16:32
-
- 称心的楼房
- 这篇技术文章真及时,好细啊,受益颇多,收藏了,关注作者大大了!希望作者大大能多写数据库相关的文章。
- 2023-04-02 22:47:37
-
- 顺利的板凳
- 这篇博文真及时,很详细,很有用,已加入收藏夹了,关注大佬了!希望大佬能多写数据库相关的文章。
- 2023-03-04 01:58:31
-
- 数据库 · MySQL | 6小时前 | 列别名
- MySQL中AS语句详解:列或表别名用法
- 330浏览 收藏
-
- 数据库 · MySQL | 9小时前 | 数据类型 扩展性 存储引擎 CREATETABLE PRIMARYKEY
- MySQL创建表的详细步骤及技巧
- 250浏览 收藏
-
- 数据库 · MySQL | 14小时前 | 索引 数据类型 约束 主键 CREATETABLE
- MySQL建表命令详解:CREATETABLE示例及解释
- 206浏览 收藏
-
- 前端进阶之JavaScript设计模式
- 设计模式是开发人员在软件开发过程中面临一般问题时的解决方案,代表了最佳的实践。本课程的主打内容包括JS常见设计模式以及具体应用场景,打造一站式知识长龙服务,适合有JS基础的同学学习。
- 542次学习
-
- GO语言核心编程课程
- 本课程采用真实案例,全面具体可落地,从理论到实践,一步一步将GO核心编程技术、编程思想、底层实现融会贯通,使学习者贴近时代脉搏,做IT互联网时代的弄潮儿。
- 508次学习
-
- 简单聊聊mysql8与网络通信
- 如有问题加微信:Le-studyg;在课程中,我们将首先介绍MySQL8的新特性,包括性能优化、安全增强、新数据类型等,帮助学生快速熟悉MySQL8的最新功能。接着,我们将深入解析MySQL的网络通信机制,包括协议、连接管理、数据传输等,让
- 497次学习
-
- JavaScript正则表达式基础与实战
- 在任何一门编程语言中,正则表达式,都是一项重要的知识,它提供了高效的字符串匹配与捕获机制,可以极大的简化程序设计。
- 487次学习
-
- 从零制作响应式网站—Grid布局
- 本系列教程将展示从零制作一个假想的网络科技公司官网,分为导航,轮播,关于我们,成功案例,服务流程,团队介绍,数据部分,公司动态,底部信息等内容区块。网站整体采用CSSGrid布局,支持响应式,有流畅过渡和展现动画。
- 484次学习
-
- 笔灵AI生成答辩PPT
- 探索笔灵AI生成答辩PPT的强大功能,快速制作高质量答辩PPT。精准内容提取、多样模板匹配、数据可视化、配套自述稿生成,让您的学术和职场展示更加专业与高效。
- 24次使用
-
- 知网AIGC检测服务系统
- 知网AIGC检测服务系统,专注于检测学术文本中的疑似AI生成内容。依托知网海量高质量文献资源,结合先进的“知识增强AIGC检测技术”,系统能够从语言模式和语义逻辑两方面精准识别AI生成内容,适用于学术研究、教育和企业领域,确保文本的真实性和原创性。
- 39次使用
-
- AIGC检测-Aibiye
- AIbiye官网推出的AIGC检测服务,专注于检测ChatGPT、Gemini、Claude等AIGC工具生成的文本,帮助用户确保论文的原创性和学术规范。支持txt和doc(x)格式,检测范围为论文正文,提供高准确性和便捷的用户体验。
- 38次使用
-
- 易笔AI论文
- 易笔AI论文平台提供自动写作、格式校对、查重检测等功能,支持多种学术领域的论文生成。价格优惠,界面友好,操作简便,适用于学术研究者、学生及论文辅导机构。
- 50次使用
-
- 笔启AI论文写作平台
- 笔启AI论文写作平台提供多类型论文生成服务,支持多语言写作,满足学术研究者、学生和职场人士的需求。平台采用AI 4.0版本,确保论文质量和原创性,并提供查重保障和隐私保护。
- 41次使用
-
- golang MySQL实现对数据库表存储获取操作示例
- 2022-12-22 499浏览
-
- golang 基于 mysql 简单实现分布式读写锁
- 2023-01-07 384浏览
-
- 详解如何利用GORM实现MySQL事务
- 2023-01-07 184浏览
-
- Go语言实现操作MySQL的基础知识总结
- 2023-01-23 265浏览
-
- Go结合Gin导出Mysql数据到Excel表格
- 2023-01-01 352浏览