首页 技术 正文
技术 2022年11月23日
0 收藏 542 点赞 4,970 浏览 9180 个字

DBLE 是企业级开源分布式中间件,江湖人送外号 “MyCat Plus”;以其简单稳定,持续维护,良好的社区环境和广大的群众基础得到了社区的大力支持;


环境准备

DBLE项目资料

  1.  DBLE官方网站:https://opensource.actionsky.com
  2.  可以详细了解DBLE的背景和应用场景,本文不涉及到的细节都可在官方文档获得更细节都信息;对于刚了解到同学,可以以本文为快速入门基础
  3.   
  4.  DBLE官方项目:https://github.com/actiontech/dble
  5.  如对源码有兴趣或者需要定制的功能的可以通过源码编译
  6.   
  7.  DBLE下载地址:https://github.com/actiontech/dble/releases
  8.  建议下载最新的releases版本,下载tar压缩包即可,如有源码编译需求的,可以下载源码包
  9.  DBLE社区交流:669663113
  10.   

安装JDK环境

DBLE是使用java开发的,所以需要启动dble需要先在机器上安装java版本1.8或以上,并且确保JAVA_HOME参数被正确的设置;

这里通过yum源的方式安装了openjdk,同学们可以自行google jdk的几百种安装方式,这里不在赘述;

# yum install java-1.8.0-openjdk

 

确认java环境已配置完成

  1.  # java -version
  2.  openjdk version “1.8.0_191”
  3.  OpenJDK Runtime Environment (build 1.8.0_191-b12)
  4.  OpenJDK 64-Bit Server VM (build 25.191-b12, mixed mode)

安装DBLE

DBLE的安装其实只要解压下载的目录就可以了,非常简单。

  1.  mkdir -p $working_dir
  2.  cd $working_dir
  3.  tar -xvf actiontech-dble-$version.tar.gz
  4.  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来方便后续的验证,表结构如下:

  1.  CREATE TABLE `users` (
  2.  `id` int(11) NOT NULL,
  3.  `user` varchar(20) DEFAULT NULL,
  4.  PRIMARY KEY (`id`)
  5.  ) ENGINE=InnoDB DEFAULT CHARSET=latin1

server.xml

server.xml里可以配置跟DBLE自身相关的许多参数,这里重点只关注下面这段访问用户相关的配置,其他默认即可;

第一段 “< system >” 为DBLE的服务端口(默认8066)和管理端口(默认9066)的配置

  • 管理端口只能接受DBLE的管理命令,这里不做展开
  • 服务端口即DBLE的业务访问端口,可以接受SQL语句

第二段“< user >”配置管理理用户,默认为man1,密码为654321

  • 即可以通过 mysql -P9066 -h 127.0.0.1 -u man1 -p654321来下发管理命令

第三段“< user >”配置业务用户,配置了一个账号test 密码password,针对数据库testdb,读写权限都有,没有针对表做任何特殊的权限,故把表配置做了注释

  • 即可以通过 mysql -P8066 -h 127.0.0.1 -utest -ppassword下发SQL语句
  1.  …
  2.   
  3.  <system>
  4.  …
  5.  <!– property name=”serverPort”>8066</property> –>
  6.  <!–<property name=”managerPort”>9066</property> –>
  7.  …
  8.  </system>
  9.  <user name=”man1″>
  10.  <property name=”password”>654321</property>
  11.  <property name=”manager”>true</property>
  12.  <!– manager user can’t set schema–>
  13.  </user>
  14.   
  15.  <user name=”test”>
  16.  <property name=”password”>password</property>
  17.  <property name=”schemas”>testdb</property>
  18.   
  19.  <!– table’s DML privileges INSERT/UPDATE/SELECT/DELETE –>
  20.  <!–
  21.   <privileges check=”false”>
  22.   <schema name=”TESTDB” dml=”0110″ >
  23.   <table name=”tb01″ dml=”0000″></table>
  24.   <table name=”tb02″ dml=”1111″></table>
  25.   </schema>
  26.   </privileges>
  27.   –>
  28.  </user>
  29.  …
