Dubbo服务性能测试环境批量部署实现方案

来源:互联网 发布:网龙java笔试题 编辑:程序博客网 时间:2024/06/12 00:18

1     Dubbo Provider自动化部署

1.1      自动化部署原理说明:

  当需要部署作为provider的tomcat服务器到多台机器上,并且在一台机器上启动多个tomcat实例时,可以使用shell脚本进行自动部署多个tomcat实例,实现原理是:将一台公共linux服务器作为控制机(最好是一台配置低的机器,专门用来做控制机),通过在控制机上向每台需要部署应用的机器上添加信任关系,后面就可以不用输入密码使用SSH、pssh、scp进行远程操作待部署应用的机器了。

1.2      自动化部署步骤:

添加信任关系—》设置默认系统配置—》安装zabbix客户端—》编写自动启动脚本、拷贝部署文件—》远程启动provider服务—》验证服务的正确性

下面的步骤默认是在控制机上的/home目录中操作,执行脚本前需要给脚本添加执行权限;在控制机上安装好pssh工具。

1.2.1        添加信任关系

A、在控制机上生成秘钥对: ssh-keygen -trsa

 

     需要输入保存路径和密码的地方直接回车即可。

B、安装expect自动输入工具

rpm -ivhexpect-devel-5.42.1-1.x86_64.rpm expect-5.42.1-1.x86_64.rpmtcl-8.4.13-6.el5.x86_64.rpm

C、编写免输入密码添加信任关系脚本

脚本1名:make-newhost-trust.exp

脚本1内容

#!/usr/bin/expect

set ip [lindex$argv 0]

spawn scp/root/.ssh/id_rsa.pub root@$ip:/root/.ssh/authorized_keys

expect "Areyou sure you want to continue connecting (yes/no)?"

send  "yes\r"

expect"*password:"

send  "%Chuntianli%\r"

expect eof

exit

脚本2名:make-newhost-trust.sh

脚本2内容

#!/bin/bash

#变量定义 

FILENAME="/home/ip.txt"

#调用exp脚本自动输入密码并远程拷贝秘钥文件到部署机器 

for ip in  `cat $FILENAME`

do 

    ./make-newhost-trust.exp $ip

done 

D、执行脚本

在/home/ip.txt文件中加入需要添加信任关系的机器ip地址

执行make-newhost-trust.sh脚本

./make-newhost-trust.sh

查看脚本执行结果,看看是否有报错,如果有报错根据错误信息进行修正。

1.2.2        设置默认系统配置

A、编写设置默认系统配置脚本

脚本名:remote-set-newhost.sh

脚本内容:

#!/bin/bash

#变量定义 

FILENAME="/home/ip.txt"

user="root" 

port="22"

 

#本地通过scp、ssh进行相关系统配置 

for ipin  `cat $FILENAME`

do 

    #set java envirenment

    ssh -p $port $user@$ip "mkdir/usr/local/java"

    scp -r /usr/local/java/jdk1.7.0_79$user@$ip:/usr/local/java/jdk1.7.0_79

    #set user envirment

    scp /root/.bashrc $user@$ip:/root/.bashrc

    #close firewar

    ssh -p $port $user@$ip  "service iptables stop"

    #set sys config

    scp /etc/sysctl.conf$user@$ip:/etc/sysctl.conf

    scp /etc/security/limits.conf$user@$ip:/etc/security/limits.conf

    ssh -p $port $user@$ip  "ulimit -n 562000"

    ssh -p $port $user@$ip  "sysctl -p"

    #set hosts

    ssh -p $port $user@$ip  "sed -i '1c $ip host-${ip//./-}'/etc/hosts"

done

B、执行脚本

确保已经在控制机上安装了jdk,且安装在下面的路径中

/usr/local/java/jdk1.7.0_79

在/home/ip.txt文件中加入需要添加信任关系的机器ip地址

执行remote-set-newhost.sh脚本

./remote-set-newhost.sh

查看脚本执行结果,看看是否有报错,如果有报错根据错误信息进行修正。

1.2.3        安装zabbix客户端

A、编写自动安装zabbix客户端脚本

脚本名:01_install_zabbix_agent.sh

脚本内容:

#!/bin/bash

#-------------------------------------------------------------------------------

#Name:        zhuwenfeng

#Purpose:       给所有机器安装zabbix_agent客户端

#Author:      zWX291685

#

# Created:     20/11/2015

#Copyright:   (c) zWX291685 2015

#Licence:     <your licence>

#-------------------------------------------------------------------------------

#

 

zabbix_ip='192.168.1.50'

zabbix_path='/home/zhu/zabbix'

zabbix_filea='zabbix-2.4.7-1.el6.x86_64.rpm'

zabbix_fileb='zabbix-agent-2.4.7-1.el6.x86_64.rpm'

zabbix_conf='/etc/zabbix/zabbix_agentd.conf'

check_tomcat='check_tomcat.sh'

 

whileread ip

