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

【ETCD】【实操篇(十九)】ETCD基准测试实战

目录

      • 1. 设定性能基准要求
      • 2. 使用基准测试工具
        • 基准测试命令
      • 3. 测试不同的负载和场景
      • 4. 监控集群性能
      • 5. 评估硬件和网络的影响
      • 6. 对比性能基准
      • 7. 负载均衡和容错能力测试
      • 8. 优化与调优
      • 9. 测试在高负载下的表现
      • 总结

在这里插入图片描述

1. 设定性能基准要求

首先,明确集群性能的目标,例如:

  • 期望的吞吐量(QPS,查询每秒)和延迟(Latency)。
  • 集群能处理的请求数和负载容量。
  • 集群对读写操作的响应时间要求。

2. 使用基准测试工具

etcd 提供了基准测试工具,可以用来测试集群在不同负载下的表现。常用的测试项包括:

  • 写入性能(QPS和延迟)
  • 读取性能(线性化读取与可序列化读取的QPS和延迟)
基准测试命令

使用 etcd 附带的基准测试工具对集群进行测试。根据你设定的目标,测试不同负载下的性能。

例如:

  • 测试写入性能:
    benchmark --endpoints=192.168.188.108:2384 --target-leader --conns=100 --clients=1000    put --key-size=8 --sequential-keys --total=10000 --val-size=256
    
    从主节点写,每秒约7173次。
    在这里插入图片描述
    向所有节点写,每秒13940
    在这里插入图片描述
1. benchmark
这是执行 etcd 性能基准测试的命令。它是 etcd 自带的一个工具,用于测试 etcd 集群的性能,主要评估集群的吞吐量(QPS)和延迟。

2. --endpoints=192.168.188.108:2384
指定了 etcd 集群的端点地址和端口。此参数告诉 benchmark 工具连接到哪个 etcd 实例进行性能测试。

192.168.188.108 是 etcd 节点的 IP 地址。
2384 是 etcd 的客户端访问端口。默认情况下,etcd 使用 2379 端口,但在此命令中使用了 2384。
3. --target-leader
此参数指定性能测试将发送到 etcd 集群中的领导节点。Raft 共识算法要求所有的写操作都必须由领导节点进行,因此该参数指定将所有请求发送给当前的领导节点。

如果不使用该参数,可能会将请求分发到集群中的任何节点,而不只是领导节点。
4. --conns=100
指定了与 etcd 节点的连接数。在性能测试中,模拟多个客户端连接到 etcd 集群进行操作。

这里设置了 100 个并发连接,每个连接都可以进行独立的请求,模拟了高并发的情况。
5. --clients=1000
指定了 benchmark 工具将模拟的客户端数量。每个客户端会向 etcd 集群发送请求。

在这里,设置了 1000 个客户端,意味着将有 1000 个并发的客户端向集群发送请求,这通常用于模拟高负载环境。
6. put
表示基准测试的操作类型是 put,即写入操作。该命令会在 etcd 集群中执行写入操作,向集群写入键值对。

7. --key-size=8
指定了写入请求中每个键的大小(以字节为单位)。在这个例子中,每个键的大小是 8 字节。

8. --sequential-keys
表示键是顺序生成的,而不是随机生成的。使用顺序键可以帮助测试写入操作的性能,因为顺序写入在某些存储系统中比随机写入效率更高。

例如,如果写入顺序是递增的,这可能比随机生成的键更加高效。
9. --total=10000
指定了要执行的总操作数。在此命令中,表示要执行 10,000 次 put 操作(即写入 10,000 个键值对)。

这个参数影响基准测试的持续时间和压力,操作数越多,测试的负载也越大。
10. --val-size=256
指定了每个写入请求中值的大小(以字节为单位)。在此命令中,值的大小是 256 字节。值的大小会直接影响写入操作的网络负载和磁盘 I/O,较大的值会增加操作的负载。
  • 测试读取性能:
    benchmark --endpoints=192.168.188.108:2384,192.168.188.108:2379,192.168.188.108:2383 --conns=100 --clients=1000  range k --consistency=l --total=10000
    
    测试线性读,每秒约57000次,
    在这里插入图片描述
    测试序列化读,每秒约 74074次。
    在这里插入图片描述

测试过程中记录并分析:

  • 写入 QPS:每秒钟处理多少个写入操作。
  • 读取 QPS:每秒钟处理多少个读取操作。
  • 延迟:每个请求的平均响应时间(通常是毫秒级)。
    官网的基准测试

3. 测试不同的负载和场景

不同的负载类型对性能的影响可能不同。你可以模拟以下几种典型负载:

  • 单客户端负载:测试一个客户端对集群的压力。
  • 并发客户端负载:测试多个客户端并发访问集群的情况。
  • 小批量请求和大批量请求:通过提交较小和较大的请求,评估集群的吞吐量和延迟。
  • 读取负载:模拟大量的读取请求,特别是使用线性化和可序列化读取的情况。

