etcd性能测试

news2025/3/30 15:40:46

etcd性能测试

本文参考官方文档完成etcd性能测试,提供etcd官方推荐的性能测试方案。

1. 理解性能:延迟与吞吐量

etcd 提供稳定、持续的高性能。有两个因素决定性能:延迟和吞吐量。延迟是完成一项操作所花费的时间。吞吐量是在某个时间段内完成的操作总数。通常情况下,当 etcd 接受并发的客户端请求时,随着整体吞吐量的增加,平均延迟也会上升。

etcd 使用 Raft 共识算法在成员之间复制请求并达成一致。共识性能,尤其是提交延迟,受到两个物理限制因素的制约:网络输入输出(IO)延迟和磁盘输入输出(IO)延迟。完成一个 etcd 请求的最短时间是成员之间的网络往返时间(RTT),再加上 fdatasync 将数据提交到永久存储所需的时间。数据中心内的往返时间可能长达几百微秒。在美国境内典型的往返时间约为 50 毫秒,而在各大洲之间可能慢至 400 毫秒。对于传统机械硬盘,典型的 fdatasync 延迟约为 10 毫秒。对于固态硬盘(SSD),延迟通常低于 1 毫秒。为了提高吞吐量,etcd 将多个请求成批处理,然后提交给 Raft 算法。这种批处理策略使得 etcd 即使在重负载情况下也能实现高吞吐量。

2. 基准测试

对 etcd 性能进行基准测试可以使用 etcd 自带的基准测试命令行工具来完成。
为了获取一些基准性能数据,我们考虑搭建一个由三个成员组成的 etcd 集群,其硬件配置如下:

  • Kubernetes v1.28.2,使用kubeadm部署;
  • 3 台机器,每台配置为 4 个虚拟 CPU + 8GB 内存 + 50GB 固态硬盘(虚拟,SCSI);机器使用VMware Workstation虚拟机。
  • 1 台(客户端)机器,配置为 4个虚拟 CPU + 16GB 内存 + 50GB 固态硬盘(虚拟,SCSI);
  • 操作系统为 Ubuntu 20.04;
  • etcd 版本为 3.5.9,Go 语言版本为 1.22.2;

说明

benchmark是etcd项目自带的压测工具,项目源码:https://github.com/etcd-io/etcd/tree/master/tools/benchmark

2.1 测试环境准备

benchmark安装

工具包括在etcd源码中,克隆仓库进行安装。这里将benchmark安装到测试的客户端机器中:

git clone https://github.com/etcd-io/etcd.git
cd etcd

# 安装
$ go install -v ./tools/benchmark

安装会将可执行文件放在 $GOPATH/bin 中。如果未设置GOPATH环境变量,则该工具将安装到 $HOME/go/bin 中。

etcd环境准备

这里使用k8s的etcd集群环境作为测试对象,etcd使用kubeadm自动部署。也可以自行部署etcd环境:

# etcd集群环境信息如下,此时leader节点为https://192.168.0.52:2379
root@master1:~# etcdctl endpoint status member list --cluster -w table
+---------------------------+------------------+---------+---------+-----------+------------+-----------+------------+--------------------+--------+
|         ENDPOINT          |        ID        | VERSION | DB SIZE | IS LEADER | IS LEARNER | RAFT TERM | RAFT INDEX | RAFT APPLIED INDEX | ERRORS |
+---------------------------+------------------+---------+---------+-----------+------------+-----------+------------+--------------------+--------+
| https://192.168.0.53:2379 |  94d50163269e24a |   3.5.9 |   47 MB |     false |      false |       140 |    2530830 |            2530830 |        |
| https://192.168.0.51:2379 | 520e81a36ed5d9f0 |   3.5.9 |   46 MB |     false |      false |       140 |    2530830 |            2530830 |        |
| https://192.168.0.52:2379 | 626555ae08021005 |   3.5.9 |   45 MB |      true |      false |       140 |    2530830 |            2530830 |        |
+---------------------------+------------------+---------+---------+-----------+------------+-----------+------------+--------------------+--------+

