https://v.youku.com/v_show/id_XNDQ0NzY3MTQ1Ng==
上一期我们介绍了通过 Docker 来安装 DBLE 的安装方式。如果是普通的安装方式我们要怎么做呢?
我这里同样有一个安装视频演示,理论上应该搭建两个 MySQL 的真实环境来做,但是 MySQL 今天不是我们的重点,所以 MySQL 还是用容器方式做的。我们的 DBLE 是使用单独的一个压缩包安装的,DBLE 手册中有一个 quick start ,可以抽空去看。 接下来安装演示。 https://v.youku.com/v_show/id_XNDQ0NzY3NTgzNg==
MySQL 的安装
首先下载好 github 上发布的安装包,解压后当前目录下生成一个叫 dble 的目录。因为没有安装启用 MySQL 服务,所以先要用 Docker 来启动一下 MySQL 的服务(非常方便)。接下来指定 MySQL 服务所在容器的名字,指定登录的密码和映射端口。使用 Docker 里面 MySQL 端口是 3306,端口映射宿主机是 33061。大家可以理解为MySQL 数据库的端口是 33061,第一个搭建完毕。第二个只需要改一下容器名称和端口,避免冲突。这样两个 MySQL 数据库可以使用了。 然后用 docker ps 查看两个 MySQL 正在运行。这样就完成了 MySQL 的准备工作,接下来准备 DBLE。
DBLE 的安装和配置
我先给大家感性认识一下 DBLE 的安装。我们 DBLE 目录下默认的安装包会有三个 XML 模板文件。已经是配置好的,只需把模板文件复制成正式文件名即可。然后再修改配置里面的对应的属性,也就是指向我刚搭的两个 MySQL 就可以了。 接下来就去修改 schema.xml 的属性。我们的 schema 文件是用来组织 schema,table,数据库,数据节点的。把模板文件中一些多余的配置删掉,这些配置基本上是一些额外的功能。我们删掉一些多余的配置以后,就是一个很干净的配置文件。两个 datahost,每个 datahost 里面有一个 writehost ip1。从字面的意思上就是数据的写节点,需要把这个写节点的 ip 和端口,改成我们刚刚安装好的数据库,包括 url,MySQL 的用户名和密码。两台对应的相关属性都改了以后,从配置上讲 DBLE 已经指向了刚才安装好的两个 MySQL 的节点。 还有我们的数据节点的一个值,改完以后我们保存一下。本次修改完毕,然后我们启动。
DBLE 的启动
我们去找到 bin 下面录入的 DBLE 的启动文件 start 一下。怎么证明我的 DBLE 已经启动了呢?我们在日志里面看到一个 successfully 就启动好了。当然你可以用 ps 去观察进程。grep 后发现有三个和 DBLE 相关,一个是 DBLE 的守护进程,第二个是 DBLE 的 Java 进程,第三个是 grep 的进程。结果显示我装好一个 DBLE 的服务,然后去换一台终端。 在另一台终端,通过 8066 指向了 DBLE。可以看到,version 状态里会写 DBLE 的版本相关信息。我们 show datebases 里面有两个已经配置好的库。 到 testdb 中执行 show tables 没有表!但是我的 schema 文件刚才很明显的有很多表。这是因为从头搭建时,两个 MySQL 数据库都是空的,没有建过任何库表。所以结果看不到是合理的,那么我们现在需要建库建表,让 DBLE 配置中的这些表都是能使用。 首先查看 schema.xml 文件,我使用了哪些数据库。我们之后会对 schema.xml 进行详细解释。现在感性认识一下,我们 datanote 有 6 个,它指向了我两个 datahost:datahost1 和 datahost2。每个上面有 3 个 databases。所以我们需要通过管理端应用去建库,大家也可以分别在真正的 MySQL 数据库节点上操作,效果是一样的。下面我来展示一下通过 DBLE 建库功能。
DBLE 的管理端操作
我们需要使用到管理端的用户 manager,对应端口为 9066 。用管理端的用户名和密码登录 DBLE,重创建库。这个库其实是通过 DBLE 将创建 database 这个命令透传到后端 MySQL 数据库节点上的。如果库已经存在,就不需要额外建立,如果库没有建立,就额外建立。因为是用管理端命令,这个命令是我们自己定义的,命令细节可以在我们的手册中查到。我是通过 database 中的 datanote,指到 MySQL 实例里面的 database。这部分可以通过通配符来去做,刚刚是 1 到 6,所以这样写 1-6。 两个 MySQL 实例中库已经建立好了。这里只要修改 33061 端口,建立好 db1-3-5 数据库。配置文件当中 schema 定义了映射关系为 1-3-5 的数据库。同理创建另一个数据库。 然后建表,然后我这里提前准备好一个 tempable_table.sql 文件。内容是一些建表语句和一些简单的 insert 语句。再次登陆 8066 流量端入口,通过 MySQL 的 source 命令,执行语句。我们现在去查看我的表格的状态,看到我已经把表格建立好了,在节点插入了一些初始化的数据。所以我们看 show databases。选择其中一个 databases , show all tables 看到是一个拆分表。然后去另外一个 testdb2 里面去看一下。testdb2 只是展示另外 DBLE 的能力,其实它不是一个拆分表,是 DBLE 在这里做了转发。DBLE 也可以提供一个拆分表和非拆分表混合的结构。然后我们随便找一张表看一下 show create table ,一列 id ,一列 content。select ,insert ,update delete。证明一下这个数据库运行中。
一些注意
大家看到每次 select 结果的顺序是不一样的。DBLE 在这一层面是不稳定的,不加 order by 不保证数据的排序和聚簇索引一致的。大家可以看到这张表,其实是按求模来拆分,所以现在我们 explain 看查询结果,分别是 dn2,dn3,dn4,dn1。因为我的求模结果是从 0 开始的,所以 1 会路由到第二个结点,1234 对应 2341。 这是我们安装的演示,其实大家应该有很多疑问,这个都没有关系,这个可以带着问题去之后的演示查看。 好,我们今天就介绍到这里。 图文稿为了方便阅读,在不影响学习的情况下优化了一些口语化词汇,文稿与视频会尽量保持一致。
DBLE 及相关项目代码地址:
https://github.com/actiontech/dble https://github.com/actiontech/dble-docs-cn https://github.com/actiontech/dble-test-suite