欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

ngrinder部署

程序员文章站 2022-07-12 18:15:17
...

本文只演示部署,细节后续给出

实验环境:

环境 版本
ngrinder 3.4.1
OS centos7

ngrinder是一个开源工具,网上也有很多教程,刚开始接触使用ngrinder的时候也拜读过不少前辈们的文章,实施过程还是会有大大小小的坑,github上的部分文档也没有更新,总体来说还是以官网文档为主要依据。
部署方式有多种
1、单Controller多agent是最常用的方式,但这种方式在规模大的压测时Controller会成为瓶颈
2、分布式Controller和多agent:1)单机部署Controller集群 .2) 多机部署Controller集群
3、使用docker安装以上3种形式,做平台的话可以考虑使用这种方式,agent可以用docker自动弹,方便管理

安装前提

  • nGrinder是Web应用程序(Controller)和Java应用程序(Agent,Monitor)的组合,要安装nGrinder控制器和代理,需要jdk
  • nGrinder使用许多端口与代理和代理进行通信。如果某些端口被防火墙阻止,则应要求网络管理员在防火墙中打开以下端口。可以通过配置配置这些端口

运行Controller方式

  • 直接使用jar执行
  • 放入tomcat容器执行

演示环境

ip OS config
10.255.254.25 centOS7、jdk7
10.255.254.55 centOS7、jdk8
10.255.254.56 centOS7、jdk8

下载最新的releases

[root@localhost ~]#mkdir yueling ;cd yueling
[root@localhost yueling]#wget https://github.com/naver/ngrinder/releases/download/ngrinder-3.4.1-20170131/ngrinder-controller-3.4.1.war

单Controller多Agent

ip soft confPath
10.255.254.25 Controller ~/.ngrinder
10.255.254.55 agent ~/.ngrinder_agent
10.255.254.56 agent ~/.ngrinder_agent
  • 使用直接启动的方式,jdk7需要显式声明-XX:MaxPermSize(jdk8已经废弃了该参数),其他参数可以先不指定。nGrinder需要非常大的PermGen内存,因为它包含很多库,如SVNKit,maven,Jetty webserver,groovy和python。使用PermGen设置重新运行ngrinder。nGrinder需要相当大的perm-gen内存
[root@localhost yueling]#java -XX:MaxPermSize=200m -jar ngrinder-controller-3.4.1.war
  • 启动web,并使用默认用户admin/admin登录,下载agent(另外还可以下载monitor、recorder)
    ngrinder部署
  • 上传至10.255.254.55、10.255.254.56两台服务器
[root@localhost yueling]# tar -xvf ngrinder-agent-3.4.1-10.255.254.25.tar
[root@localhost yueling]# cd ngrinder-agent/
[root@localhost ngrinder-agent]# ./run_agent.sh 
……

因为从界面上下载的agent,配置已经完成,所以不需要修改,直接即可运行,第一次运行会自动创建NGRINDER_AGENT的配置文件目录(默认是在~/.ngrinder_agent,可以显式指定),配置文件从agent的根目录的__agent.conf中复制

配置如下

common.start_mode=agent
agent.controller_host=10.255.254.25
agent.controller_port=16001
agent.region=NONE
#agent.host_id=
#agent.server_mode=true

# provide more agent java execution option if necessary.
#agent.java_opt=
# set following false if you want to use more than 1G Xmx memory per a agent process.
#agent.limit_xmx=true
# please uncomment the following option if you want to send all logs to the controller.
#agent.all_logs=true
# some jvm is not compatible with DNSJava. If so, set this false.
#agent.enable_local_dns=false

最简单的方式已经搭建完成
敲黑板
在单台机器上可以部署多个agent
同一台机上运行多个agent需要满足:可执行文件位置不同,配置文件路径不同,host-id不同。

  • 将agent复制多份
[aaa@qq.com yueling]# ls -l
total 104632
drwxr-xr-x 3 root root     4096 Aug 28 09:59 ngrinder-agent
drwxr-xr-x 3 root root     4096 Aug 28 10:23 ngrinder-agent2
-rw-r--r-- 1 root root 36167680 Aug 27 11:50 ngrinder-agent-3.4.1-10.255.254.25.tar
-rw-r--r-- 1 root root 70963742 Aug 27 16:31 ngrinder-controller-3.4.1.war
[aaa@qq.com ngrinder-agent]# 
  • 分别执行
[root@localhost yueling]# cd ngrinder-agent
[root@localhost ngrinder-agent]# ./run_agent.sh -o -ah ~/.ngrinder_agent --host-id first-agent
[root@localhost yueling]# cd ngrinder-agent
[root@localhost ngrinder-agent2]# ./run_agent.sh -o -ah ~/.ngrinder_agent2 --host-id second-agent