# etcd测试key
root@master1:~# etcdctl put testkey testvalue
OK
root@master1:~# etcdctl get testkey
testkey
testvalue
测试客户端配置

由于etcd使用https进行访问,这里配置benchmark连接使用https,将k8s相应证书目录拷贝到客户端机器下:

root@master1:/etc# ls /etc/kubernetes/
admin.conf  controller-manager.conf  kubelet.conf  manifests  pki  scheduler.conf  tmp

root@master1:/etc# scp -r kubernetes/ root@192.168.0.54:`pwd`
The authenticity of host '192.168.0.54 (192.168.0.54)' can't be established.
ED25519 key fingerprint is SHA256:4KsD0Oi0sAARWMDCznPaRK+rcgOB5lN8XmBWt0rFCcc.
This host key is known by the following other names/addresses:
    ~/.ssh/known_hosts:1: [hashed name]
    ~/.ssh/known_hosts:4: [hashed name]
    ~/.ssh/known_hosts:5: [hashed name]
Are you sure you want to continue connecting (yes/no/[fingerprint])? yes
Warning: Permanently added '192.168.0.54' (ED25519) to the list of known hosts.



# benchmark工具带证书路径运行即可
root@worker1:~# benchmark --endpoints=${HOST_1},${HOST_2},${HOST_3} --conns=1 --clients=1     range YOUR_KEY --consistency=l --total=10000 --cacert=/etc/kubernetes/pki/etcd/ca.crt --cert=/etc/kubernetes/pki/etcd/server.crt --key=/etc/kubernetes/pki/etcd/server.key

# 配置命令别名
root@worker1:~# alias benchmark="benchmark --cacert=/etc/kubernetes/pki/etcd/ca.crt --cert=/etc/kubernetes/pki/etcd/server.crt --key=/etc/kubernetes/pki/etcd/server.key"

# 设置host地址
root@worker1:~# HOST_3=https://192.168.0.53:2379
root@worker1:~# HOST_2=https://192.168.0.52:2379
root@worker1:~# HOST_1=https://192.168.0.51:2379

2.2 etcd读性能

线性化(Linearizable)读请求会经过集群成员中的法定人数成员以达成一致性,从而获取最新的数据。可序列化(Serializable)读请求比线性化读请求的开销更低,因为可序列化读请求由任何单个 etcd 成员来处理,而无需大部分节点的参与,其代价是可能会返回过期的数据。

使用的性能测试命令如下:

# 单连接线性化读请求
benchmark --endpoints=${HOST_1},${HOST_2},${HOST_3} --conns=1 --clients=1 range testkey --consistency=l --total=10000

# 单连接可序列化读请求
benchmark --endpoints=${HOST_1},${HOST_2},${HOST_3} --conns=1 --clients=1 range testkey --consistency=s --total=10000

# 多连接并发线性化读请求
benchmark --endpoints=${HOST_1},${HOST_2},${HOST_3} --conns=100 --clients=1000 range testkey --consistency=l --total=100000
    
# 多连接并发可序列化读请求
benchmark --endpoints=${HOST_1},${HOST_2},${HOST_3} --conns=100 --clients=1000 range testkey --consistency=s --total=100000

etcd读性能测试数据如下:

请求数量Key的大小(字节)Value的大小(字节)连接数客户端数量一致性(Consistency)平均读QPS请求平均延迟
10,000825611Linearizable2184.6ms
10,000825611Serializable5731.7ms
100,00082561001000Linearizable2430403ms
100,00082561001000Serializable4374216ms

2.3 etcd写性能

etcd写性能使用的性能测试命令如下:

# 向etcd集群的leader发起写请求,单连接。备注:${HOST_2}为集群的leader,见上面查询结果
benchmark --endpoints=${HOST_2} --target-leader --conns=1 --clients=1 put --key-size=8 --sequential-keys --total=10000 --val-size=256
# 向etcd集群的leader发起写请求,多连接
benchmark --endpoints=${HOST_2} --target-leader  --conns=100 --clients=1000 put --key-size=8 --sequential-keys --total=100000 --val-size=256