参数 说明
user 用户配置节点
name 登录的用户名,也就是连接DBLE的用户名
password 登录的密码,也就是连接DBLE的密码
schemas 数据库名,这里会和schema.xml中的配置关联,多个用逗号分开,例如需要这个用户需要管理两个数据库db1,db2,则配置db1,db2
privileges 配置用户针对表的增删改查的权限,具体见官方文档,这里不做展开

schema.xml

schema.xml是最主要的配置项,我们将users用户表按照取模的方式平均拆分到了MySQL A和MySQL B两个数据数据库实例上,
详细请看配置文件:

  1.  <?xml version=”1.0″?>
  2.  <!DOCTYPE dble:schema SYSTEM “schema.dtd”>
  3.  <dble:schema xmlns:dble=”http://dble.cloud/”>
  4.   
  5.   <schema name=”testdb”>
  6.   <table name=”users” primaryKey=”ID” dataNode=”dn1,dn2″ rule=”sharding-by-mod2″ />
  7.   </schema>
  8.   
  9.   <!– 分片配置 –>
  10.   <dataNode name=”dn1″ dataHost=”Group1″ database=”testdb”/>
  11.   <dataNode name=”dn2″ dataHost=”Group2″ database=”testdb”/>
  12.   
  13.   <!– 物理数据库配置 –>
  14.   <dataHost name=”Group1″ maxCon=”1000″ minCon=”10″ balance=”0″ switchType=”1″ slaveThreshold=”100″>
  15.   <heartbeat>show slave status</heartbeat>
  16.   <writeHost host=”MySQLA” url=”172.16.3.1:14014″ user=”test” password=”password”/>
  17.   </dataHost>
  18.   
  19.   <dataHost name=”Group2″ maxCon=”1000″ minCon=”10″ balance=”0″ switchType=”1″ slaveThreshold=”100″>
  20.   <heartbeat>show slave status</heartbeat>
  21.   <writeHost host=”MySQLA” url=”172.16.3.1:14015″ user=”test” password=”password”/>
  22.   </dataHost>
  23.  </dble:schema>

参数说明

  • schema 逻辑数据库信息,此数据库为逻辑数据库,name 与 server.xml 中 schema对应;
  • dataNode 分片信息,此为分片节点的定义;分片名字和schema的dataNode对应;分片与下面的dataHost 物理实例进行关联;
  • dataHost 物理实例组信息,dataHost下可以挂载同组的读写物理实例节点,实现高可用或者读写分离;

每个节点的属性逐一说明:

  • schema:

属性说明 :

  1.  – name 逻辑数据库名,与 server.xml 中的 schema 对应;
  2.  – table:

子属性说明 :

  1.   – name 表名,物理数据库中表名
  2.   – dataNode 表存储到哪些节点,多个节点用逗号分隔
  3.   – primaryKey 主键,用于主键缓存和自增识别,不作主键约束
  4.   – autoIncrement 是否自增
  5.   – rule 分片规则名,具体规则下文 rule 详细介绍
  • dataNode
    属性说明:

    • name 节点名,与 table 中 dataNode 对应
    • datahost 物理实例组名,与 datahost 中 name 对应
    • database 物理数据库中数据库名;
  • dataHost

属性说明:

  • name 物理数据库名,与 dataNode 中 dataHost 对应
  • balance 均衡负载的方式
  • switchtype 写节点的高可用切换方式;等于1时,心跳不健康发生切换
  • heartbeat 心跳检测语句,注意语句结尾的分号要加
  • writehost 写物理实例

    1.  子属性说明 :
    2.  – host 物理实例名
    3.  – url 物理库IP+Port
    4.  – user 物理库用户
    5.  – password 物理库密码

rule.xml

主要关注rule属性,rule属性的内容来源于rule.xml这个文件,DBLE支持多种分表分库的规则,基本能满足你所需要的要求

table中的rule属性对应的就是rule.xml文件中tableRule的name,具体有哪些拆分算法实现,建议还是看下文档。我这里选择的sharding-by-mod2,是hash算法的特例,就是将数据平均拆分。因为我后端是两台物理库,所以rule.xml中hashmod2对应的partitionCountt为2,配置如下:

  1.   <tableRule name=”sharding-by-mod2″>
  2.   <rule>
  3.   <columns>id</columns>
  4.   <algorithm>hashmod2</algorithm>
  5.   </rule>
  6.   </tableRule>
  7.   <function name=”hashmod2″ class=”Hash”>
  8.   <property name=”partitionCount”>2</property>
  9.   <property name=”partitionLength”>1</property>
  10.   </function>

