APP下载

实战分布式数据库

2017-11-07

网络安全和信息化 2017年9期
关键词:引擎服务器数据库

先来说两个DBA经常遇到的场景。

场景1:有两个分布在不同实例的多张不通的表,想要通过某字段关联做统计,或者想将分布在不同实例的表合并到一个实例中做查询。

场景2:由于数据库容量瓶颈或数据库访问性能瓶颈,将某大库、大表或访问量大的表进行拆分,再分布到不同实例中。

这两种场景覆盖了垂直拆分和水平拆分,笔者想到的解决办法可能有使用数据库中间件,使用MySQL分区表,使用Galera Cluster for MySQL,使 用 MySQL的 多源复制,使用federated,使用MySQL Sharding和Spider。本文就是基于Spider的分布式数据库解决方案,下面详细介绍一下。

图1 spider架构图

图2 垂直分表场景图

图3 水平分表场景图

Spider引擎简介

1.Spider引擎是什么

Spider引擎是一个内置的支持数据分片特性的存储引擎,支持分区和XA事务,该引擎可以在服务器上建立和远程服务器表之间的链接,操作起来就像操作本地的表一样。并且后端可以是任何的存储引擎。

Spider引擎根据表的设置的规则以及Server表的规则自动进行智能路由,实现对后端数据库不通的表或者数据分片的访问和修改。因此该引擎对业务是完全透明的。

目前Spider引擎已经集成到了MariaDB中,安装使用非常方面,目前最新的版本是Spider 3.2.37。更多信息可以访 问 :https://mariadb.com/kb/en/mariadb/spider-storage-engineoverview/。

2.Spider架构图

Spider架构图如图1。

Spider的使用场景解析

1.垂直分表的场景和解析

如图2所示,Spider后面接4台DB Server,可将不同功能的表分布到后端不同的DB Server中,比如user_info的表专门存放在HostA中,user_msg表 存 放 在HostB中,user_detail表存 放 在 HostC中,user_log表存放在HostD中。

当我们执行HostA的SQL的时候,Spider会通过user_info表的映射关系以及HostA的IP映射关系,将查询user_info表的请求都转发到HostA上,HostA查询完成后再将结果发给Spider服务器,Spider再转发给客户端。

2.水平分表的场景和解析

Spider支持多种水平分表的模式,目前支持hash分表(hash)、范围分表(range)、列表分表(list),笔者用range来说明水平分表的工作原理。

如 图3所 示,Spider对user_info表 针 对id进行了分区,将0~100000的记录存储在了HostA,100000~200000的记录存储在 了 HostB,200000~300000的记录存储在了HostC,300000~400000的记录存储在了HostD。当用户访问user_info的某条或者多条记录的时候,Spider会根据分区的情况,对相关的记录落在某台或者多台DB Server上,再进行转发。比 如select*from user_info where id=1这个SQL,Spider在收到这个请求后,会跟进分区情况选择对应的DB Server进行转发。这里会将该请求转发到HostA中。HostA处理完成后,再将结果返回给Spider Server,Spider再将结果转发给发起请求的客户端。

图4 安装成功

图5 部署拓扑图

Spider的安装部署

从Spider 10.0.0.4版本开始,Spider引擎就集成到了MariaDB中,集成后安装就非常的简单,安装步骤如下:

1.安 装mariaDB到Spider server以及后端多台DB server上

安装方法非常简单,这里不在赘述,具体可以参考:https://mariadb.com/kb/en/mariadb/getting-installingand-upgrading-mariadb/

2.安装Spider引擎到Spider Server上(后端的DB Server不需要安装Spider引擎)

mysql -uroot -p <install_spider.sql

或者登录MySQL后执行

source /path/install_spider.sql

备 注 :install_spider.sql在share目录下面。

这个命令所做的事情如下:

创建Spider相关的系统表

创建Spider相关的表结构,加载Spider引擎

3.检查Spider引擎是否安装成功

如果出现图4所示的结果就说明已经支持了Spider引擎。

Spider的使用实战

本实践环境基于tspider-1.8.5环境全部验证通过。

1.Spider实战拓扑图

在实战部分,笔者使用了2台DB Server,部署图如图5所示。

2.实战前准备

首先,创建Spider Server访问后端DB Server的权限(后面配置中需要用到)。

grantallon*.* tospider_d b_all@'10.128.128.91'identified by 'tospider_db_all';

其次,创建Spider后端DB Server的配置。可以通过执行如下SQL的形式直接创建。

createserver backend1 foreign data wrapper mysql options(host '10.128.128.60',database 'test', user'spider_db_all', password'spider_db_all', port 3306);

createserver backend2 foreign data wrapper mysql options(host '10.128.128.88',database'test',user'spider_db_all',password'spider_db_all',port 3306);

图6 查询mysql.servers表

也可以通过直接给mysql.servers表中直接插入相关的记录,不过后面执行flush hosts才能生效。

insert into mysql.servers(Server_name,Host,Db,Username,Password,Po rt,Socket,Wrapper,Owner)values('backend1','10.1 28.128.60','test','spid er_db_all','spider_db_al l',3306,'','mysql','');

insert into mysql.servers(Server_name,Host,Db,Username,Password,Po rt,Socket,Wrapper,Owner)values ('backend2','10.1 28.128.88','test','spid er_db_all','spider_db_al l',3306,'','mysql','');

创建完成后可以直接查询mysql.servers表,确认是否添加成功,如图6所示。

然后,创建基础测试表。

在后端两台DB Server上创建基础测试表(在60和88上执行)。

3.Spider引擎实战

首先,建立垂直表(远程表进行测试)。

创建之后,执行对应增删改查,看看是否对应的操作都发生在了backend1对应的DB Server上。

测试完成后,删除掉Spider 服务器上的test_spider表,你会发现drop掉Spider上的表,不会导致后端DB Server上的表被删除。

其次,建立hash分区表。

创建之后,执行对应增删改查,看看是否对应的操作都发生在了backend1和backend2对应的DB Server上。

测试完成后,删除掉Spider服务器上的test_spider表,你会发现drop掉Spider上的表,不会导致后端DB Server上的表被删除。

然后,建立range分区表。

创建之后,执行对应增删改查,看看是否对应的操作都发生在了backend1和backend2对应的DB Server上。

测试完成后,删除掉Spider服务器上的test_spider表,你会发现drop掉Spider上的表,不会导致后端DB Server上的表被删除。

最后,建立list分区表测试。

创建之后,执行对应增删改查,看看是否对应的操作都发生在了backend1和backend2对应的DB Server上。

测试完成以后,删除掉Spider 服务器上的test_spider表,那么你会发现drop掉Spider上的表,不会导致后端DB Server上的表被删除。

猜你喜欢

引擎服务器数据库
新海珠,新引擎,新活力!
通信控制服务器(CCS)维护终端的设计与实现
PowerTCP Server Tool
三生 三大引擎齐发力
蓝谷: “涉蓝”新引擎
数据库
得形忘意的服务器标准
计算机网络安全服务器入侵与防御
数据库
数据库