性能工具之ngrinder区域配置小谈

  • 2019 年 12 月 24 日
  • 笔记

背景

在日常的压测过程中,不同服务可能部署在不同的机房,为了避免网络因素,通常会在同网络环境下部署相应的压力机。理解原理才能做到《千山同一月,万户尽皆春。千江有水千江月,万里无云万里天》

架构图

决策分析图一

知识复习:

第一层是业务指标,

  • 响应时间
  • TPS
  • 错误率

第二层是操作系统

  • CPU
  • IO
  • MEM
  • NET

分析

因为现在用的ngrinder系统,集成的是所有机房的Agent,所以当对服务器集群进行压测时,ngrinder系统的Controller会随机从集群中选取压力机,这样就有可能会出现压测其他机房的服务使用的是另一个服务群压力机,因为两个机房的带宽并不足以支撑压测,可能会导致压测结果失真。

为了解决以上的问题,引入ngrinder系统区域的概念,即压测XX服务集群,只会用本身机房的5台压力机,压测其他服务集群,只会使用本身的5台压力机,实现结果如下:

通过在场景中简单的配置解决以上问题。

第一步 重命名war包并启动control服务

将ngrinder的war包上传到服务器(/usr/local),为了方便访问我们这里将war包重命名

启动control服务: java -XX:MaxPermSize=200m-jar ROOT.war

出现2018-11-30 12:01:56.326:INFO:oejs.Server:main: Started @18683ms即表示服务启动成功,ps:这里启动服务是为了解压,如果不启动则不会有下一步的h2-1.3.168.jar包生成。

第二步 修改数据库模式

因为之前ngrinder使用了中间件tomcat启动,tomcat启动的数据库模式是使用的内嵌模式,而配置region需要使用Server模式,所以我们需要把内嵌模式改成Server模式。

1、将数据库jar包复制一份至/usr/local下

cp -R /root/.ngrinder/tmp/webapp/WEB-INF/lib/h2-1.3.168.jar  /usr/local/

2、在usr/local下启动数据库,这里为了便于复用,我们将启动数据库的命令放到一个shell文件里

vim h2start.sh  nohup java -cp "h2-1.3.168.jar:$H2DRIVERS:$CLASSPATH" org.h2.tools.Server -tcpAllowOthers -webAllowOthers -baseDir /root/.ngrinder -webPort 9092 -tcpPort 9083 "$@" &  chmod 777 h2start.sh           //赋予权限  ./h2start.sh                   //启动数据库  

在nohup.out里出现如下信息表示数据库启动成功

ps: tcpAllowOthers表示允许其他成员连接

webPort:数据库web页面的端口号,可通过ip+端口号访问数据库的web页面

tcpPort:数据库连接端口号

第三步 重新启动control

1、切换到urs/local下,先加载环境变量再启动应用服务

加载环境变量:

sudo su

source /etc/profile

启动服务,这里为了便于复用,同样也是放到一个shell文件里

vim lugu8080.sh  nohup java -jar -XX:MaxPermSize=500m -jar ROOT.war -p 8080  -cm easy -clp 10010 -r lugu -cp 9001 -dh XX.XX.XX.XXX -dp 9083 &  chmod 777 lugu8080.sh        //赋权限  ./lugu8080.sh  

再启动阿里云的区域,同上

vim aliyun8081.sh    nohup java -jar -XX:MaxPermSize=500m -jar ROOT.war -p 8081  -cm easy -clp 10011 -r aliyun -cp 9002 -dh XX.XX.XX.XXX -dp 9083 &  chmod 777 aliyun8081.sh     //赋权  ./aliyun8081.sh             //启动应用程序  -p:web访问端口号,不同的region对应不同的端口号  -cm:control模式,这里配置的是简易集群模式  -r:区域名称  -dh:连接数据库的地址  -dp:连接数据库的端口号,这里的端口号与上一步数据库的tcpPort保持一致  -cp:控制端口,这个后续Agent配置里会用到该端口  

2、登录后新建场景即可看到区域选项

至此region区域配置完成

第四步 数据迁移部分(如果不需要数据迁移可跳过此部分)

由于之前一直使用的是内嵌数据库,应用程序会将数据存储在/root/.ngrinder/db/ h2.h2.db数据库中,而使用Server模式则会存放在/root/.ngrinder/db/ngrinder.h2.db目录下,所以需要保存之前的压测数据。

1.将现在使用的数据库备份:

cd /root/.ngrinder/db    mv ngrinder.h2.db ngrinder.h2.db.bak  

2.将h2.h2.db重命名为ngrinder.h2.db

mv  h2.h2.db ngrinder.h2.db

3.重新启动服务

验证:

1.在内嵌模式下添加一个脚本和场景

2.切换至Server模式,查看场景和脚本是否存在

从上图可知,场景和脚本中的数据均未丢失,数据保持完整性。

其他 Agent配置:

Agent的默认存放位置为/usr/local

sudo su //切换超级用户

source /etc/profile //加载环境变量

/usr/local/ngrinder-agent //进入到该目录下

vim __agent.conf //编辑Agent的配置文件

修改agent.controller_port与agent.region和第三步启动应用时设置的端口号、区域一致

修改后如下:

./run_agent_bg.sh -o //启动Agent并加载配置文件

使用admin用户登录,在代理管理下看到该Agent表示启动成功

至此lugu区域Agent配置完成。

阿里云配置与其他类似,保证端口号配置一致即可

长江后浪推前浪,世上新人赶旧人,

江山代有人才出,下一句是各领风骚数百年。