当前位置: 首页 > news >正文

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

目录

前言

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层的简单压力测试,帮助用户初步了解集群的性能状况。

相关文章:

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

目录 前言 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…...

生态位模型降重创新专题系列【2025

本内容旨在丰富最大熵模型的分析内容,并针对目前文章存在的问题:(1)分析内容单一,重复度高和查重率高,(2)建模流程过于简单,结果可信度评估方法过于单一等;推…...

LeetCode234. 回文链表(2024秋季每日一题 26)

给你一个单链表的头节点 head ,请你判断该链表是否为回文链表。如果是,返回 true ;否则,返回 false 。 示例 1: 输入:head [1,2,2,1] 输出:true 示例 2: 输入:hea…...

项目(石头剪刀布游戏双循环)

while (true) { #region 猜拳游戏主题逻辑 // 定义猜拳次数 int count 3; //定义用户赢得次数 int winCount 0;// 初始值为零表示用户一次没饿赢 int sysCou…...

Linux 进程3

进程地址空间 CPU读取数据都需要地址,在计算机中所有东西都是一种数据,包括我们的进程。 这是一个进程空间示意图,操作系统通过task_struct结构体链表来管理每一个进程,结构体里面有一个指针指向操作系统为进程开辟的一段空间&am…...

R语言机器学习遥感数据处理与模型空间预测技术及实际项目案例分析

随机森林作为一种集成学习方法,在处理复杂数据分析任务中特别是遥感数据分析中表现出色。通过构建大量的决策树并引入随机性,随机森林在降低模型方差和过拟合风险方面具有显著优势。在训练过程中,使用Bootstrap抽样生成不同的训练集&#xff…...

shell linux cut 切割字符串

shell linux 切割字符串 在Shell脚本中,可以使用内置的cut命令来切割字符串。cut命令主要有三个选项 -c、-f和-d,分别表示按字符、按字段和指定分隔符来切割字符串。 按字符切割: echo "Hello World" | cut -c 1-5 # 输出&#…...

golang学习笔记31——golang 怎么实现枚举

推荐学习文档 golang应用级os框架,欢迎stargolang应用级os框架使用案例,欢迎star案例:基于golang开发的一款超有个性的旅游计划app经历golang实战大纲golang优秀开发常用开源库汇总想学习更多golang知识,这里有免费的golang学习笔…...

fastadmin本地安装插件提示”请从官网渠道下载插件压缩包(code:2)(code:1)“

这个问题主要是在fastadmin中为了保证安全性,不让你进行本地的一个安装(离线安装) 解决办法就是去把相应的代码注释掉,把相应的权限开启。 具体步骤 1.在后台的application\config.php文件下; 将这个unknownsources的…...

STM32基础学习笔记-Timer定时器面试基础题5

第五章、TIMER 常见问题 1、基本概念:什么是定时器 ?作用 ?分类 ? 2、时基单元 ?组成 ?计数模式 ?溢出条件 ? 溢出时间计算 ? 3、systick原理 ?代码讲解 &…...

CSS06-元素显示模式、单行文字垂直居中

一、什么是元素显示模式 1-1、块级元素 1-2、行内元素 1-3、行内块元素 1-4、小结 二、元素显示模式转换 三、单行文字垂直居中 CSS 没有给我们提供文字垂直居中的代码,这里我们可以使用一个小技巧来实现。 解决方案: 让文字的行高等于盒子的高度,就可…...

【车联网安全】车端网络攻击及检测的框架/模型

参考标准: 《汽车数据安全管理若干规定(试行)》ISO/SAE 21434《道路车辆 网络安全工程》威胁分析和风险评估(TARA)ISO/DIS 24089R155法规的国标转换:《汽车整车信息安全技术要求》(UN R155&…...

58.【C语言】内存函数(memcpy函数)

目录 1.memcpy *简单使用 翻译: *模拟实现 注意事项: *例题 1.memcpy *简单使用 memcpy:memory copy cplusplus的介绍 点我跳转 翻译: 函数 memcpy void * memcpy ( void * destination, const void * source, size_t num ); 复制内存块 直接从source指向的位置复制num…...

rust一些通用编程的概念

rust一些通用编程的概念 官网文档数据类型 - Rust 程序设计语言 中文版 (rustwiki.org) 变量,数据类型,条件判断,循环 变量 rust中变量的可变性是值得注意的 例如: fn main(){let number 1;number 2;println!("the number is {}&quo…...

SpringBoot基础知识

谈一谈你对SpringBoot的理解,它有哪些特性(优点)? SpringBoot用来快速开发Spring应用的一个脚手架,其目的是用来简化新Spring应用的初始搭建以及开发过程。 优点: 简化配置:提供了很多内置的…...

ubuntu配置libtorch CPU版本

配置环境:Ubuntu 20.04Date:2024 / 08 1、下载最新版本的libtorch wget https://download.pytorch.org/libtorch/nightly/cpu/libtorch-shared-with-deps-latest.zip unzip libtorch-shared-with-deps-latest.zip2、创建一个C工程文件夹,目…...

Docker MySql 数据备份、恢复

docker-compose.yaml实例 version: 3.8 services:db:image: mysql:9.0.1environment:MYSQL_ROOT_PASSWORD: 123456MYSQL_DATABASE: dataMYSQL_USER: dataMYSQL_PASSWORD: 123456MYSQL_ROOT_HOST: % 1、备份 docker exec -it <容器名称> /usr/bin/mysqldump -u root -p12…...

django项目添加测试数据的三种方式

文章目录 自定义终端命令Faker添加模拟数据基于终端脚本来完成数据的添加编写python脚本编写shell脚本执行脚本需要权限使用shell命令来完成测试数据的添加 添加测试数据在工作中一共有三种方式&#xff1a; 可以根据django的manage.py指令进行[自定义终端命令]可以采用第三方…...

用Python提取PDF表格到Excel文件

在对PDF中的表格进行再利用时&#xff0c;除了直接将PDF文档转换为Excel文件&#xff0c;我们还可以提取PDF文档中的表格数据并写入Excel工作表。这样做可以避免一些不必要的文本和格式带来的干扰&#xff0c;获得更易于分析和处理的表格数据&#xff0c;并方便进行更多的格式设…...

Java基础|多线程:多线程分页拉取

前言&#xff1a; 通常我们都会遇到分页拉取的需求&#xff0c;比如与第三方系统同步数据&#xff0c;定时拉取全量数据做缓存&#xff0c;下面我们简单介绍下多线程分页写法 需求&#xff1a; 全量同步第三方系统数据&#xff0c;并在全部数据同步完后&#xff0c;统一做缓存…...

Android RecyclerView 实现 GridView ,并实现点击效果及方向位置的显示

效果图 一、引入 implementation com.github.CymChad:BaseRecyclerViewAdapterHelper:2.9.30 二、使用步骤 1.Adapter public class UnAdapter extends BaseQuickAdapter<UnBean.ResultBean, BaseViewHolder> {private int selectedPosition RecyclerView.NO_POSITIO…...

Centos中dnf和yum区别对比

dnf和yum是两种不同的包管理工具&#xff0c;它们各自具有独特的特点和优势&#xff0c;主要用于在Linux系统上安装、更新和卸载软件包。以下是dnf和yum之间的主要区别&#xff1a; 1. 依赖关系解决 dnf&#xff1a;dnf在处理依赖关系方面表现出更强的能力。它能够更高效地解…...

CVPT: Cross-Attention help Visual Prompt Tuning adapt visual task

论文汇总 当前的问题 图1:在VTAB-1k基准测试上&#xff0c;使用预训练的ViT-B/16模型&#xff0c;VPT和我们的CVPT之间的性能和Flops比较。我们将提示的数量分别设置为1、10、20、50,100,150,200。 如图1所示&#xff0c;当给出大量提示时&#xff0c;VPT显示了性能的显著下降…...

基于双向 LSTM 和 CRF 的序列标注模型

基于双向 LSTM 和 CRF 的序列标注模型 在自然语言处理中,序列标注是一项重要的任务,例如命名实体识别、词性标注等。本文将介绍如何使用 Keras 构建一个基于双向 LSTM 和 CRF 的序列标注模型。 一、引言 序列标注任务要求为输入序列中的每个元素分配一个标签。传统的方法可…...

为何美国与加拿大边界看似那么随意?

我们在《日本移民巴西超200万&#xff0c;会成第二个“巴勒斯坦”吗&#xff1f;》一文中探讨了日本移民巴西的历史&#xff0c;以及移民对巴西的风险与挑战。 今天我们来探讨美国与加拿大边界为什么那么随意,并整理了加拿大和美国的国界、省界、市界行政边界数据分享给大家&a…...

什么是触发器(Trigger)?触发器何时会被触发?

在数据库管理系统中&#xff0c;触发器是一种特殊的存储过程&#xff0c;它会在特定的表上执行插入、更新或删除操作时自动触发。 触发器的主要用途是维护数据的一致性和完整性&#xff0c;以及实现一些复杂的业务逻辑。 触发器何时会被触发&#xff1f; 触发器可以在以下几…...

一步一步优化一套生成式语言模型系统

以下是这套生成式语言模型解决任务的流程图概述&#xff1a; #mermaid-svg-keXg8yGoCyObKDtu {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg-keXg8yGoCyObKDtu .error-icon{fill:#552222;}#mermaid-svg-keXg8yGoCyO…...

Q必达任务脚本

文章目录 1.购买服务器地址2.部署教程3. 代码如下4. 如何联系我 1.购买服务器地址 服务器购买地址 https://t.aliyun.com/U/rUHk58 若失效&#xff0c;可用地址 https://www.aliyun.com/activity/wuying/dj?source5176.29345612&userCode49hts92d 2.部署教程 2024年最…...

问请问请问2312123213123

&#x1f4e2;博客主页&#xff1a;https://blog.csdn.net/2301_779549673 &#x1f4e2;欢迎点赞 &#x1f44d; 收藏 ⭐留言 &#x1f4dd; 如有错误敬请指正&#xff01; &#x1f4e2;本文由 JohnKi 原创&#xff0c;首发于 CSDN&#x1f649; &#x1f4e2;未来很长&#…...

Vue3:快速生成模板代码

目录 一.模板代码 1.提供基础结构 2.定义组件名称 3.初始化数据和方法 4.应用样式 5.提高开发效率 二.操作 1.点击右下角设置按钮选择代码片段 2.输入vue.json&#xff0c;打开vue.json文件 3.构造模板 4.模板代码 5.使用 6.效果 一.模板代码 Vue3快速生成模板代…...