在华为云上通过 Docker 容器部署 Elasticsearch 并进行性能评测
5. 使用 ab 工具对 Elasticsearch 进行评测
前言
随着数据量的不断增加,企业对高效搜索和数据分析的需求也在快速增长。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。以下是需要准备的内容:
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: 10Time taken for tests: 0.720 secondsComplete requests: 1000Failed requests: 1 (Connect: 0, Receive: 0, Length: 1, Exceptions: 0)Total transferred: 863001 bytesHTML transferred: 280001 bytesRequests 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] receivedConnection Times (ms) min mean[+/-sd] median maxConnect: 0 0 0.0 0 0Processing: 1 7 2.8 7 24Waiting: 1 7 2.7 7 24Total: 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: 100Time taken for tests: 1.628 secondsComplete requests: 5000Failed requests: 5 (Connect: 0, Receive: 0, Length: 5, Exceptions: 0)Total transferred: 4315005 bytesHTML transferred: 1400005 bytesRequests 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] receivedConnection Times (ms) min mean[+/-sd] median maxConnect: 0 0 0.2 0 2Processing: 1 32 18.3 30 100Waiting: 1 32 18.3 30 100Total: 1 32 18.3 30 100
分析:
· 在 100 并发请求下,Requests per second 达到 3070.79,说明系统在高并发场景下吞吐量显著提高。
· Time per request 增至 32 毫秒,说明在更高并发情况下,系统的响应时间有所增加,但仍在可接受范围内。
通过这种压力测试,可以了解 Elasticsearch 在不同并发请求下的性能表现,并为实际应用中的优化提供依据。
6. 总结
通过 Apache Benchmark 工具,您可以快速对 Elasticsearch 集群的查询性能进行压力测试。该工具简单易用,能够提供基本的吞吐量、延迟和失败请求等指标。它适用于对 HTTP 层的简单压力测试,帮助用户初步了解集群的性能状况。
评论