jmeter 叢集容器化部署
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 環境安裝
- 各個節點都需要安裝
- 使用 root 許可權登入 Centos,檢查是否可以更新 yum 包(sudo yum update)
- 解除安裝舊版(如果已安裝)
sudo yum remove docker docker-common docker-selinux docker-engine
- 安裝依賴軟體包,yum-util 提供 yum-config-manager 功能,其他的是 devicemapper 驅動依賴
sudo yum install -y yum-utils device-mapper-persistent-data lvm2
- 設定 yum 源
sudo yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo
- 直接安裝最新版的 docker
sudo yum install docker-ce
- 啟動並加入開機啟動
$ sudo systemctl start docker
$ sudo systemctl enable docker
- 各個節點檢查 docker 是否安裝成功
➜ ~ docker -v
Docker version 19.03.9
三、Rancher 安裝和配置
- 直接使用 docker 命令安裝(master 機器操作)
sudo docker run -d --restart=unless-stopped -p 8180:8080 rancher/server
- 安裝完成後,透過 master 主機啟動 Rancher 客戶端
http://127.0.1.1:8180
- 設定 Rancher 管理員賬號
進入 系統管理→訪問控制→local 中設定管理員賬號密碼。設定成功後重新登入
- 在 Rancher 中新增主機, 如下圖。且要完成對下方命令列的複製。複製成功後進入 master 機器
- 進入到 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
- 執行成功後,檢查 Rancher 客戶端,中的主機列表。是否包含已建立的主機(包含該主機,如下圖
- 再次進入新增主機頁面,新增從節點 127.0.1.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
- 執行以後在 Rancher 中檢查執行結果如下圖
- 此時兩個主機節點已部署完成,下面要在對應主機節點上部署對應主從 jmeter 容器
四、jmeter 叢集化部署映象構建
- 本地構建 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 .
- 構建 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 .
- 構建 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 .
- 至此三個映象已製作完成,透過檢視 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
- 將三個映象上傳至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 容器部署
- 新增 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
- 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
相關文章
- 容器化 | 在 KubeSphere 中部署 MySQL 叢集MySql
- 容器化 | 在 Kubernetes 上部署 RadonDB MySQL 叢集MySql
- 在 Azure 中部署 Kubernetes 容器叢集
- 容器化 | 在 K8s 上部署 RadonDB MySQL Operator 和叢集K8SMySql
- 容器化|自建 MySQL 叢集遷移到 KubernetesMySql
- Terraform部署容器服務Swarm叢集及WordPress應用ORMSwarm
- 部署分片叢集
- docker部署mysql叢集DockerMySql
- Docker部署ElasticSearch叢集DockerElasticsearch
- 管理 ES 叢集:集常見的叢集部署方式
- Redis Cluster叢集模式部署Redis模式
- 二、Linux部署RabbitMQ叢集LinuxMQ
- 使用docker部署hadoop叢集DockerHadoop
- [自動化]基於kolla的自動化部署ceph叢集
- redis叢集之主從複製叢集的原理和部署Redis
- 基於Ubuntu部署企業級kubernetes叢集---k8s叢集容部署UbuntuK8S
- Docker 容器搭建及 Redis 叢集原理DockerRedis
- Linux 叢集化Linux
- Redis Cluster叢集模式部署XRedis模式
- 拆除kubeadm部署的Kubernetes 叢集
- Kubernetes部署叢集Mysql服務MySql
- Windows Server上部署IoTdb 叢集WindowsServer
- 使用 Ansible 快速部署 HBase 叢集
- Linux部署hadoop2.7.7叢集LinuxHadoop
- CentOS部署ElasticSearch7.6.1叢集CentOSElasticsearch
- 在 Azure 上部署 Kubernetes 叢集
- 在kubernetes上部署consul叢集
- Redis 4.0叢集環境部署Redis
- CapitalOne - Artifactory高可用叢集的自動化部署實踐API
- redis叢集之分片叢集的原理和常用代理環境部署Redis
- Kubernetes(k8s)叢集部署(k8s企業級Docker容器集K8SDocker
- 【Linux合集】單機部署zk叢集Linux
- 【Redis叢集實戰】Redis Cluster 部署Redis
- KubeSphere 部署 Kafka 叢集實戰指南Kafka
- 將 .NET Aspire 部署到 Kubernetes 叢集
- 從零部署TiDB叢集TiDB
- TDengine 叢集 多機器docker 部署Docker
- 基於containerd 部署 kubernetes 1.28叢集AI