mycat功能测试简析


本文主要给大家介绍mycat功能测试简析,希望可以给大家补充和更新些知识,如有其它问题需要了解的可以持续在开发云行业资讯里面关注我的更新文章的。前言
Mycat是业内知名mysql数据库中间件,其功能在各种mysql中间件中是比较丰富的.而mycat相关组件由java语言编写,部署方便.他的功能有:不透明代理,读写分离,负载均衡,数据分片等.而且因为其底层连接方式是开发云主机域名用java的jdbc组件来连接数据库的,所以理论上是支持sql server,oracle,pgsql的,但是功能上主要集中在mysql上.优点:部署简单,功能强大,灵活性高,弥补mysql的一些功能缺失缺点:功能开发不算十分完善,需要注意踩坑如果按原理来说,mycat如果不做分片,纯粹只是代理的话,他所做的事情,其实更多的是数据转发,而这个转发能力,当然就是看他能有多强.既然理论上转发能力很强,那么是不是就可以忽略不计呢,当然不是,所以需要用直连mysql的测试数据来做对比.
测试前准备云服务器配置为32核cpu(虚拟化后的数值,算上超线程),120G内存,16000iops的存储设备,具体分配情况:10.21.128.156:mycat1.6.5,sysbench0.410.21.128.157:mysql5.7.20主库10.21.128.158:mysql5.7.20从库110.21.128.159:mysql5.7.20从库2简单说明拓扑关系:第一步当然是安装好mysql,这里就不详细介绍怎么安装了,但是,my.cnf的参数是有些变化的,主要原因是要适应高并发压测环境,不然就被参数限制,然后程序退出.当然了,如果你想尽量模拟线上环境,那这些限制你得思考在内,更改就需要谨慎一些,我这里只是给出一例来参考.然后,更改mysql配置文件参数,其他buffer_pool什么的就不列出来了,请各自看情况设置,这里只说明涉及压测相关的参数.其他参数我就不一一列举,自己看情况来设置就行,然后,重启生效待命.
软件安装先说说压测工具的选择问题,在MySQL协议上Mycat不兼容tpcc,所以放弃tpcc。然后sysbench2.0对mycat兼容也比较欠佳,不明原因压测失败次数多,所以也只能放弃.最后选定sysbench0.4和0.5来使用,可以顺利测出结果,而且从压测的原理来说也比较客观.所以,我们需要安装的软件有:mysql(默认已装),mycat,sysbench0.4或0.5mysql怎么安装和授权什么的,这里就不细说了,还请各位自己搭建好,配置文件就上面提到的要加上一下.
安装mycat:1)搭建jdk环境由于mycat是java程序,所以需要安装JDK,版本至少要jdk1.6以上,下载java语言程序包,Java的下载地址一直在变,所以最好自己上去看着来下载http://download.oracle.com/otn-pub/java/jdk/8u151-b12/e758a0de34e24606bca991d704f6dcbf/jdk-8u151-linux-x64.tar.gz?AuthParam=1513326216_bcf60226458d67751e1d8d1bbe6689b4安装完成,可以使用.2)安装配置mycat了解java程序的同学应该知道,java程序只要配置好,直接启动就能用,所以没有安装的概念,直接将mycat配置做好就可以用.我们下载mycat1.6.5的版本,这是最新正式版http://dl.mycat.io/1.6.5/Mycat-server-1.6.5-release-20180122220033-linux.tar.gz然后就可以开始改配置文件了这里sysbench的测试没有涉及分库分表,所以mycat只需要设置server.xml和schema.xml即可,具体mycat存放路径没规定,我将他放在/usr/local了.==============================分割线开始==============================
有的人可能会疑惑,mycat支持分库分表,那么压测可不可以针对分库分表进行呢?其实理论上是可行的,有意向做分库分表压测的就要把数据做一些处理,按照sysbench原理来说是可行的,他测试的表的数量是可控的,你把带数字编号的表通过逻辑库处理可以集合成一个新的逻辑表.==================分割线结束==========================================
先看基本环境设置server.xml,大部分设置都可以不动,注意添加修改的是标签下面配置就可以了,每创建一个用户是要另外起标签:vim /usr/local/mycat/conf/server.xml设置了一些相关压测的项目参数,和创建了三个用户root,sysbench,test.这三个用户和数据库的用户没有关联,是独立的,即使这个用户密码被破解,数据库的密码依然安全.其中root有完全控制权限,sysbench只能控制sbtest库,test也只能控制sbtest库,而且限制了读写权限.然后设置逻辑库配置文件schema.xml,这里改动比较多,所以直接贴上整个文件:设置了两个逻辑库sbtest和testppp(和真实库同名,其实可以不同),指向的真实数据库的主从环境dn1和dn2,里面有一主两从三台真实服务器地址,并开启读写分离.但是要注意的是,事务只走主库,所以读写分离最优方案还是由程序做好一点,用中间件做难免就有点鸡肋了,毕竟现在很多开发框架都走事务的.3)启动mycat,加载完成就可以使用新配置了,哪怕是改了登录用户名也能热加载.
搭建sysbench下载下来后,只要有c运行库就能编译安装,但是要创建mysql库文件的软连接,不然会报错找不到库文件,在此,环境就搭建完毕了.
开始测试环境准备好了,就开始测试了,测试前要先准备测试数据,需要使用命令来制造出来,要比较长的时间(可能大半天),重点是要关注硬盘空间是否足够:参数解析:–test=tests/db/oltp.lua表示调用 tests/db/oltp.lua 脚本进行 oltp 模式测试,oltp是啥就不解析了
–oltp_tables_count=15表示会生成 15 个测试表,数量越多,自然花费时间越长
–oltp-table-size=40000000表示每个测试表填充数据量为 40000000行 ,数量越多也是越时间长
–rand-init=on表示每个测试表都是用随机数据来填充的,这样才客观
–mysql-table-engine=innodb表示表的引擎是innodb
prepare用于准备测试需要的数据,准备完后执行run来测试,测试完成后如果需要清理数据就用cleanup来清除测试数据
=====================分割线开始===================================
所以这里创造了15个表,里面每个表有4000万行的数据,数据为随机输入,这个数据量大概需要150G硬盘空间,估计可以涵盖大部分情况了吧,当然,你也可以创建更多数据.数据结构大致是这样的,仅供参考:=============分割线结束========================================
然后就可以进行正式测试了,我们先进行测试普通主从架构:参数解析:–num-threads=1024 表示发起1024个并发连接
–oltp-read-only=off表示不要进行只读测试,也就是会采用读写混合模式测试
–report-interval=10表示每10秒输出一次测试进度报告
–rand-type=uniform表示随机类型为固定模式,其他几个可选随机模式:uniform(固定),gaussian(高斯),special(特定的),pareto(帕累托)
–max-time=3600 表示最大执行时长为3600秒,测试将在这个时间后结束
–max-requests=0表示总请求数为 0,因为上面已经定义了总执行时长,所以总请求数可以设定为 0;也可以只设定总请求数,不设定最大执行时长
–percentile=99表示设定采样比例,默认是 95%,即丢弃1%的长请求,在剩余的99%里取最大值
根据上面的解析,最后输出到一个文件,毕竟需要记录下来.然后到mycat代理环境:和上面一样,设定了并发为1024个线程,测试时间为3600秒即1小时,同时也是用到刚才制造出来的15个4000万行的表,设定取值采样平均值为99%的数据,输出到另一个log文件.
阅读测试报告测试完了,就来看结果了,我们拿其中一个结果来解析说一下:
所以,每秒事务数Tps达335.29,每秒查询数Qps达6035.29,平均延时3052.99ms.看完解析,来看结果,下面是直接测主从环境的结果:每秒事务数Tps达381.03,每秒查询数Qps达6858.48,平均耗时2687.22ms,毕竟总数据量是6亿,还是应该要接受.下面是通过mycat代理的结果每秒事务数Tps达358.40,每秒查询数Qps达6451.19,平均耗时2855.80ms,同样是总数据量6亿.从结果对比计算,使用mycat后,tps,qps,和耗时都损耗了6%-7%,在我个人看来还是可以接受,因为使用了mycat做代理层,可以很方便的管理后端数据库,任何切换都可以手动来秒切,使用上触发脚本后就是一个HA框架了.