# 向etcd集群所有成员发起写请求,多连接
benchmark --endpoints=${HOST_2},${HOST_2},${HOST_3} --conns=100 --clients=1000 put --key-size=8 --sequential-keys --total=100000 --val-size=256

在这种配置下,etcd 写入性能测试数据:

key的数量Key的大小(字节)Value的大小(字节)连接数客户端数量请求的etcd目标服务器平均写QPS请求平均延迟内存消耗(Average server RSS)
10,000825611只请求leader节点2543.9msxx MB
100,00082561001000只请求leader节点1695306msxx MB
100,00082561001000请求所有节点1507283msxx MB

建议在新环境中首次设置 etcd 集群时运行基准测试,以确保该集群达到足够的性能;集群的延迟和吞吐量可能会因细微的环境差异而受到影响,例如将etcd和其他高I/O的应用程序部署到同一个节点上,将严重影响etcd的读写效率,甚至影响etcd集群的稳定性。

3. 参考资料

etcd performance:https://etcd.io/docs/v3.6/op-guide/performance/#benchmarks

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

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

相关文章

ubuntu桌面图标异常——主目录下的所有文件(如文档、下载等)全部显示在桌面

ubuntu桌面图标异常 问题现象问题根源系统级解决方案方法一:全局修改(推荐多用户环境)方法二:单用户修改(推荐个人环境)操作验证与调试避坑指南扩展知识参考文档问题现象 主目录文件异常显示 用户主目录(如/home/user/)下的所有文件(如文档、下载等)全部显示在桌面,…

sql结尾加刷题

找了一下mysql对extractvalue()、updatexml()函数的官方介绍https://dev.mysql.com/doc/refman/5.7/en/xml-functions.html#function_extractvalue ExtractValue(xml_frag, xpath_expr) 知识点 解释一下这两个参数xml_frag,是xml标记片段,第二个参数…

Linux学习笔记(应用篇三)

基于I.MX6ULL-MINI开发板 LED学习GPIO应用编程输入设备 开发板中所有的设备(对象)都会在/sys/devices 体现出来,是 sysfs 文件系统中最重要的目录结构 /sys下的子目录说明/sys/devices这是系统中所有设备存放的目录,也就是系统中…

【redis】事务详解,相关命令multi、exec、discard 与 watch 的原理

文章目录 什么是事务原子性一致性持久性隔离性 优势与 MySQL 对比用处 事务相关命令开启事务——MULTI执行事务——EXEC放弃当前事务——DISCARD监控某个 key——WATCH作用场景使用方法实现原理 事务总结 什么是事务 MySQL 事务: 原子性:把多个操作&am…

数据库基础知识点(系列七)

视图和索引相关的语句 1.引入视图的主要目的是什么? 答:数据库的基本表是按照数据库设计人员的观点设计的,并不一定符合用户的需求。SQL Server 2008可以根据用户需求重新定义表的数据结构,这种数据结构就是视图。视图是关系数据…

3.3 Taylor公式

1.定义 1.1 taylor公式 1.2 麦克劳林公式 1.3 推论 1.4 拉格朗日余项和皮亚诺型余项 2. 例题 3.几种特殊函数的麦克劳林展开

2000-2019年各省地方财政行政事业性收费收入数据

2000-2019年各省地方财政行政事业性收费收入数据 1、时间:2000-2019年 2、来源:国家统计局、统计年鉴 3、指标:行政区划代码、地区、年份、地方财政行政事业性收费收入 4、范围:31省 5、指标说明:地方财政行政事业…

Ftrans飞驰云联受邀参加“2025汽车零部件CIO年会“并荣获智象奖

2025年3月6日,由栖观汽车、栖观资讯和飞羽商务主办的“2025第二届中国汽车&零部件CIO年会暨智象奖颁奖盛典”于上海盛大召开,Ftrans飞驰云联作为国内领先的企业文件传输与数据交换解决方案提供商,受邀出席了年会,并凭借卓越的…

