关于mysql集群中间件,以前写在应用程序里面,由开发人员实现,在配置文件里面写多个数据源,写库一个数据源,读库一个数据源,笨拙不高效,由于程序员的差异化,效果并不是特别理想。
后来,组织了开发人员写了一个自动识别读写的功能模块接口,让开发人员调用,这样能满足特定场景的业务需求,但是适应性比较窄。
后来出了cobar,但是在高并发这里出壳了,后来在一次无意中的演讲中,见到leader在介绍了mycat,于是眼前一亮,就是它了,不早不晚,在我特别需要的时候,就进入了我的生活。
记得leader说过,看百集非诚勿扰记千句乐嘉恋爱宝典,不如妹子约起……
万事开头难,兴趣攻其艰—>由于喜欢所以自然而然开始学习mycat,途中也认识了很多mycat的同道门,众所周知,对于我们这些非科班出生的,而且对理论研究不是那么深入的,实践永远是最好的最有效率的学习途径。
于是有了第一次,还蛮简单快捷方便的,从下载到安装然后试用,大概不到30分钟吧,如笔记所记录:
mycat - 解开它神秘的面纱--:http://blog.csdn.net/mchdba/article/details/51155340 |
之后马上做了第一个练习,mycat路由转发原理深度解析,对于此的理解是,mycat接到应用端过来的sql,它会去根据sql中 from后面的表名字,去配置schema.xml里面读取其中的所有datanode资源,然后一个个去路由去尝试请求,详情见我的blog整理:
Mycat路由转发原理深度解析:http://blog.csdn.net/mchdba/article/details/50616527 |
疑惑:如果做过数据库的缓存或者对mysql的limit有印象的话,应该记得有这样的场景,当limit 找到记录后,就exit不会继续遍历下面未遍历的数据记录了。不知道mycat是否可以做到这一点?貌似看debug日志是遍历了所有的datenode节点了。
PS:做这2个我还是得心应手,因为有linux基础,有mysql基础,所以算是比较顺利,好的开头是成功的一半,更加坚信自己的信心和选择了。
接下来开始接触mycat比较show time的部分了,读写分离和主从切换,对于这2个场景,我接触的时间蛮久了,但是实现的方式方法多种多样,以前读写分离用原始的刀耕火种,开发人员在ibatis/mybatis里面写死了写库连接和读库连接,之后keepalived+lvs,再之后用了f5的vip负载均衡配置,f5性能固然比较好,但是费用费用也不少的,所以对于互联网已经中小型公司来说,这笔支出可不实惠啊。
而mycat通过配置readHost和writeHost来实现读写分离,里面有一些配置,比如:
balance为1:让全部的readHost及备用的writeHost参与select的负载均衡。
switchType为2:基于MySQL主从同步的状态决定是否切换。
heartbeat:主从切换的心跳语句必须为show slave status
在这里遇到配置的时候,遇到一些问题,在请教了victor大神之后,他给了我他的实现思路和方法,我参考之后,顺利解决了,把自己这部分的学习整理成了笔记,如下:
mycat读写分离与主从切换:http://blog.csdn.net/mchdba/article/details/50616534 |
PS:想要victor大神的联系方式吗,在下面留言评论区,留下你的email地址并标注victor,我发你email告诉你的。
blog源地址:http://blog.csdn.net/mchdba/article/details/51162243,谢绝转载。
对于mycat来说,打开debug这个帕朵拉魔盒,一切一切真相都暴露在大众面前,在这里你可以看到select的整个舞蹈轨迹,也可以看到所有的字符集的变换,千人千面万般操作尽在mycat.log。所以学会分析mycat.log日志,所有的问题都不再是问题,对于此我深有体会,如下的整理:
Mycat黑匣子:http://blog.csdn.net/mchdba/article/details/51160495 |
分析了mycat的黑匣子后,对于mycat背后的逻辑以及有了一定的深刻理解了,现在要进阶了,做更加难的事情了,这是分布式集群的重大特征,在业务量爆炸式增长的场景中,就需要提前考虑根据业务进行分片,在分片的学习中,也得到了victer大神和山狼的的指点,遗憾的是后来山狼因为工作忙碌,交流的越来越少了,而victor大神一直经常交流中,对于分片的尝试,整理在下面:
Mycat高可用分片er分片的2种场景:http://blog.csdn.net/mchdba/article/details/50655304 Mycat连续分片-自定义数字分片:http://blog.csdn.net/mchdba/article/details/50656337 Mycat连续分片-按日期分片:http://blog.csdn.net/mchdba/article/details/50656478 Mycat离散分片-枚举:http://blog.csdn.net/mchdba/article/details/50656478 Mycat离散分片-程序指定的分区分片:http://blog.csdn.net/mchdba/article/details/50656500 |
在分片的场景中,还有一种业务类型,就是一个分片故障了,如何迁移到新的分片,这个思路实现如下:
Mycat分片中快速迁移思路:http://blog.csdn.net/mchdba/article/details/50939614 Mycat分片中平滑迁移实施过程:http://blog.csdn.net/mchdba/article/details/50991649 |
Mycat有诸多优点,但是也有它不足的地方,比如分页、跨事务、存储过程、对db2、mongodb的支持等等,这些都需要了解熟悉,以免在使用的时候给别人挖坑,对这些方面,我们需要了解到实现的细节,然后再用案例去验证,分析问题症结所在,如果有java代码coding能力,甚至可以修改完善这些不足,对此有整理如下:
Mycat分页慢解惑、跨事务解析、注解调用存储过程:http://blog.csdn.net/mchdba/article/details/50719120 |
在互联网分布式应用中,最重要的就是高可用了,高可用能保证应用的持续可用性,这样能7*24,而mycat也有类似的集群架构,这是了解mycat深入mycat必须的历程:
Mycat集群实现:http://blog.csdn.net/mchdba/article/details/50867885 |
为了mycat应用部署的健壮持续,我们需要多mycat进行全方位的监控,有了这些监控数据,我们可以了解到mycat运行的信息,对于优化mycat非常有用,关于这个我有整理如下:
Mycat性能采集:http://blog.csdn.net/mchdba/article/details/50727099 |
了解到这里,我们就知道,在部署分布式集群架构之前,肯定需要进行各种压力测试,来了解mycat的阀值以及它能达到的性能极限,能支撑多少高并发、tps、qps等等,那么这里就有一个自带的工具可以达到我们的效果:
监控mycat压力测试的性能曲线:http://blog.csdn.net/mchdba/article/details/51050008 |
PS:其实走到这里,行程都是蛮轻松的,不太劳累,有点小小得意了,只是常言道人无远虑必有近忧,接下来就碰到问题了。
第一道坎,连接不上oracle数据源:
在加载oracle数据源的时候,需要把oracle的jar包放到mycat安装目录下,一般是用这个ojdbc14.jar,放到/usr/mysql/mycat/lib目录下面,然后重新加载下mycat生效。
第二道坎,中文乱码:
在熟悉这个里面,我遇到坎了,是最富盛名的中文乱码问题,oracle里面字符集是gbk,mysql里面是utf8,而mycat也是utf8,对于这种差异,如何操作,我搜索了很久,没有找到合适的方案,忙到半夜11点时候,咨询leader的时候,遇到了leader的一句神回复“设置成utg”,然后我设置在了mycat的配置文件server.xml里面:
[root@oracle_standby ~]# vim /usr/local/mycat/conf/server.xml
utg …… |
结果我继续调试了,发现还是乱码,然后觉得leader指点的应该没有错,可能是别的问题导致的,继续调试重组mycat各种情况调试,1个半小时过去后,还是乱码,然后引发了牛人静哥出来了,她说是字符集设置问题,而且我的设置utg是不对的。然后我顿然醒悟,终于意识到leader的神回复utg是错误的,经验总结不能100%相信权威啊,因为万一不小心会被他带进坑里,结果我不得已回头重新整理思路,而那时已经1:00了,窗外夜沉如水,我去冲了个凉水澡,回来继续研究。
泠静下来后,整理思路,再奋战了1个小时后,搞定了,思路整理如下:
Mycat对于数据库而言就是客户端,一般来讲客户端字符编码与数据库服务端一致就不会有什么问题,或者是严格超集,保证插入到数据库不因转码而丢失。客户端、系统终端、数据库三者字符庥得协调,否则不一致的话,会有字符集转换的问题,有时候,显示正确的,但不一定在数据库就保存正确,或者保存到数据库的数据编码正确,没准显示为乱码。这就意味着,在oracle里面是gbk或者latin1啥都没有关系,只要做好以下3点:
(1),在迁移到mysql里面,在mycat平台上从oracle导出时候字符集设置为utf8
(2),在mycat平台上导入到mysql字符集也要设置为utf8
(3), 然后在mycat平台上查看数据也要设置字符集为utf8
做好了以上3点,三而合一,这样就能正常显示中文了。
Mycat平台上实现oracle迁移到mysql:http://blog.csdn.net/mchdba/article/details/50995059 |
第二天闹钟换我起床,睡眼朦胧,镜中熊猫眼,^_^。
看到她的名字“静哥”,我不由得自主想起了一首流传甚久的歌曲“我不是黄蓉我不懂武功我只要静哥哥完美的爱情……”,这首歌曲是不是很平民化很雨很有喜感啊,反正我觉得蛮接地气的哈,歌曲地址是:http://bd.kuwo.cn/yinyue/90334?from=baidu,因为作为金庸迷,对这个太敏感了,所以对她印象很深刻,而且她mycat技术很好口才也好,活脱脱一个现代版小黄蓉啊,而且据leader发的照片来看,确实是标准的江南美女,而且难得的是她刚工作不久还是单身。
SO说道在这里,大家都懂了吧,有想认识她学习mycat技术或者准备拓展mycat业务的,在文后评论区留下你的email地址并标注静哥,我会给你发email的告诉联系方式的。
到此位置,mycat的重要功能点基本完成了,然后就是师傅临进门修行在个人了,哦对了,还有Mycat最后一个重要点,mycat-eye,这个是蛮有用的,not only formyat,当然目前还是一个半成品,梦想是成为mysql伴侣,只要用了mysql,就离不开mycat-eye,当然梦想是美好,现实是需要我们大家一起去实践去完善它,尽管如此,mycat-eye还是有它独特的闪光点:
Mycat瑞士军刀:http://blog.csdn.net/mchdba/article/details/51059547 |
最后,介绍下,mycat的带路人,leader-us,看名字,就知道他是mycat的发起人,架构实力很深厚,口才也很好,目前给我感觉是技术领域中营销实力最强的、映像领域中技术实力最强的。他能看到mycat的市场并且开始运作成立mycat高端服务公司,是很有魄力的。
所以他有成为类似马云那样的企业家的潜质的,他的梦想是成立亲亲山庄,做高端技术服务和支持,成立咨询公司,并且做到中国的apache,成为国内开源界的No1,当然了个人实力有限,所以需要大家一起努力,目前开启众筹活动,起步是一人5W,大概预计征集70几个人,启动资金有300W到400W左右,他就可以全职参与并运营亲亲山庄了。
亲亲山庄的选址是广州到珠海之间的海岛上,风景宜人,适合居住生活。
新成立的公司里面,有个左兄,很传奇,大一在大学入伍,然后复员专业,来上海学IT,年纪轻轻,睡在地铁站,苦心专研数据库、系统、中间件,现在已经成为了业界大牛,上海地区mycat标杆人物,和他接触过,胆大心细脸皮厚,而且对朋友和身边人仗义,深深懂得利益均沾的道理并且也言行一致,觉得他有任年轻时候的影子,未来成就无限。
然后就是leader-us,他有马云的口才,还有王坚的技术功底,可以说能说服很多人,而且这次众筹选择的对象也很准确,选择的是在北上广深一线城市税后1.5W的从业人员和南京武汉重庆福州二线城市税后1W的从业人群,对市场目标定位准确,所以leader-us成功的概率非常大,这也是我和左兄还有很多朋友决定加入这个创业团队的主要原因吧。