MySQLDBLE_MySQL中间件-DBLE简单使⽤
DBLE 是企业级开源分布式中间件,江湖⼈送外号 “MyCat Plus”;以其简单稳定,持续维护,良好的社区环境和⼴⼤的众基础得到了社区的⼤⼒⽀持;
环境准备
DBLE项⽬资料
可以详细了解DBLE的背景和应⽤场景,本⽂不涉及到的细节都可在官⽅⽂档获得更细节都信息;对于刚了解到同学,可以以本⽂为快速⼊门基础
如对源码有兴趣或者需要定制的功能的可以通过源码编译
建议下载最新的releases版本,下载tar压缩包即可,如有源码编译需求的,可以下载源码包
DBLE社区交流:669663113
安装JDK环境
DBLE是使⽤java开发的,所以需要启动dble需要先在机器上安装java版本1.8或以上,并且确保JAVA_H
OME参数被正确的设置;
这⾥通过yum源的⽅式安装了openjdk,同学们可以⾃⾏google jdk的⼏百种安装⽅式,这⾥不在赘述;
# 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的安装其实只要解压下载的⽬录就可以了,⾮常简单。
mkdir -p $working_dir
cd $working_dir
tar -xvf actiontech-dble-$
cd $working_dir/dble/conf
安装完成后,⽬录如下:
⽬录说明
bin
dble命令:启动、重启、停⽌等
conf
dble配置信息,本⽂重点关注
lib
dble引⽤的jar包
logs
⽇志⽂件,包括dble启动的⽇志和运⾏的⽇志
配置DBLE
DBLE的配置⽂件都在conf⽬录⾥⾯,这⾥介绍⼏个常⽤的⽂件:
⽂件说明
DBLE server相关参数定义,包括dble性能,定时任务,端⼝,⽤户配置等;本⽂主要涉及到访问⽤户的配置
DBLE具体分⽚定义,规定table和schema以及dataNode之间的关系,指定每个表格使⽤哪种类型的分⽚⽅法,定义每个dataNode的连接信息等
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
简单的mysql语句l⾥可以配置跟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语句
...
...
...
654321
true
password
testdb
...
参数说明
user
⽤户配置节点
name
登录的⽤户名,也就是连接DBLE的⽤户名
password
登录的密码,也就是连接DBLE的密码
schemas
数据库名,这⾥会和l中的配置关联,多个⽤逗号分开,例如需要这个⽤户需要管理两个数据库db1,db2,则配置db1,db2
privileges
配置⽤户针对表的增删改查的权限,具体见官⽅⽂档,这⾥不做展开
详细请看配置⽂件:
show slave status
show slave status
参数说明
schema 逻辑数据库信息,此数据库为逻辑数据库,name 与 l 中 schema对应;
dataNode 分⽚信息,此为分⽚节点的定义;分⽚名字和schema的dataNode对应;分⽚与下⾯的dataHost 物理实例进⾏关联;dataHost 物理实例组信息,dataHost下可以挂载同组的读写物理实例节点,实现⾼可⽤或者读写分离;
每个节点的属性逐⼀说明:
schema:
属性说明 :
- name 逻辑数据库名,与 l 中的 schema 对应;
- table:
⼦属性说明 :
- name 表名,物理数据库中表名
- dataNode 表存储到哪些节点,多个节点⽤逗号分隔
- primaryKey 主键,⽤于主键缓存和⾃增识别,不作主键约束
- autoIncrement 是否⾃增
- rule 分⽚规则名,具体规则下⽂ rule 详细介绍
dataNode
属性说明:
name 节点名,与 table 中 dataNode 对应
datahost 物理实例组名,与 datahost 中 name 对应
database 物理数据库中数据库名;
dataHost
属性说明:
name 物理数据库名,与 dataNode 中 dataHost 对应
balance 均衡负载的⽅式
switchtype 写节点的⾼可⽤切换⽅式;等于1时,⼼跳不健康发⽣切换
heartbeat ⼼跳检测语句,注意语句结尾的分号要加
writehost 写物理实例
⼦属性说明 :
- host 物理实例名
- url 物理库IP+Port
- user 物理库⽤户
-
password 物理库密码
主要关注rule属性,rule属性的内容来源于l这个⽂件,DBLE⽀持多种分表分库的规则,基本能满⾜你所需要的要求
table中的rule属性对应的就是l⽂件中tableRule的name,具体有哪些拆分算法实现,建议还是看下⽂档。我这⾥选择的sharding-by-mod2,是hash算法的特例,就是将数据平均拆分。因为我后端是两台物理库,所以l中hashmod2对应的partitionCountt为2,配置如下:
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
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 | 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 |
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论