题外说明
测试结果示例说明的例子,其实是加上了高可用keepalived的测试结果,每秒事务数Tps达335.29,每秒查询数Qps达6035.29,平均延时3052.99ms,总的来说算好,也还只是比纯mysql主从损耗10%范围内,可以接受,毕竟可用性高了很多,而且后续压力增大也可以随时增加mycat数量来填补.功能多了,机器也要多了一些,需要特别说明的是,因为涉及网络数据包转发关系,keepalived和后端mycat不能在同一台服务器,所以就必须独立开来.
10.21.128.208:keepalived主10.21.128.209:keepalived备10.21.128.200:mycat110.21.128.201:mycat210.21.128.199:vip简单说明拓扑关系:
需要多搭建一个mycat,不过这里就不细说了,直接复制一份配置到其他机器再启动就ok了.
然后搭建一套keepalived集群:大多数情况下,大伙使用keepalived只做HA功能,而LVS功能则交给其他软件实现.但是实际上keepalived+ipvsadm既能实现HA功能,也能实现LVS功能,非常方便.我们在10.21.128.20810.21.128.209上安装keepalived和修改配置.个人不想纠结功能和版本问题,而这些也是比较常态功能性的软件,绝大部分yum源都配备,所以直接用yum安装就很方便,有额外兴趣的可以慢慢编译安装很快,我们直接看配置,yum安装默认的配置文件在/etc/keepalived/特别说明一下负载均衡调度算法参数lb_algo,因为不同的算法有不同的效果,想要架构稳定,就要找到最适合自己的算法.rr:轮循调度(Round Robin)算法,不管服务器上实际的连接数和系统负载,把连接轮流的发放到每一个real_server上.优点是必然每个real_server都有操作,缺点是长短连接容易分配不均衡.wrr:加权轮循调度(Weighted Round Robin)算法,大体和rr一样,但是规则上多了一个权重判断,通过参数weight判断那个real_server分发多一些任务,优缺点和rr也一致.lc:最小连接调度算法,把新的连接请求分配到当前连接数最小的real_server上.优点是能相对平均分配连接请求,缺点是可能出现局部大量短连接打到一个节点上的情况.wlc:加权最小连接调度算法,大体和lc一致,优缺点也一致,规则上多了一个权重判断,通过参数weight判断那个real_server分发多一些任务.lblc:基于局部性的最少链接调度算法,在负载基本相对平衡情况下,将相同目标IP地址的请求调度到同一台服务器.优点是能提高缓存命中率,缺点是意义不大,因为不平衡就是失效.lblcr:带复制的基于局部性最少链接,它与LBLC算法基本相同,但是算法更复杂,以达到缓存可用性更高,缺点是对于热数据意义不大,一般很少用这种算法.dh:目标地址散列调度,通过静态映射算法,散列(Hash)函数将一个目标IP地址映射到real_server上,优点是一个IP地址会长期固定连接一台服务器,缺点是容易使请求不平衡.注意1:LVS+DR模式中,只支持IP的转发,不支持端口转发,也就是说在keepalived.conf的virtual_server和real_server的配置节点中端口必须一样。注意2:配置负载均衡模式强烈建议VIP和后端真实服务器IP同网段,不然会出现一些奇葩情况,得不偿失.
里面涉及一个检测心跳的脚本,如下所示:意思很简单,就是通过nc命令检测真实服务器的mycat的端口通不通,如果不通的话,keepalived就把这个mycat剔除出集群.

