828华为云征文 | 在华为云上通过Docker容器部署Elasticsearch并进行性能评测

news2025/7/19 14:58:44

目录

前言

1. 华为云X实例介绍及优势

1.1 柔性算力

1.2 vCPU和内存的灵活配比

1.3 成本效益与性能

2. 安装并运行 Docker

2.1 修改仓库配置文件

2.2 安装 Docker

2.3 启动 Docker

3. 使用Docker部署Elasticsearch

3.1 拉取Elasticsearch镜像

3.2 启动Elasticsearch容器

3.3 验证Elasticsearch

4. 安装Apache Benchmark (ab) 工具

5. 使用 ab 工具对 Elasticsearch 进行评测

5.1 运行 Elasticsearch 查询评测

5.2 查看评测结果

5.3 调整并发请求和请求数

6. 总结


前言

随着数据量的不断增加,企业对高效搜索和数据分析的需求也在快速增长。Elasticsearch作为一款分布式的全文搜索引擎,因其高性能和可扩展性,广泛应用于大数据场景。在本篇文章中,我将介绍如何在华为云上通过Docker容器化部署Elasticsearch,并通过工具对其进行性能评测。整篇文章将涵盖从环境准备、部署、到性能评测的详细步骤和代码示例,帮助读者在华为云上快速搭建一个高效的Elasticsearch系统。

1. 华为云X实例介绍及优势

在选择云服务平台时,计算资源的弹性和性价比是关键考虑因素。华为云X实例是为用户提供高性价比和灵活资源调配能力的云计算服务,特别适合计算密集型任务,如大数据处理、AI训练以及像Elasticsearch这样的分布式搜索引擎。

1.1 柔性算力

华为云X实例采用了柔性算力的设计理念。所谓柔性算力,即用户可以根据具体的业务需求,在计算能力、存储容量和带宽等资源之间进行灵活调配。这意味着,用户在运行Elasticsearch等应用时,可以根据数据增长或查询量的变化,动态调整资源,确保性能需求得到满足。

1.2 vCPU和内存的灵活配比

X实例允许用户灵活配置vCPU与内存的比例,从而根据不同负载场景进行优化。例如,在Elasticsearch集群中,索引和搜索任务的负载不同,可能需要更高的内存或计算能力。通过在X实例中调整vCPU与内存的配比,用户可以避免资源浪费,提高成本效益。

1.3 成本效益与性能

在高性价比方面,华为云X实例提供了更具竞争力的价格,特别是对于那些对资源需求波动较大的工作负载,如Elasticsearch的动态索引和查询工作。结合弹性扩展能力,用户可以在不牺牲性能的前提下,大幅降低运行成本。此外,X实例支持不同的计费模式,用户可以按需付费或选择包年包月等多种付费方式,从而进一步提升云上计算资源的利用效率。

近期华为云推出了优惠活动,X实例服务器的折扣力度非常大,性能与性价比兼具,特别适合开发者进行各种项目部署和测试,欢迎大家抓住机会体验。

2. 安装并运行 Docker

在开始部署之前,确保您已经在华为云上创建了一个X实例服务器,并安装了Docker。以下是需要准备的内容:

配置项

详细信息

操作系统

Huawei Cloud EulerOS 2.0

实例配置

4核CPU,12GB内存,100GB SSD

Elasticsearch版本

7.16.2

Docker版本

20.10及以上

2.1 修改仓库配置文件

如果在添加 Docker 仓库时出现错误,需手动下载并修改仓库文件。执行以下命令下载仓库文件:

wget https://repo.huaweicloud.com/docker-ce/linux/centos/docker-ce.repo -P /usr/local/docker

打开文件并将 $releasever 替换为 7:

vi /usr/local/docker/docker-ce.repo
:%s/\$releasever/7/g

重新添加仓库:

yum-config-manager --add-repo /usr/local/docker/docker-ce.repo

2.2 安装 Docker

安装 Docker 及相关组件:

yum install -y docker-ce docker-ce-cli containerd.io