这里使用了一些参数,-o每次都覆盖配置__agent.conf覆盖到agenthome目录的agent.conf -ah agenthome目录 host-id指定agent标识等等

运行起来后,可以创建脚本、创建测试场景、运行等
ngrinder部署
ngrinder部署

至此,最简单的搭建方式完成,可以运行试试

单机Controller集群

以10.255.254.25机器为例

ip soft confPath
10.255.254.25 Controller集群、H2 ~/.ngrinder
10.255.254.55 agent ~/.ngrinder_agent
10.255.254.56 agent ~/.ngrinder_agent
  • 销毁之前所有的ngrinder实例
  • 下载H2
[root@test25 yueling]# wget http://www.h2database.com/h2-2018-03-18.zip

或者去官网找最新的releases包

  • 配置H2
[aaa@qq.com yueling]# unzip h2-2018-03-18.zip
[aaa@qq.com yueling]# cd h2/bin
[aaa@qq.com bin]# cp h2.sh h2server.sh
[aaa@qq.com bin]# vim h2server.sh 

#!/bin/sh
dir=$(dirname "$0")
java -cp "$dir/h2-1.4.197.jar:$H2DRIVERS:$CLASSPATH" org.h2.tools.Server -tcpAllowOthers -webAllowOthers -baseDir /db -webPort 9092 -tcpPort 9083 "aaa@qq.com"

其中tcpPort比较重要启动时要用,在这里特意改了一下,没有使用默认值,改为9083(这个值任意,只要没有被占用)
 
在该案例中使用的时候显式指定H2的host和port,可以在ngrinder_home目录中的database.conf中配置相关信息,具体参见下个示例

[root@test25 yueling]# java -jar -XX:MaxPermSize=500m -jar ngrinder-controller-3.4.1.war -p 8080  -cm easy -clp 10010 -r region1 -cp 9001 -dh 10.255.254.25 -dp 9083
[root@test25 yueling]# java -jar -XX:MaxPermSize=500m -jar ngrinder-controller-3.4.1.war -p 8081 -cm easy -clp 10011 -r region2 -cp 9002 -dh 10.255.254.25 -dp 9083
[root@test25 yueling]# java -jar -XX:MaxPermSize=200m -jar ngrinder-controller-3.4.1.war -p 8082 -cm easy -clp 10012 -r region3 -cp 9003 -dh 10.255.254.25 -dp 9083

为了实时查看日志,在此我开了3个终端,当然可以后台运行(正式环境中肯定是后台运行的……)

如果顺利的话,登录任意一端口即可
ngrinder部署

下载agent 比如region1的agent

[root@localhost yueling]# wget http://10.255.254.25:8080/agent/download?region=region1
[root@localhost yueling]# tar -vxf ngrinder-agent-3.4.1-region1-10.255.254.25.tar 
[root@localhost yueling]# cd ngrinder-agent/
[root@localhost ngrinder-agent]# ./run_agent.sh -o

-o 覆盖 即从__agent.conf覆盖AGENT_HOME中的agent.conf。具体agent启动的选项在单独的章节中介绍

ngrinder部署

在agent管理中也能看到相应的分类

多机集群Controller

ip soft confPath
10.255.254.25 Controller、H2、NFS server /data/nfs/、~/.ngrinder_ex
10.255.254.55 Controller、agent /data/nfs/、~/.ngrinder_ex、~/.ngrinder_agentX
10.255.254.56 Controller /data/nfs/、~/.ngrinder_ex

建立NFS(这里假设你已经搭建好了环境),把配置文件放入10.255.254.25:/data/nfs目录下
并分别在10.255.254.55、10.255.254.56上执行命令

NFS搭建可以问问度娘和gooooole很多相关资料,比如 Linux下NFS服务器的搭建与配置linux之NFS服务

[root@localhost ~]# mount -t nfs 10.255.254.25:/data/nfs /data/nfs
[root@localhost ~]# mount
……
10.255.254.25:/data/nfs on /data/nfs type nfs4 (rw,relatime,vers=4.1,rsize=1048576,wsize=1048576,namlen=255,hard,proto=tcp,port=0,timeo=600,retrans=2,sec=sys,clientaddr=10.255.254.55,local_lock=none,addr=10.255.254.25)
[root@localhost ngrinder-agent]# 

启动H2

[root@test25 bin]# ./h2server.sh

ngrinder部署
修改/data/nfs/database.conf,路径根据自己的喜好配置,会在H2的baseDir下创建子目录(/db/data/nfs/db/ngrinder.mv.db)

# H2 / cubrid can be set
database.type=H2
#database.type=cubrid

# for cubrid. You should configure the following.
# database.url=localhost:33000:ngrinder