验证配置生效

启动DBLE

  1.  ## 进入DBLE安装目录,执行start命令
  2.  ./bin/dble start
  3.   
  4.  ## DBLE启动会自动加载配置,需确认进程是否正常启动,如启动失败,建议按照日志报错排查问题,正确启动日志如下:
  5.  STATUS | wrapper | 2019/01/21 17:31:43 | –> Wrapper Started as Daemon
  6.  STATUS | wrapper | 2019/01/21 17:31:43 | Launching a JVM…
  7.  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
  8.  INFO | jvm 1 | 2019/01/21 17:31:44 | Wrapper (Version 3.2.3) http://wrapper.tanukisoftware.org
  9.  INFO | jvm 1 | 2019/01/21 17:31:44 | Copyright 1999-2006 Tanuki Software, Inc. All Rights Reserved.
  10.  INFO | jvm 1 | 2019/01/21 17:31:44 |
  11.  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侧的查询记录

  1.  mysql> insert into users(id,user) values(1,”zhangsan”);
  2.  Query OK, 1 row affected (0.09 sec)
  3.  mysql> insert into users(id,user) values(2,”lisi”);
  4.  Query OK, 1 row affected (0.09 sec)
  5.   
  6.   
  7.  mysql> explain select * from users;
  8.  +———–+———-+———————+
  9.  | DATA_NODE | TYPE | SQL/REF |
  10.  +———–+———-+———————+
  11.  | dn1 | BASE SQL | select * from users |
  12.  | dn2 | BASE SQL | select * from users |
  13.  +———–+———-+———————+
  14.  2 rows in set (0.00 sec)
  15.   
  16.  mysql> select * from users;
  17.  +—-+———-+
  18.  | id | user |
  19.  +—-+———-+
  20.  | 2 | lisi |
  21.  | 1 | zhangsan |
  22.  +—-+———-+
  23.  2 rows in set (0.01 sec)

获取MySQLA和MySQLB的记录

  1.  # mysql -P14014 -h 127.0.0.1 -utest -ppassword
  2.  mysql> select * from users;
  3.  +—-+———-+
  4.  | id | user |
  5.  +—-+———-+
  6.  | 2 | lisi |
  7.  +—-+———-+
  8.  1 rows in set (0.01 sec)
  9.   
  10.  # mysql -P14015 -h 127.0.0.1 -utest -ppassword
  11.  mysql> select * from users;
  12.  +—-+———-+
  13.  | id | user |
  14.  +—-+———-+
  15.  | 1 | zhangsan |
  16.  +—-+———-+
  17.  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

  1.  <?xml version=”1.0″?>
  2.  <!DOCTYPE dble:schema SYSTEM “schema.dtd”>
  3.  <dble:schema xmlns:dble=”http://dble.cloud/”>
  4.   
  5.  <schema name=”testdb”>
  6.  </schema>
  7.   
  8.  <!– 分片配置 –>
  9.  <dataNode name=”dn1″ dataHost=”Group1″ database=”testdb”/>
  10.   
  11.  <!– 物理数据库配置 –>
  12.  <dataHost name=”Group1″ maxCon=”1000″ minCon=”10″ balance=”3″ switchType=”1″ slaveThreshold=”100″>
  13.  <heartbeat>show slave status</heartbeat>
  14.  <writeHost host=”MySQLA” url=”172.16.3.1:14014″ user=”test” password=”password”>
  15.  <readHost host=”MySQLB” url=”172.16.3.1:14015″ user=”test” password=”password”/>
  16.  </writeHost>
  17.  </dataHost>
  18.  </dble:schema>

DBLE通过balance参数来控制读写分离的负载策略,写节点是否参与均衡与datahost的balance属性有关,本案例中我们将值调整为balance=”3″,并定义了writeHost和readHost
balance的定义具体见下图

MySQL 中间件 – DBLE 简单使用

验证配置生效