do

     echo -e "\e[31m---Remote${ip}---\e[0m"

     ssh root@${ip} >/dev/null 2>&1<< contenta

     if [[ ! -d ${zabbix_path} ]]; then

            mkdir -p ${zabbix_path}

     fi

 

     sed -i /HOSTNAME/d /etc/sysconfig/network

        hostname host-${ip//./-}

     host-${ip//./-} >${zabbix_path}/${ip}.txt

     exit

contenta

 

     scp root@${ip}:${zabbix_path}/${ip}.txt${zabbix_path}/

     scp ${zabbix_path}/${zabbix_filea}root@${ip}:$zabbix_path/

     scp ${zabbix_path}/${zabbix_fileb}root@${ip}:$zabbix_path/

     scp ${zabbix_path}/${check_tomcat}root@${ip}:$zabbix_path/

 

     agent_name=`cat ${zabbix_path}/${ip}.txt`

 

     ssh root@${ip} >/dev/null 2>&1<< contentb

     rpm -ivh ${zabbix_path}/${zabbix_filea}

     rpm -ivh ${zabbix_path}/${zabbix_fileb}

     sed -i"s/Server=127.0.0.1/Server=${zabbix_ip}/g" ${zabbix_conf}

     sed -i"s/ServerActive=127.0.0.1/ServerActive=${zabbix_ip}:10051/g"${zabbix_conf}

     sed -i "s/Hostname=Zabbixserver/Hostname=${agent_name}/g" ${zabbix_conf}

 

     echo"UserParameter=tomcat.status[*],/home/zhu/zabbix/check_tomcat.sh\\\$1" >>${zabbix_conf}

     rm -rf ${zabbix_path}/${ip}.txt

     chkconfig zabbix-agent on

     /etc/init.d/zabbix-agent restart

     exit

contentb

 

     rm -rf ${zabbix_path}/${ip}.txt

done < ${zabbix_path}/ip.log

B、执行脚本

将脚本放在控制机/home/zhu/zabbix目录下,同时zabbix客户端安装文件和监控需要的脚本check_tomcat.sh放在此目录中

修改ip.log文件,加入待部署机器ip地址

执行01_install_zabbix_agent.sh脚本

./01_install_zabbix_agent.sh

查看脚本执行结果,看看是否有报错,如果有报错根据错误信息进行修正。

1.2.4        编写自动启动脚本、拷贝部署文件

如果要在一台机器上启动多个tomcat实例,并且多个实例共用一套tomcat启动文件,可以在启动命令中指定server.xml这个配置文件,和修改应用的需要变更的配置项即可。

A、编写自动生成server.xml配置文件脚本

在tomcat的主目录中创建目录instance-conf,在instance-conf目录下面创建make-server-conf.sh脚本。

脚本名:make-server-conf.sh

脚本内容:

#/!bin/bash

#生成配置文件个数

loops=20;

for((i=1;i<=$loops;i++))

do

   num=$(expr $i + 79)

   port1=$num'05'

   port2=$num'80'

   port3=$num'43'

   port4=$num'09'

   rm -rf /home/pms-tomcat/instance-conf/instance$i-server.xml

   cp /home/pms-tomcat/conf/server.xml /home/pms-tomcat/instance-conf/instance$i-server.xml

   sed -i "s/8005/$port1/g"/home/pms-tomcat/instance-conf/instance$i-server.xml

   sed -i "s/18080/$port2/g"/home/pms-tomcat/instance-conf/instance$i-server.xml

   sed -i"s/8043/$port3/g"/home/pms-tomcat/instance-conf/instance$i-server.xml

   sed -i "s/8009/$port4/g"/home/pms-tomcat/instance-conf/instance$i-server.xml

done

B、编写自动启动停止provider服务脚本

在tomcat的主目录中创建目录start-stop-script,在start-stop-script目录下面创建start-all.sh、stop-all.sh、template-start.sh、template-stop.sh等4个脚本。

脚本1名:template-start.sh

脚本1内容:

#!/bin/bash

export LC_ALL="en_US.utf8"

export LANG="en_US"

#统一定义Tomcat目录

TOMCAT_HOME=/home/pms-tomcat

#关闭tomcat

echo "shutdowntomcat-instance$1:............."

instance=instance$1-server.xml

port=$2

kill -9 `ps -ef | grep -v grep |grep 'org.apache.catalina.startup.Bootstrap' | grep  $instance | awk '{print $2}'`

echo "tomcat-instance$1 hasshutdown"

#修改dubbo监控端口

sed -i"s/serverport=.*/serverport=$port/" $TOMCAT_HOME/webapps/ROOT/WEB-INF/classes/rpc.properties

#启动tomcat实例

echo "start uptomcat-instance$1:.............."

cd ${TOMCAT_HOME}

${TOMCAT_HOME}/bin/startup.sh-config $TOMCAT_HOME/instance-conf/$instance

sleep 10

echo "tomcat-instance$1 hasstarted."

脚本2名:template-stop.sh

脚本2内容:

#!/bin/bash

export LC_ALL="en_US.utf8"

export LANG="en_US"

#统一定义Tomcat目录

TOMCAT_HOME=/home/pms-tomcat

#关闭tomcat

instance=instance$1-server.xml

echo "shutdowntomcat-instance$1:............."

kill -9 `ps -ef | grep -v grep |grep 'org.apache.catalina.startup.Bootstrap' | grep  $instance | awk '{print $2}'`

echo "tomcat-instance$1 hasshutdown"

脚本3名:start-all.sh

脚本3内容:

#!/bin/bash

TOMCAT_HOME=/home/pms-tomcat

#启动实例个数

loops=15

rm -rf $TOMCAT_HOME/logs/*

for((i=1;i<=$loops;i++))

do

   num=$(expr $i + 19)

   port=$num'881'

   $TOMCAT_HOME/start-stop-script/template-start.sh $i $port

done

脚本4名:stop-all.sh

脚本4内容:

#!/bin/bash

TOMCAT_HOME=/home/pms-tomcat

#关闭实例个数

loops=15

for((i=1;i<=$loops;i++))

do

   $TOMCAT_HOME/start-stop-script/template-stop.sh $i

done

创建的脚本内容如下图

编写好自动启动脚本后需要在控制机本地执行一下脚本是否正常

执行make-server-conf.sh脚本生成配置文件(根据要生成的配置文件个数修改loops变量值)

./instance-conf/make-server-conf.sh

执行start-all.sh启动所有服务(根据要启动的实例个数修改loops变量值)

./start-stop-script/start-all.sh

执行stop-all.sh停止所有服务(根据要停止的实例个数修改loops变量值)

./start-stop-script/stop-all.sh

 

如果要启动某个实例

./start-stop-script/template-start.sh2 21881

如果要启动某个实例

./start-stop-script/template-stop.sh2 21881

 

查看脚本执行结果,看看是否有报错,如果有报错根据错误信息进行修正。

C、编写自动拷贝部署文件脚本

脚本名:remote-copy-tomcat.sh

脚本内容:

#!/bin/bash

#变量定义 

FILENAME="/home/provider-ip.txt"

user="root" 

port="22"

copy_dir="/home/pms-tomcat" 

#本地通过scp拷贝文件到远程服务器 

for ip in  `cat $FILENAME`

do 

   ssh -p $port $user@$ip "rm -rf $copy_dir"

   scp -r $copy_dir $user@$ip:$copy_dir

done

D、执行脚本

在/home/provider-ip.txt文件中加入provider的机器ip地址

执行remote-copy-tomcat.sh脚本

./remote-copy-tomcat.sh

 

查看脚本执行结果,看看是否有报错,如果有报错根据错误信息进行修正。

1.2.5        远程启动provider服务

A、编写远程启动provider服务脚本

脚本名:remote-start-tomat-bypssh.sh

脚本内容:

#!/bin/bash

pssh -P -t 0 -h provider-ip.txt"/home/pms-tomcat/start-stop-script/start-all.sh"

B、执行远程启动provider服务脚本

./remote-start-tomat-bypssh.sh

 

查看脚本执行结果,看看是否有报错,如果有报错根据错误信息进行修正。

1.2.6        验证服务的正确性

当执行完启动provider的脚本后需要验证服务是否正常启动,最简单的方法是在看dubbo-admin中查看提供者列表中是否已经正常查看到已启动的provider:

2     Dubbo Consumer自动化部署

2.1      自动化部署原理说明:

Dubbo consumer一般是由测试工具模拟并发送调用请求到provider,当我们要模拟大量并且独立注册zookeeper时则需要使用一个简单的java进程来模拟,本节自动化部署就是指部署大量使用简单的java进程模拟的consumer。执行部署前需要准备好启动consumer所需要的jar包和启动脚本文件,然后在每一台机器上启动多个consumer实例,实现原理是:将一台公共linux服务器作为控制机(最好是一台配置低的机器,专门用来做控制机),通过在控制机上向每台需要部署应用的机器上添加信任关系,后面就可以不用输入密码使用SSH、pssh、scp进行远程操作待部署应用的机器了。

2.2         自动化部署步骤:

添加信任关系—》设置默认系统配置—》安装zabbix客户端—》编写自动启动脚本、拷贝部署文件—》远程启动provider服务—》验证服务的正确性

下面的步骤默认是在控制机上的/home目录中操作,执行脚本前需要给脚本添加执行权限;在控制机上安装好pssh工具。

前面3个步骤和Dubbo Provider自动化部署的前3个步骤一致,请按照Dubbo Provider自动化部署中的步骤执行即可。

 

2.2.1        编写自动启动脚本、拷贝部署文件

A、编写自动启动停止consumer脚本

在控制机的home目录下面新建目录comsumer-script,将consumer启动需要的所有jar包放在comsumer-script目录下的lib目录中

在comsumer-script目录下新增下面3个脚本

脚本1名:comsumer-common.sh

脚本1内容:

java -Xms50m -Xmx50m-Djava.ext.dirs=$1 $2 $3 >> $4 2>&1 &

脚本2名:start-queryCarrier-comsumer.sh

脚本2内容:

#!/bin/bash --login

#numbers of comsumer

num=50

for((i=1;i<=$num;i++))

do

   rm -rf /home/comsumer-script/logs/queryCarrier_comsumer_$i.log

   sh /home/comsumer-script/comsumer-common.sh"/home/comsumer-script/lib""com.huawei.vmall.dubbo.QueryCarrier" $i"/home/comsumer-script/logs/queryCarrier_comsumer_$i.log"

   sleep 2

done

脚本3名:stop-queryCarrier-comsumer.sh

脚本3内容:

#!/bin/bash

echo "shutdownqueryCarrier_comsumer:............."

kill -9 `ps -ef | grep -v grep |grep 'com.huawei.vmall.dubbo.QueryCarrier' | awk '{print $2}'`

echo "queryCarrier_comsumer hasshutdown"

编写好自动启动停止脚本后需要在控制机本地执行一下脚本是否正常

执行start-queryCarrier-comsumer.sh脚本启动consumer(修改脚本中的num变量值可以控制启动consumer实例的个数)

./comsumer-script/start-queryCarrier-comsumer.sh

 

如果要停止consumer执行stop-queryCarrier-comsumer.sh脚本

./comsumer-script/stop-queryCarrier-comsumer.sh

查看脚本执行结果,看看是否有报错,如果有报错根据错误信息进行修正。

B、编写自动拷贝部署文件脚本

脚本名:remote-copy-comsumer.sh

脚本内容:

#!/bin/bash

#变量定义 

FILENAME="/home/consumer-ip.txt"

user="root" 

port="22"

copy_dir="/home/comsumer-script" 

copy_dir1="/home/comsumer-script/*.*" 

#本地通过scp拷贝文件到远程服务器 

for ip in `cat $FILENAME` 

do 

   ssh -p $port $user@$ip "rm -rf $copy_dir"

   scp -r $copy_dir $user@$ip:$copy_dir 

   #scp -r $copy_dir1 $user@$ip:$copy_dir 

done 

 

C、执行自动拷贝部署文件脚本

在/home/consumer-ip.txt文件中加入consumer的机器ip地址

执行remote-copy-comsumer.sh脚本

./remote-copy-comsumer.sh

查看脚本执行结果,看看是否有报错,如果有报错根据错误信息进行修正。

2.2.2        远程启动consumer服务

A、编写远程启动consumer服务脚本

脚本名:remote-start-comsumer-byssh.sh

脚本内容:

#!/bin/bash

pssh -P -t 0 -h consumer-ip.txt"/home/comsumer-script/start-queryCarrier-comsumer.sh"

B、执行远程启动consumer服务脚本

./remote-start-comsumer-byssh.sh

查看脚本执行结果,看看是否有报错,如果有报错根据错误信息进行修正。

2.2.3        验证服务的正确性

当执行完启动consumer的脚本后需要验证服务是否正常启动,最简单的方法是在看dubbo-admin中查看提供者列表中是否已经正常查看到已启动的consumer:

 

3         测试工具自动化部署

3.1         Jmeter集群部署

3.1.1        单个节点部署JMETER

A、安装jmeter

在部署jmeter前必须安装好JDK,然后下载jmeter安装包并解压缩到指定的目录下即可,无论是在windows还是在linux下,只要在安装好JDK的机器下并解压缩jmeter文件夹就能使用jmeter了。

Windows下启动jmeter:

以单节点方式启动,双击jmeter主目录中的bin目录下jmeter.bat文件即可启动图形界面的jmeter

B、配置jmeter相关参数

配置jvm启动堆内存大小

右键点击jmeter.bat文件打开右键菜单,点击编辑打开文本编辑器

找到set HEAP和set NEW行,修改-Xms  -Xmx -XX:NewSize -XX:MaxNewSize这4个参数的值,如上图所示

修改jvm默认字符集

在windows中由于jvm使用默认字符集是GBK,而应用服务器使用的是utf-8字符集,因此需要将jmeter的jvm字符集改为utf-8字符,否则执行rpc请求时会报错,修改方法如下:

右键打开jmeter.bat文件选择编辑,找到set ARGS行,在行后面添加 -Dfile.encoding=UTF-8

如果是以多节点集群方式启动还需要在jmeter这个文件中ARGS行后面添加 -Dfile.encoding=UTF-8

 

3.1.2        部署测试脚本和jar包

将已经保存好的jmx场景文件放在jmeter主目录的bin目录下面(也可以放在其他目录下面),将第三方依赖包放在jmeter主目录的lib目录下面(也可以在jmx场景中这定到其他目录,但是这种方式可能存在找不到依赖包的问题),将RPC接口调用的工程jar放在上一步lib目录下的ext目录中。

 

3.1.3        多节点带控制端集群自动部署JMETER

多节点带控制端集群部署jmeter一般以一台windows的jmeter作为控制端,其他机器作为jmeter服务端,可以是windows机器也可以是linux机器。

A、配置集群

在jmeter的控制端bin目录下面打开jmeter.properties文件,找到remote_hosts行,然后在后面添加需要作为jmeter服务端的机器IP地址(jmeter控制端也可以同时作为服务端,也需要将它的IP地址加入),IP地址之间以逗号分隔开。

B、启动集群

启动jmeter集群一般先启动jmeter服务端,再启动jmeter控制端

Windows下启动jmeter服务端

双击bin目录下的jmeter-server.bat即可

启动jmeter服务端后的界面如下,如果不是下面的界面需要分析启动失败原因。

linux下启动jmeter服务端

在jmeter的bin目录下执行jmeter-server脚本即可

/home/apache-jmeter-2.13/bin/jmeter-server &

 

如果启动过程中报错java.rmi.RemoteException:Cannot start. host-192-168-1-86 is a loopback address

解决办法:(1)、修改/etc/hosts文件中IP地址和主机名的映射关系

修改前

修改后

修改后启动正常

(2)、在执行jmeter-server脚本后面加入参数-Djava.rmi.server.hostname=192.168.1.86

./jmeter-server -Djava.rmi.server.hostname=192.168.1.86& 

说明:192.168.1.86为本机IP地址

 

Windows下启动jmeter控制端

双击jmeter主目录中的bin目录下jmeter.bat文件即可启动jmeter控制端

在运行—》远程启动菜单下面可以看到刚才添加的jmeter服务端IP地址,点击某个IP地址即可让对应的机器启动执行测试场景,点击远程全部启动可同时启动所有机器执行测试场景。

注意:在启动远程集群测试之前要保证控制端和所有服务端的jmx场景文件、第三方jar包、测试jar包、参数化文件的内容和存放路径一致,且要注意windows和linux路径的差别。

 

C、批量拷贝和远程启动jmeter服务端

当jmeter服务端数量比较多时可以参照“4 Dubbo Provider自动化部署”节中的“4.2 自动化部署步骤:”第一步和第二步,添加信任关系和设置默认系统配置;然后通过下面的远程拷贝和远程启动脚本批量部署jmeter服务端。

远程拷贝脚本

脚本名:remote-copy-jmeter.sh

脚本内容:

#!/bin/bash

#变量定义 

FILENAME="/home/jmeter-ip.txt"

user="root"

port="22"

copy_dir="/home/apache-jmeter-2.13" 

#本地通过scp拷贝文件到远程服务器 

for ip in`cat $FILENAME`

do

    ssh -p $port $user@$ip "rm -rf$copy_dir"

    scp -r $copy_dir $user@$ip:$copy_dir  

done

远程启动脚本

脚本名:remote-start-jmeter.sh

脚本内容:

#!/bin/bash

pssh -P -t 0 -h jmeter-ip.txt"/home/apache-jmeter-2.13/bin/jmeter-server &"

执行批量拷贝和远程启动jmeter服务端脚本

在/home/jmeter-ip.txt文件中加入jmeter服务端的机器IP地址

将准备好的jmeter目录拷贝到控制机的/home目录下

在控制机上执行批量拷贝脚本

./remote-copy-jmeter.sh

在控制机上执行远程启动jmeter服务端脚本

./remote-start-jmeter.sh

 

查看脚本执行结果,看看是否有报错,如果有报错根据错误信息进行修正。

3.1.4        多节点独立启动集群自动部署JMETER

多节点独立启动集群方式部署一般是在linux下部署,不使用一台机器作为控制端,所有的jmeter都独立运行,使用远程批量控制命令来控制所有jmeter的启动、停止、测试结果收集等操作;使用这种方式部署jmeter的好处是规避带控制端集群方式造成的控制端和服务端之间通信存在性能瓶颈的问题,缺点是需要自己写脚本控制每个jmeter节点,不能实时查看整个集群的测试结果。

每台机器上可以启动多个jmeter实例,下面的脚本是在每台机器上部署多个jmeter实例,执行测试时同时启动所有节点上的所有jmeter实例。

 

A、编写启动停止多个jmeter服务端实例脚本

将准备好的jmeter目录拷贝到控制机的/home目录下

在jmeter目录下bin目录中创建下面2个脚本

脚本1名:start-server.sh

脚本1内容

#!/bin/bash --login

ipaddr=`ifconfig eth0 | grep "inetaddr" | awk '{ print $2}' | awk -F: '{print $2}'`

for((i=0;i<5;i++))

do

{

   /home/apache-jmeter-2.13/bin/jmeter-Dserver_port=${SERVER_PORT:-1$i'99'} -s -j/home/apache-jmeter-2.13/bin/jmeter-server$i.log-Djava.rmi.server.hostname=$ipaddr &

}&

done

wait

脚本2名:stop-server.sh

脚本2内容

#!/bin/bash --login

kill -9 `ps -ef | grep -v grep | grep'/home/apache-jmeter-2.13/bin/jmeter' | awk '{print $2}'`

B、编写启动多个测试场景执行脚本

在jmeter目录下bin目录中创建下面的脚本(默认启动5个jmeter实例,jmx场景文件路径需要修改为自己的jmx路径,测试结果路径也可以自己指定)

脚本名:start-test-cluster-queryCarrier.sh

脚本内容

#!/bin/bash --login

for((i=0;i<5;i++))

do

{

   /home/apache-jmeter-2.13/bin/jmeter -n -t /home/apache-jmeter-2.13/bin/QueryCarrier-nogui.jmx -R 127.0.0.1:1$i'99' >/home/apache-jmeter-2.13/test-result/QueryCarrier$i.txt&

}&

done

wait

C、编写批量远程拷贝jmeter文件脚本

脚本名:remote-copy-jmeter.sh

脚本内容:

#!/bin/bash

#变量定义 

FILENAME="/home/jmeter-ip.txt"

user="root"

port="22"

copy_dir="/home/apache-jmeter-2.13" 

#本地通过scp拷贝文件到远程服务器 

for ip in`cat $FILENAME`

do

    ssh -p $port $user@$ip "rm -rf$copy_dir"

    scp -r $copy_dir $user@$ip:$copy_dir  

done

D、编写批量远程启动停止jmeter服务端和批量执行测试脚本

脚本1名:remote-start-jmeter.sh

脚本1内容

#!/bin/bash

pssh -P -t 0 -h jmeter-ip.txt"/home/apache-jmeter-2.13/bin/start-server.sh"

脚本2名:remote-stop-jmeter.sh

脚本2内容

#!/bin/bash

#变量定义  

FILENAME="/home/jmeter-ip.txt"

port="22" 

user="root" 

remote_cmd="/home/apache-jmeter-2.13/bin/stop-server.sh" 

 

#本地通过ssh执行远程服务器的脚本 

for ip in `cat $FILENAME`

do 

   ssh -p $port $user@$ip "$remote_cmd" 

done

脚本3名:test-cluster-provider.sh

脚本3内容

#!/bin/bash

pssh -P -t 0 -h jmeter-ip.txt"/home/apache-jmeter-2.13/bin/start-test-cluster-queryCarrier.sh"

E、执行批量远程拷贝jmeter文件脚本

在/home/jmeter-ip.txt文件中加入jmeter服务端的机器IP地址

在控制机上执行批量拷贝脚本

./remote-copy-jmeter.sh

F、启动多节点独立启动集群测试

在控制机上执行批量远程启动jmeter服务端脚本

./remote-start-jmeter.sh

在控制机上执行批量执行测试脚本

./test-cluster-provider.sh

 

如果需要停止所有jmeter服务端,在控制机上执行批量远程停止jmeter服务端脚本

./remote-stop-jmeter.sh

 

查看脚本执行结果,看看是否有报错,如果有报错根据错误信息进行修正。

3.2         Zk-Benchmark部署

部署要求:除工具本身,还需要将工具依赖库添加到环境变量。目前重复部署会导致在环境变量添加重复值,部署脚本待优化。部署脚本已包含测试工具和测试脚本。

 

4     Zabbix监控批量部署

Zabbix批量部署监控可参考下面的文章

http://paperplane.ruhoh.com/zabbix/intro-to-zabbix-api/

下面是具体的批量监控方法

4.1      Zabbix Agent及依赖shell批量部署

批量部署原理:

当需要批量部署Zabbix Agent到多台机器上,可以使用shell脚本进行自动部署,实现原理是:将一台公共linux服务器作为控制机(最好是一台配置低的机器,专门用来做控制机),通过在控制机上向每台需要部署应用的机器上添加信任关系,后面就可以不用输入密码使用SSH、pssh、scp进行远程操作待部署应用的机器了。

 

自动化部署步骤

添加信任关系—》设置默认系统配置—》安装zabbix客户端

下面的步骤默认是在控制机上的/home目录中操作,执行脚本前需要给脚本添加执行权限;在控制机上安装好pssh工具。

4.1.1        添加信任关系

A、在控制机上生成秘钥对: ssh-keygen -trsa

 

     需要输入保存路径和密码的地方直接回车即可。

B、安装expect自动输入工具

rpm -ivhexpect-devel-5.42.1-1.x86_64.rpm expect-5.42.1-1.x86_64.rpmtcl-8.4.13-6.el5.x86_64.rpm

C、编写免输入密码添加信任关系脚本

脚本1名:make-newhost-trust.exp

脚本1内容

#!/usr/bin/expect

set ip [lindex$argv 0]

spawn scp/root/.ssh/id_rsa.pub root@$ip:/root/.ssh/authorized_keys

expect "Areyou sure you want to continue connecting (yes/no)?"

send  "yes\r"

expect"*password:"

send  "%Chuntianli%\r"

expect eof

exit

脚本2名:make-newhost-trust.sh

脚本2内容

#!/bin/bash

#变量定义 

FILENAME="/home/ip.txt"

#调用exp脚本自动输入密码并远程拷贝秘钥文件到部署机器 

for ip in  `cat $FILENAME`

do 

    ./make-newhost-trust.exp $ip

done 

D、执行脚本

在/home/ip.txt文件中加入需要添加信任关系的机器ip地址

执行make-newhost-trust.sh脚本

./make-newhost-trust.sh

查看脚本执行结果,看看是否有报错,如果有报错根据错误信息进行修正。

4.1.2        设置默认系统配置

A、编写设置默认系统配置脚本

脚本名:remote-set-newhost.sh

脚本内容:

#!/bin/bash

#变量定义 

FILENAME="/home/ip.txt"

user="root" 

port="22"

 

#本地通过scp、ssh进行相关系统配置 

for ipin  `cat $FILENAME`

do 

    #set java envirenment

    ssh -p $port $user@$ip "mkdir/usr/local/java"

    scp -r /usr/local/java/jdk1.7.0_79$user@$ip:/usr/local/java/jdk1.7.0_79

    #set user envirment

    scp /root/.bashrc $user@$ip:/root/.bashrc

    #close firewar

    ssh -p $port $user@$ip  "service iptables stop"

    #set sys config

    scp /etc/sysctl.conf$user@$ip:/etc/sysctl.conf

    scp /etc/security/limits.conf$user@$ip:/etc/security/limits.conf

    ssh -p $port $user@$ip  "ulimit -n 562000"

    ssh -p $port $user@$ip  "sysctl -p"

    #set hosts

    ssh -p $port $user@$ip  "sed -i '1c $ip host-${ip//./-}'/etc/hosts"

done

B、执行脚本

确保已经在控制机上安装了jdk,且安装在下面的路径中

/usr/local/java/jdk1.7.0_79

在/home/ip.txt文件中加入需要添加信任关系的机器ip地址

执行remote-set-newhost.sh脚本

./remote-set-newhost.sh

查看脚本执行结果,看看是否有报错,如果有报错根据错误信息进行修正。

4.1.3        安装zabbix客户端

A、编写自动安装zabbix客户端脚本

脚本名:01_install_zabbix_agent.sh

脚本内容:

#!/bin/bash

#-------------------------------------------------------------------------------

#Name:        zhuwenfeng

#Purpose:       给所有机器安装zabbix_agent客户端

#Author:      zWX291685

#

#Created:     20/11/2015

#Copyright:   (c) zWX291685 2015

#Licence:     <your licence>

#-------------------------------------------------------------------------------

#

 

zabbix_ip='192.168.1.50'

zabbix_path='/home/zhu/zabbix'

zabbix_filea='zabbix-2.4.7-1.el6.x86_64.rpm'

zabbix_fileb='zabbix-agent-2.4.7-1.el6.x86_64.rpm'

zabbix_conf='/etc/zabbix/zabbix_agentd.conf'

check_tomcat='check_tomcat.sh'

 

whileread ip

do

     echo -e "\e[31m---Remote${ip}---\e[0m"

     ssh root@${ip} >/dev/null 2>&1<< contenta

     if [[ ! -d ${zabbix_path} ]]; then

            mkdir -p ${zabbix_path}

     fi

 

     sed -i /HOSTNAME/d /etc/sysconfig/network

        hostname host-${ip//./-}

     host-${ip//./-} >${zabbix_path}/${ip}.txt

     exit

contenta

 

     scp root@${ip}:${zabbix_path}/${ip}.txt${zabbix_path}/

     scp ${zabbix_path}/${zabbix_filea}root@${ip}:$zabbix_path/

     scp ${zabbix_path}/${zabbix_fileb}root@${ip}:$zabbix_path/

     scp ${zabbix_path}/${check_tomcat}root@${ip}:$zabbix_path/

 

     agent_name=`cat ${zabbix_path}/${ip}.txt`

 

     ssh root@${ip} >/dev/null 2>&1<< contentb

     rpm -ivh ${zabbix_path}/${zabbix_filea}

     rpm -ivh ${zabbix_path}/${zabbix_fileb}

     sed -i"s/Server=127.0.0.1/Server=${zabbix_ip}/g" ${zabbix_conf}

     sed -i "s/ServerActive=127.0.0.1/ServerActive=${zabbix_ip}:10051/g"${zabbix_conf}

     sed -i "s/Hostname=Zabbixserver/Hostname=${agent_name}/g" ${zabbix_conf}

 

     echo"UserParameter=tomcat.status[*],/home/zhu/zabbix/check_tomcat.sh\\\$1" >>${zabbix_conf}

     rm -rf ${zabbix_path}/${ip}.txt

     chkconfig zabbix-agent on

     /etc/init.d/zabbix-agent restart

     exit

contentb

 

     rm -rf ${zabbix_path}/${ip}.txt

done < ${zabbix_path}/ip.log

B、执行脚本

将脚本放在控制机/home/zhu/zabbix目录下,同时zabbix客户端安装文件和监控需要的脚本check_tomcat.sh放在此目录中

修改ip.log文件,加入待部署机器ip地址

执行01_install_zabbix_agent.sh脚本

./01_install_zabbix_agent.sh

查看脚本执行结果,看看是否有报错,如果有报错根据错误信息进行修正。

 

4.2      Zabbix RPC接口批量配置监控图表

4.2.1        常规监控项

常规监控项如CPU、内存、磁盘和网络IO等可以通过下面的方法批量添加host、template、screen:

第一步:创建一个常规监控项模板,添加常规监控需要监控项

第二步:开启zabbix自动添加host功能(Auto registration)

第三步:批量安装Zabbix Agent(参考7.1节)

第四步:检查自动添加host状态

如果上面几个步都正常执行的话,在hosts界面就能看到新添加的机器会在这里显示,且所有的状态正常。

第五步:自动添加screen

生成xml格式的screen模板(通过已有的screen导出xml格式模板)

 

通过shell脚本循环添加多个host的xml格式screen文件

脚本名:make-zabbix-screen.sh

脚本内容:

#!/bin/bash

#变量定义 

screenName="dubbo-test-provider"

screenFileName="${screenName}.xml"

ipFileName="/home/ip.txt"

rows=`cat $ipFileName|wc -l`

yValue=0

rm -rf $screenFileName

touch $screenFileName

 

cat >$screenFileName << EOF

<?xml version="1.0"encoding="UTF-8"?>

<zabbix_export>

   <version>2.0</version>

   <date>2016-05-28T02:13:39Z</date>

   <screens>

       <screen>

           <name>${screenName}</name>

           <hsize>4</hsize>

           <vsize>${rows}</vsize>

           <screen_items>

EOF

for ip in `cat $ipFileName`

do

   hostname="host-${ip//./-}"   

   cat >>$screenFileName << EOF

      <screen_item>

              <resourcetype>0</resourcetype>

          <width>500</width>

              <height>100</height>

                <x>0</x>

                <y>${yValue}</y>

               <colspan>1</colspan>

               <rowspan>1</rowspan>

               <elements>0</elements>

                <valign>0</valign>

                <halign>0</halign>

                <style>0</style>

                <url/>

               <dynamic>0</dynamic>

               <sort_triggers>0</sort_triggers>

                <resource>

                    <name>CPUutilization</name>

                   <host>${hostname}</host>

                </resource>

                <max_columns>3</max_columns>

                <application/>

           </screen_item>

           <screen_item>

               <resourcetype>0</resourcetype>

                <width>500</width>

               <height>100</height>

                <x>1</x>

                <y>${yValue}</y>

               <colspan>1</colspan>

               <rowspan>1</rowspan>

               <elements>0</elements>

                <valign>0</valign>

                <halign>0</halign>

                <style>0</style>

               <url/>

               <dynamic>0</dynamic>

               <sort_triggers>0</sort_triggers>

                <resource>

                   <name>NETSTAT</name>

                   <host>${hostname}</host>

                </resource>

               <max_columns>3</max_columns>

                <application/>

           </screen_item>

           <screen_item>

               <resourcetype>0</resourcetype>

                <width>500</width>

               <height>100</height>

                <x>2</x>

                <y>${yValue}</y>

               <colspan>1</colspan>

               <rowspan>1</rowspan>

               <elements>0</elements>

                <valign>0</valign>

                <halign>0</halign>

                <style>0</style>

                <url/>

               <dynamic>0</dynamic>

               <sort_triggers>0</sort_triggers>

                <resource>

                    <name>Memoryusage</name>

                   <host>${hostname}</host>

                </resource>

               <max_columns>3</max_columns>

                <application/>

           </screen_item>

           <screen_item>

               <resourcetype>0</resourcetype>

                <width>500</width>

               <height>100</height>

               <x>3</x>

                <y>${yValue}</y>

               <colspan>1</colspan>

               <rowspan>1</rowspan>

               <elements>0</elements>

                <valign>0</valign>

                <halign>0</halign>

                <style>0</style>

                <url/>

               <dynamic>0</dynamic>

               <sort_triggers>0</sort_triggers>

                <resource>

                    <name>Network trafficon eth0</name>

                   <host>${hostname}</host>

                </resource>

               <max_columns>3</max_columns>

                <application/>

           </screen_item>

EOF

yValue=`expr $yValue + 1`

done

 

cat >>$screenFileName << EOF

           </screen_items>

       </screen>

   </screens>

</zabbix_export>

EOF

其中screenName="dubbo-test-provider" 为指定的screen名称,需要修改,ipFileName="/home/ip.txt"为需要添加的host的IP地址列表文件。

执行shell脚本生成xml格式screen文件

./make-zabbix-screen.sh

 

导入xml格式screen文件生成screen

 

检查screen导入结果

在screen列表中查看是否导入成功

原创粉丝点击