性能调优之 ETCD

2023-05-16


磁盘 IOPS 调整

etcd 对磁盘写入延迟非常敏感,通常需要 50 顺序写入 IOPS(例如: 7200RPM 磁盘)。对于负载较重的集群,建议使用 500 顺序写入 IOPS(例如,典型的本地 SSD 或高性能虚拟化块设备)。请注意,大多数云服务器或者云存储提供并发 IOPS 而不是顺序 IOPS,提供的并发 IOPS 可能比顺序 IOPS 大 10 倍。为了测量实际的顺序 IOPS,建议使用磁盘基准测试工具,如diskbench或fio。

常见磁盘平均物理寻道时间约为:

  • 7200 转/分的 STAT 硬盘平均物理寻道时间是 9ms;
  • 10000 转/分的 STAT 硬盘平均物理寻道时间是 6ms;
  • 15000 转/分的 SAS 硬盘平均物理寻道时间是 4ms;

常见硬盘的旋转延迟时间约为:

  • 7200 rpm 的磁盘平均旋转延迟大约为 60X1000/7200/2=4.17ms;
  • 10000 rpm 的磁盘平均旋转延迟大约为 60X1000/10000/2=3ms;
  • 15000 rpm 的磁盘其平均旋转延迟约为 60X1000/15000/2=2ms。

最大 IOPS 的理论计算方法:IOPS=1000ms/(寻道时间+旋转延迟),数据传输时间忽略不计。

  • 7200 rpm 的磁盘 IOPS=1000/(9+4.17)=76IOPS;
  • 10000 rpm 的磁盘 IOPS=1000/(6+3)=111IOPS;
  • 15000 rpm 的磁盘 IOPS=1000/(4+2)=166IOPS。

CPU 优先级调整

sudo renice -n -20 -P $(pgrep etcd)

其中 nice 值可以由用户指定,默认值为 0,root 用户的取值范围是[-20, 19],普通用户的值取值范围是[0, 19],数字越小,CPU 执行优先级越高。

磁盘 IO 优先级调整

由于 etcd 必须将数据持久保存到磁盘日志文件中,因此来自其他进程的磁盘活动可能会导致增加写入时间,结果可能会导致 etcd 请求超时和临时leader丢失。当给定高磁盘优先级时,etcd 服务可以稳定地与这些进程一起运行。

在 Linux 上,etcd 的磁盘优先级可以配置为 ionice:

sudo ionice -c2 -n0 -p $(pgrep etcd)

温馨提示 : 因为主机重启或者容器重启后,容器中进程的 PID 会发生变化,所以建议把以上命令放在系统的启动脚本中(比如 Ubuntu 的/etc/init.d/rc.local脚本中),并且把命令配置在 crontab 定时任务中。

空间配额大小调整

默认 ETCD 空间配额大小为 2G,超过 2G 将不再写入数据。通过给 ETCD 配置--quota-backend-bytes参数增大空间配额,最大支持 8G。

静态Pod yaml 文件中指定以下参数

services:
  etcd:
    # 开启自动备份
    backup_config:
      enabled: true # 设置true启用ETCD自动备份,设置false禁用;
      interval_hours: 12 # 快照创建间隔时间,不加此参数,默认5分钟;
      retention: 6 # etcd备份保留份数;
      ### S3配置选项
      s3backupconfig:
        access_key: "myaccesskey"
        secret_key: "myaccesssecret"
        bucket_name: "my-backup-bucket"
        folder: "folder-name" 
        endpoint: "s3.eu-west-1.amazonaws.com"
        region: "eu-west-1"
    snapshot: true
    creation: 5m0s
    retention: 24h
    # 修改空间配额为$((6*1024*1024*1024)),默认2G,最大8G
    extra_args:
      quota-backend-bytes: "6442450944"
      auto-compaction-retention: 240 #(单位小时)
  • 磁盘碎片整理

通过auto-compaction-retention对历史数据压缩后,后端数据库可能会出现内部碎片。内部碎片是指空闲状态的,能被后端使用但是仍然消耗存储空间,碎片整理过程将此存储空间释放回文件系统。

要对 etcd 进行碎片整理,需手动在 etcd 容器中执行以下命令:

etcdctl defrag

Finished defragmenting etcd member[127.0.0.1:2379]

网络优先级调整

如果有大量并发客户端请求 etcd leader 服务,则可能由于网络拥塞而延迟处理follower对等请求。在follower节点上的发送缓冲区错误消息:

dropped MsgProp to 247ae21ff9436b2d since streamMsg's sending buffer is full
dropped MsgAppResp to 247ae21ff9436b2d since streamMsg's sending buffer is full

可以通过在客户端提高 etcd 对等网络流量优先级来解决这些错误。在 Linux 上,可以使用流量控制机制对对等流量进行优先级排序(请根据实际情况修改接口名称):

NETWORK_INTERFACE=eth0

tc qdisc add dev ${NETWORK_INTERFACE} root handle 1: prio bands 3
tc filter add dev ${NETWORK_INTERFACE} parent 1: protocol ip prio 1 u32 match ip sport 2380 0xffff flowid 1:1
tc filter add dev ${NETWORK_INTERFACE} parent 1: protocol ip prio 1 u32 match ip dport 2380 0xffff flowid 1:1
tc filter add dev ${NETWORK_INTERFACE} parent 1: protocol ip prio 2 u32 match ip sport 2739 0xffff flowid 1:1
tc filter add dev ${NETWORK_INTERFACE} parent 1: protocol ip prio 2 u32 match ip dport 2739 0xffff flowid 1:1
            ---
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

性能调优之 ETCD 的相关文章

  • etcd重启

    k8s启动etcd数据库 在这个主机上面 systemctl stop etcd k8s lib systemd system etcd k8s service 修改配置new修改为existing xff0c 其他不改动并保存清理数据 r
  • ETCD 高可用集群 Centos7

    ETCD 高可用集群 在本地三台虚拟机以static方式搭建ETCD集群测试环境 xff0c 均为Centos7 一 准备工作 1 主机名及IP 主机名IPvm5192 168 56 10vm6192 168 56 11vm7192 168
  • k8s 1.15.0 外部etcd 服务状态异常member 5edae4a37f25086 has already been bootstrapped

    检查k8s1 15 0版本的外部etcd服务 xff0c 发现有etcd 2 提示connect refused 检查etcd 2所在节点etcd服务状态 systemctl status etcd service systemctl re
  • etcd概述

    本文主要介绍了 etcd 相关概念 xff0c 以及 etcd 的主要使用场景 1 介绍 etcd 是云原生架构中的基础组件 xff0c 由 CNCF 孵化托管 etcd 在微服务和 kubernetes 集群中不仅可以作为服务注册中心用于
  • Rancher RKE K8s 集群 etcd 恢复

    背景 在 Rancher 中基于 RKE 创建的 K8s 集群 xff0c 因为服务器磁盘故障 xff0c 导致 3个 master 节点有2个节点的 etcd 数据文件损坏 xff0c 导致整个集群不可用 etcd 三个节点集群时 xff
  • etcd查看集群信息

    查看集群服务端口地址列表 etcdctl endpoints 61 https 192 168 1 65 2379 ca file 61 etc kubernetes ssl ca pem cert file 61 etc etcd ssl
  • Etcd恢复报错:error listing data dir: /var/lib/etcd/default.etcd

    通过systemd托管的etcd数据备份还原无法启动服务并且报错 error listing data dir var lib etcd default etcd 但是单独执行启动命令可以 usr bin etcd debug name d
  • k8s docker集群搭建

    一 Kubernetes系列之介绍篇 Kubernetes介绍 1 背景介绍 云计算飞速发展 IaaS PaaS SaaS Docker技术突飞猛进 一次构建 到处运行 容器的快速轻量 完整的生态环境 2 什么是kubernetes 首先
  • etcd学习和实战:4、Java使用etcd实现服务发现和管理

    etcd学习和实战 4 Java使用etcd实现服务发现和管理 文章目录 etcd学习和实战 4 Java使用etcd实现服务发现和管理 1 前言 2 代码 2 1 服务注册 2 2 服务发现 2 3 运行结果 2 4 问题 3 最后 1
  • TS:etcd集群某个etcd实例启动报错(报cluster ID mismatch)-2022.10.13(已解决)

    目录 文章目录 目录 1 报错现象 2 排查过程 3 解决过程 1 尝试办法1 2 尝试办法2 4 总结 引用 关于我 最后 1 报错现象 在k8s高可用集群搭建过程中 关于etcd集群搭建是 报错了 自己当时环境如下 本次复用3个node
  • SaltStack实现etcd自动扩容

    一 ETCD 概述 1 ETCD 简介 ETCD是用于共享配置和服务发现的分布式 一致性的KV存储系统 该项目目前最新稳定版本为2 3 0 ETCD是CoreOS公司发起的一个开源项目 授权协议为Apache 提供配置共享和服务发现的系统比
  • ETCD v3 restful api 使用详解

    ETCD v3 restful api 使用详解 网上已经有很多关于v2接口的使用了 类型下面的请求方式 本文就主要讲解v3版本的restful api的使用方式 V2版本 curl http 127 0 0 1 2379 v2 keys
  • etcd的使用

    启动etcd服务 启动etcd时最主要的是需要准备两个没有使用过的端口 这两个端口一个用于etcd之间同步信息 一个用于etcd向客户端提供服务的端口 因此启动单个etcd节点 只需按照如下命令行输入即可 server name myetc
  • etcd安装

    ETCD安装 windows版本 下载 下载地址https github com etcd io etcd releases 安装 其实也不用安装 下载解压后 得到如下 选中etcd exe 右键 属性 兼容性 以管理员身份运行此程序勾上
  • patroni+etcd+antdb高可用

    patroni etcd antdb高可用架构图 Patroni组件功能 自动创建并管理主备流复制集群 并且通过api接口往dcs Distributed Configuration Store 通常指etcd zookeeper cons
  • 如何实现零宕机的配置热加载

    对于高可用的服务 为了保证服务可用性 更新配置时必然不能直接停止服务 可以使用配置热加载来避免服务暂停 不需要重启服务 配置的热加载可以分为两个场景 手动更新与自动更新 手动更新 对于一些临时调试 服务数量不多的情况下 可以进行手动更新配置
  • etcd之日志和快照管理

    系列文章目录 浅谈分布式系统与一致性协议 一 浅谈分布式系统与一致性协议 二 浅谈分布式系统与一致性协议 三 深入浅出之etcd 深入浅出之etcd 二 etcd版本之v3 etcd之安全性阐述 etcd的多版本并发控制 目录 系列文章目录
  • 可自动扩展的高可用Swarm集群EdgeScaler的搭建

    项目简介 应用场景 集群架构 组件描述 集群搭建 环境准备 Swarm工作节点搭建 Swarm管理节点搭建 ConfdHAProxy节点搭建 小结 项目简介 随着虚拟化和容器技术的日趋成熟 Docker越来越受到人们的关注 目前Docker
  • 如何修复此错误“watch chan 错误:etcdserver:mvcc:所需修订已被压缩”?

    我有一个带有两个节点的 kubernetes 集群 还有两个用于 etcd 的节点 而且我正在对我的 kubernetes 使用身份验证 当我运行这个命令时 kubectl get cs我得到这个输出 NAME STATUS MESSAGE
  • 在 Kubernetes 集群上使用 etcdctl 时出现错误:“证书由未知机构签名”

    我正在运行 minikube 并且正在尝试列出 ETCD 上的密钥 我下载了最新的etcdctl来自github的客户端 https github com etcd io etcd releases download v3 3 18 etc