然后,在后端真实服务器上需要做一个操作,绑定vip创建ipvs规则:10.21.128.200,10.21.128.201,10.21.128.156上创建并执行下面的脚本,需要注意,每次服务器重启都必须启动这个绑定,不然lvs就不生效了,例如把他放到/etc/rc.d/rc.local
万事俱备,只欠东风,那就启动keepalived吧.10.21.128.20810.21.128.209上执行注意:如果是检测不正常的IP和端口,在ipvsadm -L命令下是看不到IP地址的,因为被keepalived主动下线了,这个时候你要检查相关IP和端口为什么检测不通过的原因.如果要看连接进来的IP地址和状态,可以用下面的命令.看state的值可以知道这个连接的状态.
一切都正常,那么,我们可以压测了.我们来看看lvs状态
为什么会没有out?是不是很奇怪?因为我们负载均衡类型选择的是DR模式,这个模式的特点就是当客户端和真实服务器建立链接后,真实服务器会直接把数据发送给客户端,不再需要keepalived来中转,所以就没有out的流量了,也就是为什么说效率就更高的原因了.
然后来看看压测的结果如何?
每秒事务数Tps达338.00,每秒查询数Qps达6084.05,平均延时3028.93ms,和一开始相差无几,基本符合现实.看了以上关于mycat功能测试简析,希望能给大家在实际运用中带来一定的帮助。本文由于篇幅有限,难免会有不足和需要补充的地方,如有需要更加专业的解答,可在官网联系我们的24小时售前售后,随时帮您解答问题的。





相关推荐: LAMP架构介绍、MYSQL介绍、安装

LAMP 指的Linux(操作系统)、Apache(httpd服务器)、MySQL(数据库软件)和PHP(有时也是指Per或Python)的缩写,一般用来建立web服务器(三个角色可以在一台机器,也可以分开。但是,Apache和PHP要安装在一起)。说明: A…

免责声明:本站发布的图片视频文字,以转载和分享为主,文章观点不代表本站立场,本站不承担相关法律责任;如果涉及侵权请联系邮箱:360163164@qq.com举报,并提供相关证据,经查实将立刻删除涉嫌侵权内容。

(0)
打赏 微信扫一扫 微信扫一扫
上一篇 06/07 17:11
下一篇 06/07 17:11

相关推荐