jmeter 叢集容器化部署

NathanWang發表於2020-05-29

jmeter叢集容器化部署

核心思路

部署一個多機器節點多叢集的jmeter,為了防止單臺節點導致試壓機器壓力不足
CSDN上已有相關部署文件,但是有些依賴異常導致部署後無法使用,且部分模組版本過低
本次部署jmeter版本為最新5.3版

一、機器準備

兩臺機器CentOS(機器IP為example,非真實機器,需要自己修改即可)
CentOS核心版本應在4以上,檢查命令:

  ~ cat /etc/redhat-release
CentOS Linux release 7.8.2003 (Core)

master 127.0.1.1
slave 127.0.1.2
部署一個多機器節點(本位以兩個節點為例)多叢集的jmeter

二、docker環境安裝

  1. 各個節點都需要安裝
  2. 使用 root 許可權登入 Centos,檢查是否可以更新yum包(sudo yum update)
  3. 解除安裝舊版(如果已安裝)
sudo yum remove docker  docker-common docker-selinux docker-engine
  1. 安裝依賴軟體包,yum-util 提供yum-config-manager功能,其他的是devicemapper驅動依賴
sudo yum install -y yum-utils device-mapper-persistent-data lvm2
  1. 設定yum源
sudo yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo
  1. 直接安裝最新版的docker
sudo yum install docker-ce
  1. 啟動並加入開機啟動
$ sudo systemctl start docker
$ sudo systemctl enable docker
  1. 各個節點檢查docker是否安裝成功
  ~ docker -v
Docker version 19.03.9

三、Rancher安裝和配置

  1. 直接使用docker命令安裝(master機器操作)
sudo docker run -d --restart=unless-stopped -p 8180:8080 rancher/server
  1. 安裝完成後,通過master主機啟動Rancher客戶端
http://127.0.1.1:8180
  1. 設定Rancher管理員賬號

進入 系統管理→訪問控制→local中設定管理員賬號密碼。設定成功後重新登入

  1. 在Rancher中新增主機, 如下圖。且要完成對下方命令列的複製。複製成功後進入master機器
  2. 進入到master機器操作,將該命令複製執行