4. 监控集群性能

使用监控工具(例如 Prometheus 和 Grafana)实时监控 etcd 集群的性能指标,关键指标包括:

  • QPS:每秒查询数,衡量集群的吞吐量。
  • 延迟:请求的响应时间,通常关注 99 分位延迟(即大部分请求的延迟)。
  • 资源使用率:例如 CPU 使用率、内存使用率、磁盘 IO、网络带宽等。

例如,使用 etcd 的内建监控接口查看实时性能数据:

curl http://<etcd-node>:2379/metrics

5. 评估硬件和网络的影响

性能不仅仅与 etcd 配置相关,还与硬件和网络环境密切相关:

  • 硬件配置:确保 etcd 节点的硬件资源足够,特别是 CPU、内存和磁盘性能(尤其是 SSD 性能)。
  • 网络延迟:集群节点之间的网络延迟对性能影响很大。使用如 ping 等工具测试节点间的 RTT(往返时间),确保网络延迟较低。

6. 对比性能基准

将你的测试结果与 etcd 官方文档中的基准性能进行对比。通常,etcd 在大多数环境下应能满足以下性能标准:

  • 在轻负载情况下,3 节点集群可以在毫秒级别响应请求。
  • 在高负载下,集群仍能保持良好的吞吐量和低延迟(如每秒处理数万请求)。

7. 负载均衡和容错能力测试

  • 容错测试:模拟节点故障,检查 etcd 在节点失败时的恢复能力和性能。
  • 负载均衡:测试集群的负载均衡能力,特别是在多个客户端同时请求时,确保请求能够均匀分布到各个节点。

8. 优化与调优

如果性能不满足要求,可以通过以下方式进行调优:

  • 增添节点:增加更多节点来分担负载,改善吞吐量和容错能力。
  • 调整配置:例如调整 --max-request-bytes--heartbeat-interval--election-timeout 等参数来优化性能。
  • 硬件优化:更换更高性能的硬件(如更快的 SSD、增加内存、提高网络带宽等)。

9. 测试在高负载下的表现

确保集群能够在高负载下稳定运行。例如,模拟大规模的数据写入(如百万级别的键值对)和高并发请求,观察集群在极限条件下的性能表现。


总结

确认新创建的 etcd 集群性能是否满足要求的关键步骤包括:

  1. 设定明确的性能目标。
  2. 使用基准测试工具进行性能测试。
  3. 监控集群的实时性能数据。
  4. 测试不同负载和场景下的性能。
  5. 评估硬件和网络环境的影响。
  6. 根据测试结果进行调整和优化。

通过这些步骤,你可以确保 etcd 集群在实际生产环境中能够满足高可用、高吞吐量和低延迟的需求。


http://www.kler.cn/a/456635.html

相关文章:

  • 第 29 章 - ES 源码篇 - 网络 IO 模型及其实现概述
  • FPGA自学之路:到底有多崎岖?
  • uniapp 微信小程序开发使用高德地图、腾讯地图
  • Python 中的 with open:文件操作的最佳实践
  • 基于西湖大学强化学习课程的笔记
  • 【AIGC-ChatGPT职业提示词指令】智能职业规划助手:基于SVG可视化的职业发展指南系统
  • 【MySQL — 数据库基础】深入解析MySQL数据库操作:创建、使用、删除及字符集管理
  • jwt在express中token的加密解密实现方法
  • FastAPI vs Flask 专业对比与选择
  • 嵌入式单片机中IIC通信控制与实现
  • 全国青少年信息学奥林匹克竞赛(信奥赛)备考实战之循环结构(for循环语句)(三)
  • 欧科云链OKLink:比特币与以太坊“双重启动”将如何撬动市场?
  • 12.26【net】[review][day2]
  • 以太网(Ethernet)与互联网(Internet)
  • 【vue】vue运行报错“Error:listen EACCES:permission denied”
  • 如何写好一篇技术文档???
  • 远程控制macOS一直卡在100%,能连接上了却只显示了壁纸?
  • 20241218-信息安全理论与技术复习题
  • 服务器选择固态硬盘的好处是什么?
  • vulnhub靶场 Empire LupinOne
  • CSS---实现盒元素div内input/textarea的focus状态时给父元素加属性!
  • uniapp 前端解决精度丢失的问题 (后端返回分布式id)
  • 基于进程信号量的多线程同步机制研究与实现
  • Vue 3 与 Tauri 集成开发跨端APP
  • NLP 中文拼写检测纠正论文 Automatic-Corpus-Generation
  • ArcGIS Pro地形图四至角图经纬度标注与格网标注