oracle查询归档日志使用量

1.统计最近30天的数据 SELECT TRUNC(first_time, DD) "日期", SUM(blocks * block_size) / 1024 / 1024 / 1024 "大小(GB)" FROM v$archived_log WHERE first_time > SYSDATE - 30 -- 统计最近30天的数据 GROUP BY TRUNC(first_time, DD) ORDER BY 1 D…

2025-03-26 学习记录--C/C++-PTA 6-3 求链式表的表长

合抱之木,生于毫末;九层之台,起于累土;千里之行,始于足下。💪🏻 一、题目描述 ⭐️ 6-3 求链式表的表长 本题要求实现一个函数,求链式表的表长。 函数接口定义: &…

PHP框架 ThinkPHP 漏洞探测分析

目录 1. PHP历史利用最多的漏洞有哪些? 2. 如何在信息收集的过程中收到框架信息?有什么根据? 3. ThinkPHP框架漏洞扫描有哪些工具?红队攻击有哪些方式? 漏洞扫描工具 红队攻击方式 4. TPscan工具的主要作用及实际…

SylixOS 中 select 原理及使用分析

1、select接口简介 1.1 select接口使用用例 select 是操作系统多路 I/O 复用技术实现的方式之一。 select 函数允许程序监视多个文件描述符,等待所监视的一个或者多个文件描述符变为“准备好”的状态。所谓的”准备好“状态是指:文件描述符不再是阻塞状…

软考笔记——软件工程基础知识

第五章节——软件工程基础知识 软件工程基础知识 第五章节——软件工程基础知识一、软件工程概述1. 计算机软件2. 软件工程基本原理3. 软件生命周期4. 软件过程 二、软件过程模型1. 瀑布模型2. 增量模型3. 演化模型(原型模型、螺旋模型)4. 喷泉模型5. 基于构建的开发…

FastGPT原理分析-数据集创建第二步:处理任务的执行

概述 文章《FastGPT原理分析-数据集创建第一步》已经分析了数据集创建的第一步:文件上传和预处理的实现逻辑。本文介绍文件上传后,数据处理任务的具体实现逻辑。 数据集创建总体实现步骤 从上文可知数据集创建总体上来说分为两大步骤: &a…

STM32学习笔记之存储器映射(原理篇)

📢:如果你也对机器人、人工智能感兴趣,看来我们志同道合✨ 📢:不妨浏览一下我的博客主页【https://blog.csdn.net/weixin_51244852】 📢:文章若有幸对你有帮助,可点赞 👍…

如何通过数据可视化提升管理效率

通过数据可视化提升管理效率的核心方法包括清晰展示关键指标、及时发现和解决问题、支持决策优化。其中,清晰展示关键指标尤为重要。通过数据可视化工具直观地呈现关键绩效指标(KPI),管理者能快速、准确地理解业务现状&#xff0c…

数据结构:利用递推式计算next表

next 表是 KMP 算法的核心内容,下面介绍一种计算 next 表的方法:利用递推式计算 如图 6.3.1 所示,在某一趟匹配中,当对比到最后一个字符的时候,发现匹配失败(s[i] ≠ t[j])。根据 BF 算法&…

每日算法-250326

83. 删除排序链表中的重复元素 题目描述 思路 使用快慢指针遍历排序链表。slow 指针指向当前不重复序列的最后一个节点,fast 指针用于向前遍历探索。当 fast 找到一个与 slow 指向的节点值不同的新节点时,就将 slow 的 next 指向 fast,然后 …

trino查询mysql报Unknown or incorrect time zone: ‘Asia/Shanghai‘

问题 trino查询mysql时报Error listing schemas for catalog mysql: java.sql.SQLNonTransientConnectionException: Could not create connection to database server. Attempted reconnect 3 times. Giving up.,trino的日志中看到Unknown or incorrect time zone…