2.3 启动 Docker

安装完成后,启动 Docker 服务:

systemctl start docker

使用以下命令确认 Docker 正常运行:

systemctl status docker

3. 使用Docker部署Elasticsearch

部署Elasticsearch的方式有很多种,使用Docker可以方便地管理其容器化进程,并快速扩展。接下来我们将拉取Elasticsearch镜像,并通过Docker启动容器。

3.1 拉取Elasticsearch镜像

执行以下命令从Docker Hub上获取Elasticsearch官方镜像:

docker pull elasticsearch:7.16.2

3.2 启动Elasticsearch容器

在启动容器之前,我们可以通过指定一些环境变量来配置Elasticsearch。以下是一个启动Elasticsearch的命令示例:

docker run -d --name elasticsearch \
 -p 9200:9200 -p 9300:9300 \
 -e "discovery.type=single-node" \
 -e "ES_JAVA_OPTS=-Xms4g -Xmx4g" \
 -v es_data:/usr/share/elasticsearch/data \
elasticsearch:7.16.2

上述命令解释:

  • -p 9200:9200:将主机的9200端口映射到容器的9200端口(用于HTTP访问)。
  • -p 9300:9300:将主机的9300端口映射到容器的9300端口(用于集群通信)。
  • -e "discovery.type=single-node":指定Elasticsearch为单节点模式。
  • -e "ES_JAVA_OPTS=-Xms4g -Xmx4g":设置JVM内存分配为4GB。
  • -v es_data:/usr/share/elasticsearch/data:将Elasticsearch的数据存储映射到Docker卷es_data中。

启动后,您可以通过以下命令查看容器状态:

docker ps

如果Elasticsearch启动成功,您应该能够看到容器在运行。

CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 2f11d1ece355 elasticsearch:7.16.2 "/bin/tini -- /usr/l…" 3 days ago Up 3 days 0.0.0.0:9200->9200/tcp, :::9200->9200/tcp, 0.0.0.0:9300->9300/tcp, :::9300->9300/tcp elasticsearch

3.3 验证Elasticsearch

您可以通过浏览器或curl命令访问Elasticsearch的REST API接口,验证其是否正常启动:

curl -X GET "localhost:9200/"

如果部署成功,您将得到类似以下的JSON响应:

{
 "name" : "2f11d1ece355",
 "cluster_name" : "docker-cluster",
 "cluster_uuid" : "ztjMH9OAQaKDErlBVHpgpg",
 "version" : {
   "number" : "7.16.2",
   "build_flavor" : "default",
   "build_type" : "docker",
   "build_hash" : "2b937c44140b6559905130a8650c64dbd0879cfb",
   "build_date" : "2021-12-18T19:42:46.604893745Z",
   "build_snapshot" : false,
   "lucene_version" : "8.10.1",
   "minimum_wire_compatibility_version" : "6.8.0",
   "minimum_index_compatibility_version" : "6.0.0-beta1"
},
 "tagline" : "You Know, for Search"
}

4. 安装Apache Benchmark (ab) 工具

Apache Benchmark(简称ab)是Apache HTTP Server附带的一个命令行工具,常用于对HTTP服务的性能进行测试。由于Elasticsearch的REST API是基于HTTP协议的,因此可以使用ab工具对其进行简单的压力测试。

大多数Linux系统自带ab工具,如果没有安装Apache,可以通过以下命令安装:

sudo yum install httpd-tools

安装完成后,可以通过以下命令验证ab是否安装成功:

ab -V

如果返回版本号,则表示安装成功。

5. 使用 ab 工具对 Elasticsearch 进行评测

ab (Apache Benchmark) 工具通过向指定 URL 发送多个 HTTP 请求,统计响应时间、吞吐量等性能指标,帮助评估服务器的性能。对于 Elasticsearch 集群,可以使用 ab 工具测试查询请求的性能,如数据检索的响应时间和吞吐量等。

5.1 运行 Elasticsearch 查询评测

