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

相關文章