sudo docker run -e CATTLE_HOST_LABELS='host.ip=127.0.1.1&io.rancher.host.os=linux&io.rancher.host.name=master'  --rm --privileged -v /var/run/docker.sock:/var/run/docker.sock -v /var/lib/rancher:/var/lib/rancher rancher/agent:v1.2.11 http://127.0.1.1:8180/v1/scripts/2862B95A38DD0CB90DFA:1577750400000:8oKSAkvBHUESvpGuDYDXn0RDPk
  1. 執行成功後,檢查Rancher客戶端,中的主機列表。是否包含已建立的主機(包含該主機,如下圖

  1. 再次進入新增主機頁面,新增從節點127.0.1.2
  2. 在從節點127.0.1.2中執行以下shell
sudo docker run -e CATTLE_HOST_LABELS='host.ip=127.0.1.2&io.rancher.host.os=linux'  --rm --privileged -v /var/run/docker.sock:/var/run/docker.sock -v /var/lib/rancher:/var/lib/rancher rancher/agent:v1.2.11 http://127.0.1.2:8180/v1/scripts/2862B95A38DD0CB90DFA:1577750400000:8oKSAkvBHUESvpGuDYDXn0RDPk
  1. 執行以後在Rancher中檢查執行結果如下圖
  2. 此時兩個主機節點已部署完成,下面要在對應主機節點上部署對應主從jmeter容器

四、jmeter叢集化部署映象構建

  1. 本地構建jmeter-base映象, 首先建立Dockerfile, 對檔名就叫Dockerfile
FROM ubuntu

# Install wger & JRE
RUN apt-get clean && \
apt-get -y update && \
apt-get -qy install \
wget \
default-jre-headless \
telnet \
iputils-ping \
unzip \
openssh-client \
vim

# Install jmeter
RUN mkdir /jmeter \
&& cd /jmeter/ \
&& wget https://archive.apache.org/dist/jmeter/binaries/apache-jmeter-5.3.tgz \
&& tar -xzf apache-jmeter-5.3.tgz \
&& rm apache-jmeter-5.3.tgz \
&& mkdir /jmeter-plugins \
&& cd /jmeter-plugins/ \
&& wget https://jmeter-plugins.org/downloads/file/JMeterPlugins-ExtrasLibs-1.4.0.zip \
&& unzip -o JMeterPlugins-ExtrasLibs-1.4.0.zip -d /jmeter/apache-jmeter-5.3/ \
&& wget https://jmeter-plugins.org/files/packages/jpgc-perfmon-2.0.zip \
&& unzip -o jpgc-perfmon-2.0.zip -d /jmeter/apache-jmeter-5.3/ \
&& sed -i "s/#server.rmi.ssl.disable=false/server.rmi.ssl.disable=true/g" /jmeter/apache-jmeter-5.3/bin/jmeter.properties

# Set Jmeter Home
ENV JMETER_HOME /jmeter/apache-jmeter-5.3/
ENV TZ=Asia/Shanghai

# Add Jmeter to the Path
ENV PATH $JMETER_HOME/bin:$PATH

執行構建命令, 為什麼叫stone9903,因為dockerhub上註冊的賬戶名是這個。push上去的時候要帶上這個賬戶名

docker build -t stone9903/jmeter-base .
  1. 構建stone9903/jmeter-master,該映象建立過程中需要依賴stone9903/jmeter-base映象,在目錄下建立jmeter-master資料夾,並在改新建的資料夾下建立Dockerfile檔案
FROM stone9903/jmeter-base

# Ports to be exposed from the container for JMeter Master
EXPOSE 60000

執行構建命令

docker build -t stone9903/jmeter-master .
  1. 構建stone9903/jmeter-slave-ip映象,建立資料夾jmeter-slave-ip,在對應資料夾下建立Dockerfile,內容如下
FROM stone9903/jmeter-base
# Ports to be exposed from the container for JMeter Slaves/Server
EXPOSE 1099 50000
# Application to run on starting the container
ENTRYPOINT $JMETER_HOME/bin/jmeter-server \
-Dserver.rmi.localport=50000 \
-Dserver_port=1099 \
-Djava.rmi.server.hostname=${HOST_IP}

執行構建命令

docker build -t stone9903/jmeter-slave-ip .
  1. 至此三個映象已製作完成,通過檢視docker images命令檢視,結果如下:
  ~ docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
stone9903/jmeter-slave-ip latest e80e424087f4 30 hours ago 513MB
stone9903/jmeter-master latest 68f31dc952ec 30 hours ago 513MB
stone9903/jmeter-base latest 0ec278f91ce9 30 hours ago 513MB
  1. 將三個映象上傳至https://hub.docker.com/Rancher執行容器)(提供到下面
docker login 後輸入賬號密碼

docker push stone9903/jmeter-base
docker push stone9903/jmeter-master
docker push stone9903/jmeter-slave-ip

五、 jmeter master-slave容器部署

  1. 新增master節點jmeter應用,應用→新增應用,設定名稱jmeter-master

docker-compose.yml

version: '2'
services:
master:
privileged: true
image: stone9903/jmeter-master
environment:
TZ: Asia/Shanghai
stdin_open: true
network_mode: host
volumes:
- /opt/jmeter:/home/jmeter
- /usr/share/zoneinfo/:/usr/share/zoneinfo/
tty: true
ports:
- 60000:60000/tcp
labels:
io.rancher.scheduler.affinity:host_label: io.rancher.host.name=master
io.rancher.container.pull_image: always

注意:此處增加了共享資料夾對映,將宿主機/opt/jmeter資料夾對映到容器/home/jmeter中,且下方要增加privileged: true

​ 另外也增加了節點時區對映,防止容器時間顯示的不是東八區區時

​ 新增該對映的目的是為了是宿主機和容器機器能公用一個資料夾,這樣方便後續指令碼shell執行

rancher-compose.yml

version: '2'
services:
master:
scale: 1
start_on_create: true
  1. slave節點新增,同樣的 應用→新增應用 中操作

docker-compose.yml

version: '2'
services:
slave01:
privileged: true
image: stone9903/jmeter-slave-ip
environment:
HOST_IP: 127.0.1.2
TZ: Asia/Shanghai
stdin_open: true
volumes:
- /usr/share/zoneinfo/:/usr/share/zoneinfo/
tty: true
ports:
- 1099:1099/tcp
- 50000:50000/tcp
labels:
io.rancher.scheduler.affinity:host_label: host.ip=127.0.1.2
io.rancher.container.pull_image: always

rancher-compose.yml

version: '2'
services:
slave01:
scale: 1
start_on_create: true

注意,增加多節點的話,只需新增相同的slave節點即可,且,注意,上方slave01要改成02。對應hostip也要修改

檢視部署成功的節點

參考連結:https://yq.aliyun.com/articles/674961

相關文章