以下是使用 ab 工具对 Elasticsearch 进行查询性能评测的步骤:

确定查询 URL 先确定需要测试的 Elasticsearch 查询请求。假设 Elasticsearch 运行在 localhost:9200,并且索引为 blog01,可以使用以下命令执行简单的搜索请求:

curl -XGET http://localhost:9200/blog01/article/1?pretty

这将返回 id 字段为 1 的文章数据。

运行 ab 测试 使用 ab 工具对上述 URL 进行压力测试,模拟多个并发查询请求。例如,以下命令发出 1000 个请求,允许最多 10 个并发请求:

ab -n 1000 -c 10 http://localhost:9200/blog01/article/_search?q=id:1

参数说明:

  • -n 1000:总共发出 1000 个 HTTP 请求。
  • -c 10:最多允许 10 个并发请求。

5.2 查看评测结果

ab 工具的评测结果包括以下关键指标:

  • Requests per second:每秒处理的请求数,即吞吐量。
  • Time per request:每个请求的平均处理时间(延迟)。
  • Transfer rate:数据传输速度。

示例输出如下:

Concurrency Level:     10
Time taken for tests:   0.720 seconds
Complete requests:     1000
Failed requests:       1
  (Connect: 0, Receive: 0, Length: 1, Exceptions: 0)
