一、前言
在日常的压测过程中,不同服务可能部署在不同的机房,为了避免网络因素影响,通常会在不同网络环境下部署相应的压力机。
二、部署架构图
三、问题分析
因为 nGrinder 集成的是所有机房的 Agent,所以当对服务器集群进行压测时,nGrinder 的 Controller 会随机从集群中选取压力机,这样就有可能会出现压测其他机房的服务使用的是另一个服务群压力机,因为两个机房的带宽并不足以支撑压测,可能会导致压测结果失真。
为了解决以上的问题,引入 nGrinder 区域的概念,即压测 XX 服务集群,只会用本身机房的压力机,压测其他服务集群,只会使用本身的压力机,实现结果如下:
四、区域配置
1、重命名 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
包生成。
2、修改数据库模式
因为之前 nGrinder 使用了中间件 tomcat 启动,tomcat 启动的数据库模式是使用的内嵌模式,而配置 region 需要使用 Server 模式,所以我们需要把内嵌模式改成 Server 模式。
- 将数据库jar包复制一份至 /usr/local 下
cp -R /root/.ngrinder/tmp/webapp/WEB-INF/lib/h2-1.3.168.jar /usr/local/
- 在 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
里出现如下信息表示数据库启动成功
- TcpAllowOthers 表示允许其他成员连接
- WebPort:数据库 web页 面的端口号,可通过 ip + 端口号访问数据库的 web 页面
- TcpPort:数据库连接端口号
3、重新启动 control
- 切换到 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 配置里会用到该端口
- 登录后新建场景即可看到区域选项
至此 region 区域配置完成
4、数据迁移部分(如果不需要数据迁移可跳过此部分)
由于之前一直使用的是内嵌数据库,应用程序会将数据存储在 /root/.ngrinder/db/ h2.h2.db
数据库中,而使用 Server 模式则会存放在 /root/.ngrinder/db/ngrinder.h2.db
目录下,所以需要保存之前的压测数据。
- 将现在使用的数据库备份:
cd /root/.ngrinder/db
mv ngrinder.h2.db ngrinder.h2.db.bak
- 将
h2.h2.db
重命名为ngrinder.h2.db
mv h2.h2.db ngrinder.h2.db
- 重新启动服务
五、验证测试
- 在内嵌模式下添加一个脚本和场景
- 切换至 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 配置完成。
阿里云配置与其他类似,保证端口号配置一致即可