# for H2 remote connection, You should configure like followings.
# You can see how to run the H2 DB server by yourself in http://www.h2database.com/html/tutorial.html#using_server
# If this is not set, ngrinder will create the embedded DB.
#database.url=tcp://h2_server_ip:h2_server_port:ngrinder
#database.url=tcp://10.255.254.25:9083:ngrinder
database.url=tcp://10.255.254.25:9083/data/nfs/db/ngrinder

# if you want to use HA mode in cubrid, you should enable following
# database.url_option=&althosts=secondary_ip:port

# you should provide id / password who has a enough permission to create tables in the given db.
database.username=admin
database.password=admin

在25、55、56三台机器上分别创建NGRINDER_EX_HOME(默认是在~/.ngrinder_ex),为方便起见我们就在当前home目录下创建相应的文件夹

[aaa@qq.com ~]# mkdir .ngrinder_ex
[aaa@qq.com ~]# vim .ngrinder_ex/system-ex.conf
# Followings are options which should be set in ${NGRINDER_EX_HOME}!!
#
# Region setting for the current controller.
# When running cluster mode, the ${NGRINDER_HOME} should be shared via NFS by multiple controllers.
# Which means the controllers share same system.conf file and have same properties.
# However each controllers should looks different region info. To make it possible
# The following options should be defined in ${NGRINDER_EX_HOME}(by default it's .ngrinder_ex/system-ex.conf
# which is not shared via NFS, so that each node cluster looks different value.

#Console binding IP of this region. If not set, console will be bound to all available IPs.
#cluster.host=

# cluster communication port. This port should be different across the controllers if easy cluster mode is enabled.
#cluster.port=40003

cluster.region=ShangHai
……

这里三台的system-ex.conf分别配置
55:cluster.region=ShangHai
56:cluster.region=Beijing
25:ShenZhen

接下来在三台机器上分别启动

[root@localhost yueling]# java -XX:MaxPermSize=500m -jar ngrinder-controller-3.4.1.war -p 8080 -nh /data/nfs/

在55上启动4个agent实例,同一台机器如何启动多个实例看上面的 “敲黑板” 章节
agent复制4份,分别修改__agent.conf中的配置,使用命令启动

[root@localhost ~]# ls -la |grep .ngrinder_agent
drwxr-xr-x   5 root root      4096 Aug 28 17:43 .ngrinder_agent
drwxr-xr-x   5 root root      4096 Aug 28 11:36 .ngrinder_agent2
drwxr-xr-x   5 root root      4096 Aug 28 16:42 .ngrinder_agent3
drwxr-xr-x   4 root root      4096 Aug 28 17:42 .ngrinder_agent4
[root@localhost ~]# 
为方便看日志开多个终端分别执行
[root@localhost ngrinder-agent]# ./run_agent.sh -o -ah ~/.ngrinder_agent --host-id first-agent
[root@localhost ngrinder-agent2]# ./run_agent.sh -o -ah ~/.ngrinder_agent2 --host-id second-agent
[root@localhost ngrinder-agent3]# ./run_agent.sh -o -ah ~/.ngrinder_agent3 --host-id third-agent
[root@localhost ngrinder-agent4]# ./run_agent.sh -o -ah ~/.ngrinder_agent4 --host-id fourth-agent

ngrinder部署

ngrinder部署

至此,手工安装已经介绍完毕,下面写docker,有上面的理解,剩下的就是写dockerfile

Docker安装

今天先下班,得空写(最迟本周补上)
aaa@qq.com
先写一个简单的吧:比如在同一台机器上装Controller和agent(在不同的机器上装只需要将配置文件分开)
以25为例,使用docker-compose服务编排装一个Controller和两个agent(docker和docker-compose基础知识先自行查阅)

注意指定了containername 就不能使用

[aaa@qq.com ngrinder]# vim docker-compose.yml

ngrinder-controller-1:
  image: ngrinder/controller
  container_name: ngrinder-controller-1
  hostname: ngrinder-controller-1
  ports:
    - 8087:80
    - 16001:16001
    - 12000-12009:12000-12009
  volumes:
    - /data/ngrinder/controller-1:/opt/ngrinder-controller
ngrinder-agent-1:
  image: ngrinder/agent
  container_name: ngrinder-agent-1
  hostname: ngrinder-agent-1
  volumes:
    - /data/ngrinder/agent-1:/opt/ngrinder-agent
  command:
    - 10.255.254.25:8087
ngrinder-agent-2:
  image: ngrinder/agent
  container_name: ngrinder-agent-2
  hostname: ngrinder-agent-2
  volumes:
    - /data/ngrinder/agent-2:/opt/ngrinder-agent
  command:
    - 10.255.254.25:8087
[root@test25 ngrinder]# docker-compose -f docker-compose.yml -d up

再挖个坑:复杂的例子还得往后推没时间写