加入收藏 | 设为首页 | 会员中心 | 我要投稿 湖南网 (https://www.hunanwang.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程 > 正文

大规模MySQL运维陷阱:使用MyCat踩坑篇

发布时间:2018-10-15 00:38:31 所属栏目:编程 来源:高可用架构
导读:【新品产上线啦】51CTO播客,随时随地,碎片化进修 引子 漫衍式数据库,已经进入了全面快速成长阶段,这种成长,是与时俱进的,与人的需求是分不开的,由于此刻信息期间的高速成长,导致数据量和买卖营业量越来越大。这种征象起首导致的就是存储瓶颈,由于MySQL

作为一此中间层,本职事变应该是吸取客户端的SQL哀求,然后通过语法说明,按照读写原则,然后确定一个集群中一个读写节点即可,然后就等着功效集的返回,对付功效集自己,中间层并不必要去体谅,他只必要将功效集(可能非常)原本来本发回给客户端即可。而MyCat做的工作,远比这个多,在语法说明之后,再做语义说明,拿到对应数据库表布局,同时判定这个表的分发路由法则,再找到语句中的数据及涉及到的列,再抉择路由到哪个分片中,假如在分发时路由法则设置错误,可能措施计较错误,会导致整个语句的功效呈现不行预知的题目。叨教这前半部门,是一此中间层应该做的工作么?竟然还要体谅语句中涉及到的表布局,主键,数据等信息,这着实都是数据库要做的工作啊,实则是越俎代办,再叨教,所做的这些工作,能比一个专业数据库做得更好么?咱再看后半部门,等收到功效集之后,MyCat为了处理赏罚一些功效集的聚合计较,必要把各个节点原来已经封装好的功效集(二进制MySQL协议流数据),理会出来,然后通过必要计较出来(这个计较有也许很是慢,而且不是全部的都可以搞定),计较完成之后,再打包成MySQL协议流数据,传给客户端,叨教这样的中间层,做了这么多工作,机能怎样担保?而自己这些聚合计较Order By、Group By的处理赏罚,自己是数据库的工作,实则照旧越俎代办。

通过SQL语句的调动,实现漫衍式是不是有点坚苦?

MyCat这种中间层,代表了宣称漫衍式数据库的一类行使方法,但这种实现要领现实上都是通过在SQL语句上做文章,从客户端拿到的是SQL语句,给后端数据库的也是SQL语句,但这两个SQL语句是颠末调动的,虽然这种要领也只能这样,由于后端数据库只吸取SQL语句,试问,一个伟大的SQL语句查询操纵,通过SQL调动或重写,就能实现对差异分片数据库的漫衍式查询?想想就清晰了,固然SQL语句通用机动,但可扩展性可能重写的逻辑照旧有点伟大的吧?虽然了,有人也许会说,我们有兜底的啊,大不了把这个语句就改一下库名表名然后其余保持稳固分给每一个节点去执行,这样总没题目吧,是的,你说的没错。

在统一个事宜中要修改差异节点的数据是如那里理赏罚的?

这个题目就是我们凡是所说的漫衍式事宜了,毕竟是怎么回事呢,MyCat下面临的是MySQL Server,也就是说MyCat只能用SQL语句与MySQL Server交换,这样就是范围于MySQL的SQL语句的成果了,那在漫衍式实现上面,MySQL XA自己有几多人用,MyCat假如实现一个跨节点的数据更新,不消MySQL XA,还能用其余什么?别无他选,自己依靠一个没有太多人用,而且也许存在许多题目,包罗机能,Bug的成果,这样上层MyCat以致应用措施的靠得住性怎样担保?虽然基于这些题目,有些方案选择不消XA,假如某些节点失败了,选择忽略不办理,这虽然也可以,妥协嘛————不必要底线的。

MyCat后端数据库的架构是什么,怎样担保不变靠得住高可用?

这个据某些文章宣传说,之前可以选择主从复制,此刻可以选择Galera Cluster,可能也可以选择更新的MGR,虽然不得不说,以前到后,也许确实担保了更好的靠得住性,但有一个很大的题目是,Galera的门槛较量高,碰着题目的话,很少人能办理掉(很孤高的是,去哪儿可以称得上环球为数不多的行使Galera较量多而且行使的较量好的公司),再到MGR,自己还得等,能用还要较量长的时刻,这题目照旧要回到主从复制,这是老题目了,主从复制的同等性很难担保,MyCat假如通过读写疏散计策将读打到从上面,而这个正好有耽误,这样发生的效果也许是整个应用措施的计较功效是错误的,虽然可以说有耽误搜查,那题目是,耽误搜查的话,是不是尚有一个参数可以设置呢?假如耽误高出100秒的话就去查主库?没错,不外100秒莫非就不是耽误了?那可以配置为0,看到的0,你觉得真的是0?其拭魅照旧主从复制的劣根性。以是题目照旧回到了出发点,经济基本抉择上层构筑,基本欠好,上层怎样是好?

分片多了的环境下,机能是怎样担保丧失最小的?

这个题目,我并不知道MyCat有没有做过优化,好比10个分片,假如一个语句的执行会涉及到这十个分片,那在每个分片上重写语句之后,就要别离在这十个分片上执行对应的语句了,执行时是串行,照旧并行?串行的话,机能肯定会降落10倍以上,以是做得好点的话,就是并行了,但并行的实现要领是,在MyCat这个毗连上面,建设10个线程,行止理赏罚这十个节点的执行环境,那这样的毗连多了,MyCat发生的对体系的攻击就很是大了,机能照旧不可。虽然也可以说,这里做了毗连池,没错,是可以的,但MyCat是这样做的么?这样做了机能又怎样呢?假若有一个超时,整个会见就失败了。

设置文件可能设置库出题目,整个集群会呈现什么环境?

前面已经说了,MyCat用的是schema.xml来设置的分库分表计策,这是一个设置文件,MyCat自己的高可用,假如设置多套的话,他们的同步题目,是怎样办理的?假如没有同步(可能同步出题目,可能耽误等),某一个MyCat挂了,营业切换到其余的MyCat时,此时的环境就是,妨碍……妨碍……。由于数据都乱了。有也许造成的题目是,写入了错误的位置,进而导致整个集群的数据被写坏。感受比直接被删了还严峻。同样的题目,感受MyCat也许会优化这点,大概会改为将其齐集存储在某一个数据库中,这样齐集打点的话就不必要同步了,设法是好的,但这相等于是把鸡蛋放在一个篮子内里了,假如这个设置库出题目了,营业何去何从?

DDL怎样举办?

这个题目大概是每小我私人都体谅的工作了,MyCat把数据都分而不相干的分片MySQL节点了,这样许多在单点上的改表计策都不能用了,而DDL又是一个必必要担保每个节点同时完成的工作,那在漫衍式上面是怎样担保的呢?按照我的调研,仿佛此刻行使MyCat的人,都是通过“统一时候启动在每一个节点上更新表布局”这样的要领来做的,虽然还得选择是三更,虽然我小我私人认为也是可行的,由于事实已经行使了它,而没有更好的步伐来办理这个题目。虽然咱再说效果,假如做不到无缝原子修改,那对营业的影响不是一星半点,也许会有许多SQL会报表不存在的题目。假如一个语句和另一个语句修改完成时刻相差较量多的话,两个相减的时刻就是妨碍时刻了。

据我调研,MyCat还实现了自动妨碍切换的成果,叨教这个靠谱么?

(编辑:湖南网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

热点阅读