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 |
+---------------------------+------------------+---------+---------+-----------+------------+-----------+------------+--------------------+--------+
|<

最低0.47元/天 解锁文章
440

被折叠的 条评论
为什么被折叠?