随机推荐

  • client-go开发示例

    1 查看 node列表 2 查看pod列表 3 service列表 4 获取sa列表 5 查看deploy列表 6 查看pv列表 7 查看PVC列表 8 查看ns列表 9 查看ingress列表 10 查看Secret列表 11 创建sec
  • Ceph部署

    1 简介 Ceph是一个高性能 可扩容的分布式存储系统 xff0c 它提供三大功能 xff1a 对象存储 xff1a 提供RESTful接口 xff0c 也提供多种编程语言绑定 兼容S3 Swift块存储 xff1a 由RBD提供 xff0
  • API 优先级和公平性(APF)

    1 概述 目前apiserver默认的限流方式太过简单 目前k8s缺少客户端业务请求隔离 xff0c 一个错误的客户端发送大量请求可能造成其他客户端请求异常 xff0c 也不支持突发流量 2 开启APF APF测试 开启APF xff0c
  • 十大经典排序算法总结(C语言版本)

    前言 xff1a 排序算法 是最经典的算法知识 xff0c 也是每个合格程序员应该需要掌握的知识点 考虑到排序算法通常代码简短 xff0c 逻辑思维强和应用范围广等特性 xff0c 排序算法题目便成为了面试中的常客 在面试中最常考的是快速排
  • Unicode、UTF-8、UTF-16 终于懂了

    计算机起源于美国 xff0c 上个世纪 xff0c 他们对英语字符与二进制位之间的关系做了统一规定 xff0c 并制定了一套字符编码规则 xff0c 这套编码规则被称为ASCII编码 ASCII 编码一共定义了128个字符的编码规则 xff
  • Prometheus 的优雅关闭

    1 方法1 xff1a 用 pgrep f prometheus 找到运行的 Prometheus 进程号 使用 kill TERM 1234 来关闭 2 方法2 需要通过 web enable lifecycle 参数开启 lifecyc
  • Ceph运维操作

    1 操控集群 1 1 UPSTART Ubuntu系统下 xff0c 基于ceph deploy部署集群后 xff0c 可以用这种方法来操控集群 列出节点上所有Ceph进程 xff1a start ceph all 启动节点上特定类型的Ce
  • k8s部署Ceph

    1 Helm部署 1 1 简介 为了将Ceph部署到K8S集群中 xff0c 可以利用ceph helm项目 目前此项目存在一些限制 xff1a public和cluster网络必须一样如果Storage的用户不是admin xff0c 你
  • Ceph性能调优

    1 最佳实践 1 1 基本 监控节点对于集群的正确运行非常重要 xff0c 应当为其分配独立的硬件资源 如果跨数据中心部署 xff0c 监控节点应该分散在不同数据中心或者可用性区域日志可能会让集群的吞吐量减半 理想情况下 xff0c 应该在
  • Ceph常见问题

    1 CephFS问题诊断 1 1 无法创建 创建新CephFS报错Error EINVAL pool rbd ssd already contains some objects Use an empty pool instead xff0c
  • 镜像仓库 Harbor 对接 MinIO 对象存储

    Harbor 的部署之前使用的存储是 NFS xff0c 虽然可以使用 rsync 43 inotify 做数据同步做解决单点问题 xff0c 但是 NFS 效率 性能有限 xff0c 没有对象存储那么强大 xff0c 所以一般使用对象存储
  • thanos prometheus 的高可用、长期存储二进制部署

    1 简介 http thanos io thanos 是具有长期存储功能的开源 高可用性 Prometheus的集群组件 全局查询视图 跨多个 Prometheus 服务器和集群查询指标 无限保留 使用对象存储扩展系统 xff0c 不限时间
  • prometheus基本介绍

    001 基本介绍 1 主要功能 多维数据模型 xff08 时序由metric名字和k v的labels构成 xff09 灵活的查询语句无依赖存储 xff0c 支持local和remote不同的模型采用http协议 xff0c 使用pull模
  • prometheus基本概念

    基本概念 1 数据模型 prometheus存储的是时序数据 xff0c 即按照相同时序 xff08 相同名字和标签 xff09 xff0c 以时间维度存储的连续数据集合 时序是由名字以及key value标签定义 xff0c 具有相同的名
  • prometheus标签

    004 标签 1 作用 Prometheus中存储的数据为时间序列 xff0c 是由Metric的名字和一系列的标签 键值对 唯一标识的 不同的标签代表不同的时间序列 xff0c 即 通过指定标签查询指定数据 指标 43 标签实现了查询条件
  • 基于FreeRTOS的CPU利用率计算教程详解(STM32版)

    前言 xff1a FreeRTOS 是一个 RTOS 类的嵌入式实时操作系统 xff0c 作为实时操作系统其必定拥有任务调度的属性 通过系统自身的任务调度算法实现任务安全且高效的切换 xff0c 这就不可避免的引出了各个任务对 CPU 的利
  • kubelet残留孤儿pod(Orphaned pod)无法删除

    记录kubelet残留孤儿pod Orphaned pod 无法删除的问题分析和解决方法 问题 查看kubelet日志 xff0c 错误信息如下 xff1a E0823 10 31 01 847946 1303 kubelet volume
  • kubelet无法启动:more than 8 NUMA Nodes

    现象 xff1a kubelet启动报错 unsupported on machines with more than v NUMA Nodes 原因 xff1a maxAllowableNUMANodes specifies the ma
  • openshfit etcd备份恢复

    1 找到etcd的leader节点 xff1a 随机进入一个etcd的pod xff1b 使用 etcdctl endpoint status xff0c 返回值有true的就是etcd leader节点 2 进入etcd leader节点
  • 性能调优之 ETCD

    磁盘 IOPS 调整 etcd 对磁盘写入延迟非常敏感 xff0c 通常需要 50 顺序写入 IOPS 例如 7200RPM 磁盘 对于负载较重的集群 xff0c 建议使用 500 顺序写入 IOPS 例如 xff0c 典型的本地 SSD