通过DBLE管理入口9066登陆数据库,注意这里我们通过管理入口的show @@datasource来验证读写分离的状态的正确性

  • session1
  1.  ##session1 登陆DBLE的管理端,查看读写分离的节点状态
  2.  mysql -P9066 -h 127.0.0.1 -uman1 -p654321
  3.  mysql> show @@datasource;
  4.  +——–+————+——-+——+——–+——+——+———+———–+————+
  5.  | NAME | HOST | PORT | W/R | ACTIVE | IDLE | SIZE | EXECUTE | READ_LOAD | WRITE_LOAD |
  6.  +——–+————+——-+——+——–+——+——+———+———–+————+
  7.  | MySQLA | 172.16.3.1 | 19388 | W | 11 | 11 | 1000 | 11 | 0 | 0 |
  8.  | MySQLB | 172.16.3.1 | 19389 | R | 1 | 4 | 1000 | 3 | 0 | 0 |
  9.  +——–+————+——-+——+——–+——+——+———+———–+————+
  10.  2 rows in set (0.00 sec)
  • session2
  1.  ## session2 下发selct语句5次,查看READ_LOAD字段计数器的变化
  2.  mysql -P8066 -h 127.0.0.1 -utest -ppassword
  3.  mysql> select * from users;
  • session1
  1.  ##session1 返回DBLE的管理端,查看读写分离的节点状态
  2.  mysql> show @@datasource;
  3.  +——–+————+——-+——+——–+——+——+———+———–+————+
  4.  | NAME | HOST | PORT | W/R | ACTIVE | IDLE | SIZE | EXECUTE | READ_LOAD | WRITE_LOAD |
  5.  +——–+————+——-+——+——–+——+——+———+———–+————+
  6.  | MySQLA | 172.16.3.1 | 19388 | W | 11 | 11 | 1000 | 11 | 0 | 0 |
  7.  | MySQLB | 172.16.3.1 | 19389 | R | 1 | 4 | 1000 | 8 | 5 | 0 |
  8.  +——–+————+——-+——+——–+——+——+———+———–+————+
  9.  2 rows in set (0.00 sec)

从show @@datasource;这个管理命令上我们能够观测到READ_LOAD在slave节点上计数器增加了5次,也就是说读流量顺利的下发到了slave节点;当然大家也可以通过打开mysql的general log来观测读写分离的情况

总结

本文通过两个场景来讲解DBLE的快速入门,希望通过简单的示例来给大家梳理DBLE的基本概念,帮助大家快速熟悉和使用DBLE这个中间件;更高阶的使用方法和细节建议大家参考官方文档;

微信扫一扫

支付宝扫一扫

本文网址:https://www.zhankr.net/140935.html

相关推荐
python开发_常用的python模块及安装方法
adodb:我们领导推荐的数据库连接组件bsddb3:BerkeleyDB的连接组件Cheetah-1.0:我比较喜欢这个版本的cheeta…
日期:2022-11-24 点赞:875 阅读:5,075
Educational Codeforces Round 11 C. Hard Process 二分
C. Hard Process题目连接:http://www.codeforces.com/contest/660/problem/CDes…
日期:2022-11-24 点赞:806 阅读:3,505
下载Ubuntn 17.04 内核源代码
zengkefu@server1:/usr/src$ uname -aLinux server1 4.10.0-19-generic #21…
日期:2022-11-24 点赞:565 阅读:4,317
可用Active Desktop Calendar V7.86 注册码序列号
可用Active Desktop Calendar V7.86 注册码序列号Name: www.greendown.cn Code: &nb…
日期:2022-11-24 点赞:730 阅读:4,311
Android调用系统相机、自定义相机、处理大图片
Android调用系统相机和自定义相机实例本博文主要是介绍了android上使用相机进行拍照并显示的两种方式,并且由于涉及到要把拍到的照片显…
日期:2022-11-24 点赞:512 阅读:4,912
Struts的使用
一、Struts2的获取  Struts的官方网站为:http://struts.apache.org/  下载完Struts2的jar包,…
日期:2022-11-24 点赞:671 阅读:3,099
发表评论
暂无评论

还没有评论呢,快来抢沙发~

助力内容变现

将您的收入提升到一个新的水平

点击联系客服

在线时间:8:00-16:00

客服电话

400-888-8888

客服邮箱

ceotheme@ceo.com

扫描二维码

关注微信公众号

扫描二维码

手机访问本站