欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

MyCat + MySQL 主从部署流程(下)

程序员文章站 2022-06-19 08:38:39
上周研究了一下数据库中间件 MyCat ,并验证了 “MyCat 单机 + MySQL 主从复制” 的部署方案,本文接上篇,继续介绍这一方案的部署过程。...

背景

上周研究了一下数据库中间件 MyCat ,并验证了 “MyCat 单机 + MySQL 主从复制” 的部署方案,本文接上篇,继续介绍这一方案的部署过程。

MyCat 的原理

MyCat 是一种分布式数据库中间件,跟其他分布式系统的核心思想一样,数据分散存储在不同主机上。核心概念有四个:

  1. 逻辑库:与 MySQL 的物理库作用一样,客户端连接 MyCat 后访问的数据库;
  2. 逻辑表:与 MySQL 的物理表作用一样,客户端连接 MyCat 后访问的表;
  3. 分片节点:DataNode,逻辑表所在的宿主,一个逻辑表可以指定 1-N 个分片节点,一个分片节点关联某个 DataHost 的某个具体的物理库
  4. 节点主机:DataHost,分片节点数据所在的主机,可以配置主从分离。

MyCat 的核心原理是 “拦截器”,对 SQL 预处理和对SQL结果后处理。客户端发来一个 SQL 请求,会被 MyCat 拦截,然后做一些列的特定分析,如分片分析、路由分析、读写分离分析、缓存分析,然后将 SQL 发往后端真实的数据库;并将返回结果做适当的处理,返回给客户端。

整个过程对客户端来说是无感的,由中间件去处理读写分离,客户端代码编写时,无需定义多数据源,视为普通的 MySQL 的操作就好。

引用一个来自《分布式数据库架构及企业实践——基于Mycat中间件》的例子来说明一下各个概念的协作过程,大型电商网站中,订单表数据按所在省份进行切分,使用 MyCat 后的数据切分方案为:
MyCat + MySQL 主从部署流程(下)
该图中,orders 表被分为三个分片节点 dn1、dn2、dn3 ,它们分布在两台 MySQL 服务器上,可以按数据库服务器的资源量来设计分片方案,用 1~N 台服务器分片,分片规则选择枚举,它的定义通过 “分片字段+分片函数” 来指定,分片字段是 prov ,分片函数是枚举字符串。

最终,MyCat 部署的重点工作落在了确定分片方案、编写配置文件上面。

MyCat + MySQL 主从的四种部署方案

笔者总结了 MyCat + MySQL 主从部署的四种常见方案:

  1. 读写分离:不分片,dataNode 指向一个 DataNode,DataNode 指向主从集群;
  2. 单独分片:不用读写分离,DataHost 不指定 ReadHost;
  3. 分片+单MySQL主从:DataNode 指向同一个 DataHost 代表的主从集群;
  4. 分片+多MySQL主从:DataNode 指向不同 DataHost 代表的主从集群。

MyCat 的配置有两种方式,zookeeper 和本地 XML 。本文以本地配置为例,配置文件位于 /mycat/conf 目录,主要配置文件有:

  1. schema.xml:逻辑库和表以及对应的数据分片、分片主机的映射关系;
  2. server.xml:MyCat 登录用户认证和授权信息;
  3. rule.xml:逻辑表的分片规则;

根据产品需要,确定部署方案,编写 schema.xml。由于资源有限,笔者选择了第三种方案,MySQL 一主一从+分片,schema.xml 中有大量注释掉的示例配置,我们改成跟自己环境一致的配置就好了。

MyCat + MySQL 主从部署流程(下)

准备工作

第一步,准备好 部署介质和脚本
第二步,根据 MyCat 的分片方案和服务器信息编写好 scehma.xml ;
第三步,定义 MyCat 服务访问权限文件 server.xml ,用默认配置就好;
第四步,在要部署 MyCat 的机器上,添加 MySQL 主从服务器 IP 的 host 名称,与 schema.xml 中 DataHost 引用的 host 名称一致:

vi /etc/hosts
hostM1 192.168.8.116
hostS1 192.168.8.117

部署流程

cd /home/mycat,按如下顺序执行脚本:

  1. MyCat 所在的主机上,需要安装 JDK: sh jdk_install.sh
  2. 安装 MySQL 主节点: sh master_install.sh 1
  3. 为主节点创建复制帐号并授权复制权限: sh master_grant.sh HostM1Pwd
  4. 安装 MySQL 从节点: sh slave_install.sh 302
  5. 为从节点设置 Master 信息:sh slave_grant.sh 192.168.8.116 mysql-bin.000002 1123 HostS1Pwd
  6. 安装 MyCat:sh mycat_install.sh
  7. 将准备好的 MyCat 配置文件上传到 /usr/local/Mycat/conf 覆盖默认配置;
  8. 执行 start mycat 命令启动 MyCat。

这些操作,需要在不同的服务器上执行。

启示录

部署过程中如果有问题,可以参考此文。

部署工作应该是归属于运维职业的吧,这些年笔者也没少做,感觉用常规 20% 的技能+搜索引擎,就够应付了。

最考验人的,是耐心呐,拔出萝卜牵出泥,有一个问题,解决一个问题,幸运的是,问题到最后都被解决掉了。

最近发文都是早上 6 点开始写,快 8 点完成发布,虽然没有任何收益,但是网络笔记还是要记的呀,万一以后会用到呢?也说不定谁会因为我爱记网络笔记,被我清晰的脑回路、还算蛮流畅的文笔折服而看上我呢!

资源附录

  1. MyCat官网
  2. 简单 demo: 分片存储大表数据的一种方案
  3. 读写分离配置
  4. 同时分片和读写分离

本文地址:https://blog.csdn.net/wojiushiwo945you/article/details/108212519