使用Mysql Fabric和ProxySQL对Mysql进行分片
2017-07-12 17:01
141 查看
原文
有很多方法可以迁移到MySQL Fabric中。他们大多数需要您的应用程序的严重更改 - 您必须切换到MySQL Fabric连接器才能真正受益于MySQL Fabric基础结构。您可能还必须在应用程序中实现某种数据感知,因为在连接到MySQL Fabric时,它必须传递分片键(用于分配给定表格的列中的某些值)。这个过程可能是不可能在一个单一的步骤,所以我们准备了一个概念证明,以显示如何迁移没有应用程序更改。
该解决方案由几个元素组成。在后台,MySQL Fabric拥有高可用性分组和工具的分片系统。另一层使用MySQL路由器构建 - 它允许常规的MySQL客户端连接到在MySQL Fabric中创建的不同的高可用性组。它并不解决将查询路由到正确的分片的问题。这是ProxySQL进行帮助的地方 - 它允许我们执行完美的故障转移(从旧数据库到分片设置),但是它也会将查询路由到由MySQL路由器暴露的正确的分片。路由是基于ProxySQL解析SQL的能力,并根据查询是否匹配正则表达式对查询执行操作(包括重新路由)。
初始环境将如下图所示。我们使用MySQL Fabric配置了两个分片 - 这使我们共有三个高可用性组(两个分片和全局组)。每个这样的组建立在主从复制中的两个MySQL节点之上。在这些组织中,MySQL Fabric将通过监视MySQL的状态来管理高可用性,并且如果需要,还可以将从属设备升级为master。每个高可用性组都配置在MySQL路由器中,它们将其全部显示在不同的端口上。我们将分片表分成两半,每个分片存储一半的分片数据集。设置的最后剩余部分是路由。
ProxySQL使我们能够根据正则表达式匹配来更改查询路由。我们需要做的是准备一组规则 - 一种用于查找分片表的每种类型的查询。我们需要准备正则表达式,将区分哪些查询要路由到第一个分片或第二个分片。此过程可能会出现错误,您需要先测试规则,然后再将其应用于生产。限制也可能在这里适用 - 您的查询必须明确使用分片键来标识行 - 类似的限制适用于MySQL Fabric或任何其他分片解决方案,因此这不是我们设置引起的约束。必须为非分片的全局表创建其他查询规则。
一旦所有查询规则都准备就绪并进行测试,就必须进行切换 - 必须从基于MySQL复制的旧设置移动流量,并根据我们创建的规则将其路由到我们的分片设置 - 这可以使用ProxySQL完成,没有任何中断你的应用程序(只要你不使用长的事务)。
当流量撞到分片设置时,另一阶段开始 - 维护分片环境。MySQL Fabric为我们提供了不同的工具 - 您可以将主机添加到高可用性组,您可以在高可用性组中提升主机。您可能还需要拆分碎片。其中一些操作在我们的设置中是透明的,有些(如分割或移动分片)需要详细的准备工作,因为它们无法使用现有的MySQL Fabric CLI命令轻松执行。
有关我们从MySQL复制到MySQL Fabric分片环境的设置和迁移的更多详细信息,请参见电子书。
有很多方法可以迁移到MySQL Fabric中。他们大多数需要您的应用程序的严重更改 - 您必须切换到MySQL Fabric连接器才能真正受益于MySQL Fabric基础结构。您可能还必须在应用程序中实现某种数据感知,因为在连接到MySQL Fabric时,它必须传递分片键(用于分配给定表格的列中的某些值)。这个过程可能是不可能在一个单一的步骤,所以我们准备了一个概念证明,以显示如何迁移没有应用程序更改。
该解决方案由几个元素组成。在后台,MySQL Fabric拥有高可用性分组和工具的分片系统。另一层使用MySQL路由器构建 - 它允许常规的MySQL客户端连接到在MySQL Fabric中创建的不同的高可用性组。它并不解决将查询路由到正确的分片的问题。这是ProxySQL进行帮助的地方 - 它允许我们执行完美的故障转移(从旧数据库到分片设置),但是它也会将查询路由到由MySQL路由器暴露的正确的分片。路由是基于ProxySQL解析SQL的能力,并根据查询是否匹配正则表达式对查询执行操作(包括重新路由)。
初始环境将如下图所示。我们使用MySQL Fabric配置了两个分片 - 这使我们共有三个高可用性组(两个分片和全局组)。每个这样的组建立在主从复制中的两个MySQL节点之上。在这些组织中,MySQL Fabric将通过监视MySQL的状态来管理高可用性,并且如果需要,还可以将从属设备升级为master。每个高可用性组都配置在MySQL路由器中,它们将其全部显示在不同的端口上。我们将分片表分成两半,每个分片存储一半的分片数据集。设置的最后剩余部分是路由。
ProxySQL使我们能够根据正则表达式匹配来更改查询路由。我们需要做的是准备一组规则 - 一种用于查找分片表的每种类型的查询。我们需要准备正则表达式,将区分哪些查询要路由到第一个分片或第二个分片。此过程可能会出现错误,您需要先测试规则,然后再将其应用于生产。限制也可能在这里适用 - 您的查询必须明确使用分片键来标识行 - 类似的限制适用于MySQL Fabric或任何其他分片解决方案,因此这不是我们设置引起的约束。必须为非分片的全局表创建其他查询规则。
一旦所有查询规则都准备就绪并进行测试,就必须进行切换 - 必须从基于MySQL复制的旧设置移动流量,并根据我们创建的规则将其路由到我们的分片设置 - 这可以使用ProxySQL完成,没有任何中断你的应用程序(只要你不使用长的事务)。
当流量撞到分片设置时,另一阶段开始 - 维护分片环境。MySQL Fabric为我们提供了不同的工具 - 您可以将主机添加到高可用性组,您可以在高可用性组中提升主机。您可能还需要拆分碎片。其中一些操作在我们的设置中是透明的,有些(如分割或移动分片)需要详细的准备工作,因为它们无法使用现有的MySQL Fabric CLI命令轻松执行。
有关我们从MySQL复制到MySQL Fabric分片环境的设置和迁移的更多详细信息,请参见电子书。
相关文章推荐
- 使用MySql ODBC进行MYsql和MSsql的数据转换
- 使用MYSQL进行数据库备份
- 使用Eclipse插件DB viewer进行MySQL(SQL Server)等 数据库操作
- 使用shell脚本进行mysql操作
- 使用crontab进行Mysql每日自动备份
- 使用Erwin进行MYSQL的数据库设计
- 使用RPM包进行MYSQL的安装
- 使用xtrabackup对MySQL进行备份和恢复
- 使用Super Smack进行MySQL性能测试
- 使用调度和锁定进行MySQL查询优化
- 使用 Java 进行 MySQL 开发 (摘自:MySQL for Linux on POWER,第 2 部分: 开发应用)
- PHP―使用MYSQL来 进入用户管理中心进行更多的操作
- 使用mysqldump进行Mysql备份
- 使用MySQL内置函数将IP地址字符串转为无符号整数进行存取
- 使用mysqldump进行Mysql 备份
- 使用Lccwin32进行MySQL开发。
- [ZT]如何使用Erwin进行基于MYSQL的数据库设计
- 使用mysqli库对mysql进行操作
- VC使用mysql.h的接口头文件进行连接mysql数据库开发的完整解决方案
- 使用 Sphinx 更好地进行 MySQL 搜索-使用 Sphinx 进行非全文本搜索