当前位置: 首页 > news >正文

MyCAT让人诟病的配置文件,说说破局的思路

这是学习笔记的第 2135 篇文章


640?wx_fmt=gif

 

 最近在做MySQL分布式环境的统筹管理,目前碰到的痛点是对于集群的配置管理目前是松散的,几套环境还能忍受,如果环境多了之后还是很容易凌乱,所以我们需要一套机制来保证。

  在中间件层面,Mycat的配置管理是很让人诟病的。第一层就是文件配置管理方面,我想这应该是受到诟病最多的地方了。比如增加一个周期表,按照日期来做拆分,那么每隔一段时间就需要特意维护一次,一来是扩展新表,而来是清理数据,这个过程中会操作schema.xml文件,在里面新增一些行,删除一些行,这个工作看起来繁琐而且重复度极高。

 就是这样的任务配置,在最近的一些操作中竟然碰到了钉子,在此推荐的第一要则就是修改配置文件前请先备份schema.xml文件,大体来说schema.xml的配置是重中之重,但是很容易出现一些意料之外的问题:

第一种情况是出现异常导致,schema.xml文件被刷掉;

第二种情况是在schema.xml文件里面使用vim编辑,如果出现格式问题,重新加载配置文件是失败的,但是不会提示你哪一行出现了问题。 

第三种情况比较诡异,即没有任何明显的配置问题,就是新增了几行,删除了几行,但是就是提示加载配置文件失败

第四种情况是逻辑问题,比如我们按照日期来进行分表,那么会产生test_20191016,test_20191017这样的表,但是每个月不是都有31天,所以我们配置的时候还是可能配置错误,比如10月份漏了第31天,导致业务写入不了数据就比较尴尬了。

  对于MyCAT的这个问题,有两类解决的思路:

第一类是从上往下,也算是MyCAT创建表的一个小技巧,在较新的版本中是支持create table的。我们可以在schema.xml文件中配置记录,然后在中间件中使用create table来创建表。

这一层的难点是处理好schema.xml文件的问题。

大体来说有如下的一些流程需要注意: 

创建表流程

1.备份已有的schema.xml配置文件

2.根据逻辑生成新增的对象配置

3.刷新配置文件

4.执行SQL脚本创建表

5.同步配置文件至其他中间件服务

6.检查稽核表是否连续

7.检查表是否在安全期以内

周期表删除

1.备份已有的schema.xml配置文件

2.执行SQL脚本删除表

3.根据逻辑删除对象配置

4.刷新配置文件

5.同步配置文件至其他中间件服务

6.检查稽核表是否连续

7.检查表是否在安全期以内

可以看到流程中有很多的共通之处,如果细化处理好每一个步骤,是可以很快构建出这个流程的。

第二类解决思路是从下往上,即通过底层的配置开始逐步完善,然后上推到配置中,这是一种更加通用的方式,如果配置出现一些问题,我们依然可以通过底层的逻辑关系很快构建出来。

  我们可以设想几个场景,比如我们要新增一个表,那么在配置层面生效之外,还需要在数据库层面生效,至于分片的规则策略,数据节点的配置管理应该是一体化的工作,比如新建表应该是关联主从复制环境的主库来执行。

比如对一张表做变更,则不会涉及配置层面的变动,需要映射相关的数据节点即可。

比如需要对分布式环境的数据做数据流转和归档,则映射到数据节点应该是从库端去抽取数据。

比如开放集群的元数据给业务方,则对所有的业务场景都需要做到信息融合,比如开通权限,要对中间件节点开通权限即可,如果要创建账号,则需要映射到相关的数据节点上面。

所以对于这个分布式管理模式,操作层面我倒不是很担心,主要是担心这个模型层面该怎么玩。从目前我梳理的信息来看,主要包含如下的几个维度:

元数据信息涉及:集群,路由,实例,数据库,表,如下图所示:

640?wx_fmt=png

我们分为创建表,变更表,元数据访问入口,数据流转和归档四个场景来进行模型的说明。

首先是创建表,是目前的模型设计中最为复杂的。对于元数据的整理和梳理,可以参考如下的映射关系。

640?wx_fmt=png

最后的部分是对于配置生效,我们可以刷新中间件的配置信息生效。而纵观整个方案,其实是分成了三个较大的维度。

640?wx_fmt=png