Total transferred:     863001 bytes
HTML transferred:       280001 bytes
Requests per second:   1389.56 [#/sec] (mean)
Time per request:       7.197 [ms] (mean)
Time per request:       0.720 [ms] (mean, across all concurrent requests)
Transfer rate:         1171.09 [Kbytes/sec] received
​
Connection Times (ms)
            min mean[+/-sd] median   max
Connect:       0   0   0.0     0       0
Processing:     1   7   2.8     7     24
Waiting:       1   7   2.7     7     24
Total:         1   7   2.8     7     24

分析

  • Requests per second (1389.56) 表示 Elasticsearch 服务器每秒处理约 1390 个请求,说明在 10 个并发请求下,系统的吞吐量较高。
  • Time per request (7.197 ms) 表示平均每个请求处理时间约为 7 毫秒,说明延迟较低,系统能快速响应。
  • Failed requests (1) 表示在 1000 次请求中只有 1 次失败,服务器在高并发下的稳定性较好。

5.3 调整并发请求和请求数

可以通过调整 -n 和 -c 参数,测试不同规模的压力场景。比如,以下命令模拟 100 个并发请求,共发出 5000 个请求:

ab -n 5000 -c 100 http://localhost:9200/blog01/article/_search?q=id:1

输出示例如下:

Concurrency Level:     100
Time taken for tests:   1.628 seconds
Complete requests:     5000
Failed requests:       5
  (Connect: 0, Receive: 0, Length: 5, Exceptions: 0)
Total transferred:     4315005 bytes
HTML transferred:       1400005 bytes
Requests per second:   3070.79 [#/sec] (mean)
Time per request:       32.565 [ms] (mean)
Time per request:       0.326 [ms] (mean, across all concurrent requests)
Transfer rate:         2587.99 [Kbytes/sec] received
​
Connection Times (ms)
            min mean[+/-sd] median   max
Connect:       0   0   0.2     0       2
Processing:     1   32 18.3     30     100
Waiting:       1   32 18.3     30     100
Total:         1   32 18.3     30     100

分析

  • 在 100 并发请求下,Requests per second 达到 3070.79,说明系统在高并发场景下吞吐量显著提高。
  • Time per request 增至 32 毫秒,说明在更高并发情况下,系统的响应时间有所增加,但仍在可接受范围内。

通过这种压力测试,可以了解 Elasticsearch 在不同并发请求下的性能表现,并为实际应用中的优化提供依据。

6. 总结

通过Apache Benchmark工具,您可以快速对Elasticsearch集群的查询性能进行压力测试。该工具简单易用,能够提供基本的吞吐量、延迟和失败请求等指标。它适用于对HTTP层的简单压力测试,帮助用户初步了解集群的性能状况。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2162591.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

SpringBoot整合ELK实现日志监控(保姆级教程)

新建SpringBoot项目 pom依赖 <?xml version"1.0" encoding"UTF-8"?> <project xmlns"http://maven.apache.org/POM/4.0.0" xmlns:xsi"http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation"http://maven.…

[单master节点k8s部署]24.构建EFK日志收集平台(三)

Kibana Kibana是elasticsearch的可视化界面。 首先创建kibana的服务&#xff0c;yaml文件如下。k8s里的服务分为四种&#xff0c;clusterIP为仅仅为pod分配k8s集群内部的一个虚拟ip&#xff0c;用于集群内的pod通信&#xff0c;而不对外暴露。elasticsearch的服务就是cluster…

Redis 优化

目录 优雅的 key 删除 Bigkey 恰当的数据类型 批处理优化 Pipeline 集群下的批处理 服务端优化 持久化配置 慢查询 命令以及安全配置 内存安全和配置 内存缓冲区配置 集群最佳实践 集群带宽问题 集群还是主从 优雅的 key 删除 Bigkey Bigkey 内存占用较多&…

线程池和JUC

1. 线程池 1.1 线程状态介绍 当线程被创建并启动以后&#xff0c;它既不是一启动就进入了执行状态&#xff0c;也不是一直处于执行状态。线程对象在不同的时期有不同的状态。那么Java中的线程存在哪几种状态呢&#xff1f;Java中的线程 状态被定义在了java.lang.Thread.Stat…

微服务学习笔记之Docker

目录 认识Docker 安装Docker 安装yum工具 配置Docker的yum源 更新yum&#xff0c;建立缓存 安装Docker 启动并校验 配置镜像加速 Docker常见命令 命令 演示 给命令起别名 Docker数据卷 认识数据卷 数据卷常见命令 nginx的html目录挂载演示 数据卷挂载本地目录或…

强制类型转换

问题 最近在研读公司项目的时候发现一段很有意思的代码&#xff1a; if (a instanceof b) {B ent (B) a;if (!useGivenAuditAttributes) {ent.createdAt MyDateUtils.now();ent.createdBy AppContext.instance.loginUser.userId;ent.lastUpdatedAt ent.createdAt;ent.las…

如何把python(.py或.ipynb)文件打包成可运行的.exe文件?

将 Python 程序打包成可执行的 .exe 文件&#xff0c;通常使用工具如 PyInstaller。这是一个常用的 Python 打包工具&#xff0c;可以将 Python 程序打包成独立的可执行文件&#xff0c;即使没有安装 Python 也能运行。 步骤&#xff1a; 1. 安装 PyInstaller 使用 conda 安…

【shell脚本5】Shell脚本学习--条件控制

目录 条件判断&#xff1a;if语句 分支控制&#xff1a;case语句 条件判断&#xff1a;if语句 语法格式&#xff1a; if [ expression ] thenStatement(s) to be executed if expression is true fi 注意&#xff1a;expression 和方括号([ ])之间必须有空格&#xff0c;否…

centos7 配置 docker 国内镜像源

1.修改配置文件/etc/docker/daemon.json sudo vim /etc/docker/daemon.json2.增加或修改以下配置内容 {"registry-mirrors": ["https://dockerproxy.com","https://hub-mirror.c.163.com","https://mirror.baidubce.com","http…

谷歌浏览器如何更改下载文件存放的方式及其路径?

1、点击谷歌浏览器右上角的【三个点】 2、选择【设置】&#xff0c;再选择【下载内容】 3、打开【下载完成后显示下载内容】开关&#xff0c; 则&#xff1a;下载网页上的东西之后&#xff0c;会显示在【谷歌浏览器】的右侧&#xff0c;并显示具体下载文件在右侧&#xff1a;…

PR视频剪辑工具全指南:开启专业剪辑之旅

pr视频剪辑可以说是视频剪辑里的一把好手&#xff0c;就是如果你想在这方面深耕那还是掌握这个工具的使用比较方便。如果你只是刚入门&#xff0c;那也有不少可以快速帮你剪辑出片的工具。这次我介绍几款我用过的视频剪辑工具&#xff0c;助你开启视频剪辑大门。 1.福昕视频剪…

vue echarts tooltip动态绑定模板,并且处理vue事件绑定

先上代码&#xff1a; tooltip: {// 这里是车辆iconshow: true,// trigger: "item",// backgroundColor: "transparent",appendToBody: true,textStyle: {color: "#ffffff" //设置文字颜色},formatter: (params) > {const TruckTooltip Vue.…

Java-数据结构-排序(三) |ू・ω・` )

目录 ❄️一、归并排序&#xff1a; ☞ 基本思想&#xff1a; ☞ 代码&#xff1a; ☞ 归并排序的非递归方法&#xff1a; ❄️二、排序算法的分析&#xff1a; ❄️三、非基于比较的排序&#xff1a; ❄️总结&#xff1a; ❄️一、归并排序&#xff1a; ☞ 基本思想&#xf…

在一个.NET Core项目中使用RabbitMQ进行即时消息管理

为了在一个.NET Core项目中使用RabbitMQ进行即时消息管理&#xff0c;以下是详细的全程操作指南&#xff0c;包括安装、配置、编写代码和调试使用。 一、安装RabbitMQ 1. 安装Erlang RabbitMQ依赖Erlang&#xff0c;因此需要先安装Erlang。 Windows: 下载并运行Erlang安装…

人工智能-机器学习-深度学习-分类与算法梳理

目前人工智能的概念层出不穷&#xff0c;容易搞混&#xff0c;理清脉络&#xff0c;有益新知识入脑。 为便于梳理&#xff0c;本文只有提纲&#xff0c;且笔者准备仓促&#xff0c;敬请勘误&#xff0c;不甚感激。 请看右边目录索引 。 人工智能 三大派系 符号主义(Symbolists…

[附源码]宠物领养管理系统+SpringBoot

今天带来一款优秀的项目&#xff1a;宠物领养管理系统源码 。 系统采用的流行的前后端分离结构&#xff0c;内含功能包括"管理端"&#xff0c;“用户领养端”&#xff0c;“宠物管理”&#xff0c;“权限登录”等功能。 如果您有任何问题&#xff0c;也请联系小编&a…

keepalived+lvs集群

目录 一、环境 二、配置 1、master 1.在master上安装配置Keepalived 2.在master上修改配置文件 2、backup 1.在backup&#xff08;192.168.229.12&#xff09;上安装keepalived 2.在backup上修改配置文件 3、master和backup上启动服务 4、web服务器配置 1.web1和web…

使用Java基于GeoTools读取Shapefile矢量数据属性信息-以某市POI数据为例

前言 在之前的博客中&#xff0c;我们讲过在GDAL中如何读取空间数据的属性和数据信息&#xff0c;也简单的讲过如何在GeoTools中读取Shapefile文件的属性信息和数据信息。对于空间矢量数据库&#xff0c;就像我们传统的二维数据库的表字段和表数据的关系&#xff0c;在研究表数…

BERT训练之数据集处理(代码实现)

目录 1读取文件数据 2.生成下一句预测任务的数据 3.预测下一个句子 4.生成遮蔽语言模型任务的数据 5.从词元中得到遮掩的数据 6.将文本转化为预训练数据集 7.封装函数类 8.调用 import os import random import torch import dltools 1读取文件数据 def _read_wiki(data_d…

Java框架学习(Spring)(ioc)(01)

简介&#xff1a;以本片记录在尚硅谷学习ssm-spring-ioc时遇到的小知识 详情移步&#xff1a;想参考的朋友建议全部打开相互配合学习&#xff01; 视频&#xff1a; 014-spring-框架概念理解_哔哩哔哩_bilibilihttps://www.bilibili.com/video/BV1AP411s7D7?p14&vd_sou…