对于变更表来说,操作复杂度会低很多,主要涉及中间件配置和实例层的配置变动。

640?wx_fmt=png

对于元数据提取的需求,则对中间件配置层的信息是弱化的,主要对接的是集群层面的信息。

640?wx_fmt=png

有的同学可能会有疑问:为什么中间件层和集群层的配置都会各搞一套,其中一个原因是他们的角色和定位不同,而本质上集群层面的信息是更加通用的。

对于数据流转和归档,则主要是中间件配置和实例,表层面的信息对接,映射到从库,从从库中提取数据。

640?wx_fmt=png

整个模型的设计需要很多细化的工作和API模式管理。

相关链接:

个人新书 《MySQL DBA工作笔记》

个人公众号:jianrong-notes

QQ群号:763628645

QQ群二维码如下,个人微信号:jeanron100, 添加请注明:姓名+地区+职位,否则不予通过

640?wx_fmt=png640?wx_fmt=png

在看,让更多人看到

相关文章:

  • DBA菜鸟的进化简史:不忘初心,记工作中踩过的三个坑
  • 对构建个人知识体系的一些建议
  • 关于大数据运维能力的一些思考
  • 一道经典的MySQL面试题,答案出现三次反转
  • 关于公众号文章搜索,有两个小技巧
  • 程序员:站在“自学”鄙视链顶端的王者
  • 如何使用Python模拟MySQL Slave,可以看看这个开源项目
  • 用好搜索神器Everything,盘活你的文件
  • 【程序员软实力】如何构建?我坚持了2100多天,收获了这些心得
  • MySQL数据流转集成,从快速测试Maxwell开始
  • 从故障处理流程看结构化思维
  • dbaplus-爱可生社区-北京站沙龙归来
  • 唯一ID生成算法剖析,看看这篇就够了
  • 关于学习,很有必要看看这张图
  • 迁移到MySQL的业务架构演进实战
  • CentOS从零开始部署Nodejs项目
  • conda常用的命令
  • js继承的实现方法
  • js数组之filter
  • Linux Process Manage
  • Python学习笔记 字符串拼接
  • rc-form之最单纯情况
  • Travix是如何部署应用程序到Kubernetes上的
  • 初识 beanstalkd
  • 高程读书笔记 第六章 面向对象程序设计
  • 关于springcloud Gateway中的限流
  • 技术:超级实用的电脑小技巧
  • zabbix3.2监控linux磁盘IO
  • 基于django的视频点播网站开发-step3-注册登录功能 ...
  • 如何在 Intellij IDEA 更高效地将应用部署到容器服务 Kubernetes ...
  • ​ssh免密码登录设置及问题总结
  • ​一些不规范的GTID使用场景
  • #pragma pack(1)
  • #调用传感器数据_Flink使用函数之监控传感器温度上升提醒
  • (2/2) 为了理解 UWP 的启动流程,我从零开始创建了一个 UWP 程序
  • (C++)栈的链式存储结构(出栈、入栈、判空、遍历、销毁)(数据结构与算法)
  • (翻译)Entity Framework技巧系列之七 - Tip 26 – 28
  • (附源码)apringboot计算机专业大学生就业指南 毕业设计061355
  • (附源码)基于SSM多源异构数据关联技术构建智能校园-计算机毕设 64366
  • (原创)Stanford Machine Learning (by Andrew NG) --- (week 9) Anomaly DetectionRecommender Systems...
  • (转)原始图像数据和PDF中的图像数据
  • (转载)深入super,看Python如何解决钻石继承难题
  • *** 2003
  • ***测试-HTTP方法
  • ... fatal error LINK1120:1个无法解析的外部命令 的解决办法
  • .NET CF命令行调试器MDbg入门(二) 设备模拟器
  • .Net mvc总结
  • .net获取当前url各种属性(文件名、参数、域名 等)的方法
  • .net连接MySQL的方法
  • /使用匿名内部类来复写Handler当中的handlerMessage()方法
  • @Validated和@Valid校验参数区别
  • [ 数据结构 - C++] AVL树原理及实现
  • [2008][note]腔内级联拉曼发射的,二极管泵浦多频调Q laser——
  • [BZOJ4566][HAOI2016]找相同字符(SAM)
  • [C#][opencvsharp]opencvsharp sift和surf特征点匹配