美文网首页
为什么你的etcd请求会超时

为什么你的etcd请求会超时

作者: 一生逍遥一生 | 来源:发表于2021-08-27 15:47 被阅读0次

etcd请求出现高延迟

etcd的请求为何出现高延迟?
Leader在接收到的写请求,讲一个日志条目复制到集群多数节点并应用到存储状态的流程,会出现哪些情况导致请求超时?

  • Leader向从节点发消息:Leader需要并行将消息通过网络发送给Follower节点,依赖网络性能;Leader需持久化日志条目到WAL,依赖磁盘IO顺序写入性能。
  • 应用日志条目到存储状态机时,etcd后端key-value存储引擎是boltdb,boltdb是一个基于B+ Tree实现的存储引擎,当写入数据、提交事物时,它会将
    dirty page持久化到磁盘中。
  • 在整个写流程过程中,etcd节点的cpu、内存、网络资源应充足,否则可能也会影响性能。

定位网络延时抖动

使用ping/traceroute/mtr、ethtool、ifconfig/ip、netstat、tcpdump等命令获取相关数据。

etcd应用层提供了节点之间网络统计的metrics指标:

指标 解释
etcd_network_active_peer peer之间活跃的连接数
etcd_network_peer_round_trip_time_seconds peer之间rtt延时
etcd_network_peer_send_failures_total peer发送的失败消息数
etcd_network_client_grpc_send_bytes_total server发送给client的总字节数
etcd_network_client_grpc_received_bytes_total server接收到client的总字节数

网络质量导致etcd性能:

  • expensive request中的大包查询会使网卡出现瓶颈,产生丢表等错误,从而导致etcd吞吐量下降、高延时,这是因为业务没有遵循最佳实践,查询了大量key-value。
  • 在跨故障部署的时候,故障域可能是可用区、城市,各个节点的RTT越高,请求的延时跟高。

磁盘I/O

etcd_disk_wal_fsync_duration_seconds(表示WAL日志持久化的fsync系统调用延时数据)
和etcd_disk_backend_commit_duration_seconds(后端boltdb事物提交的延时)观察应用层写入磁盘的性能。

如果etcd的WAL模块在fdatasync操作超过1秒时,将相应的日志输出。

etcd_disk_backend_commit_duration_seconds指标的异常时,说明事物提交过程中的B+ Tree树重平衡、分裂、持久化dirty page、持久化meta
page 等操作耗费了大量时间。

etcd_disk_backend_commit_duration_seconds较高、etcd_disk_wal_fsync_duration_seconds正常,说明B+ Tree的重平衡、分裂过程中的
较高时间复杂度逻辑操作导致。

disk_backend_commit_rebalance_duration和disk_backend_commit_spill_duration分别表明事物提交过程中B+ Tree的重平衡和分裂操作
耗时分布区间。

etcd_disk_wal_fsync_duration_seconds记录的是WAL文件顺序写入的持久化时间, etcd_disk_backend_commit_duration_seconds记录
的是整个事物提交的耗时。

Expensive request

etcd 3.2和etcd 3.3版本写请求完成之前,需要更新MVCC的buffer,进行升级锁操作。然而此时若集群中出现一个long expensive read request,
则会导致写请求延时抖动。

在etcd 3.4中,logger默认为capnslog,trace特性只有在当logger为zap时才开启,因此你需要设置--logger=zap。
trace特性不能记录所有类型的请求,目前只覆盖了MVCC模块中的range/put/txn等常用接口。

相关文章

  • 为什么你的etcd请求会超时

    etcd请求出现高延迟 etcd的请求为何出现高延迟?Leader在接收到的写请求,讲一个日志条目复制到集群多数节...

  • 请求超时

    请求超时分两种:前端超时,服务端超时1.服务端超时:当请求到服务端默认超时时间还是无响应,服务端会自动断开请求2....

  • AFNetworking设置请求网络超时

    有时候可能请求某个服务器接口很慢会导致请求超时,所以需改变默认的请求超时时间。

  • win+r cmd ping 请求超时 请求超时 请求超时 请求超时 数据包 已发送 =4 已接受 =0 丢...

  • scrapy 出现 [twisted.internet.erro

    在使用 scapy 进行大批量爬取的时候,少数请求链接会出现请求超时,当出现请求超时时,爬虫会自动重试三次。 扩展...

  • golang http请求

    1. http1请求 参考文章: <> Go Http包解析:为什么需要response.Bo...

  • 请求超时

    请求超时 网络不好,浏览器连接服务器超过5s 响应超时 连接服务器,url参数直接提交到服务器 body类型的参数...

  • 请求超时

    最近打开简书,总是出现问题,页面难以打开,总是显示请求超时,不管是点自己的文章还是要写文章,都要反应很久。 因为这...

  • 请求超时

    这两天不知怎么回事,浏览简书的时候,网页刷新不出来,总是提示“请求超时!” 感觉有点扫兴呀!打开文章的...

  • k8s大集群list问题记录

    简单总结 当我们用进行list请求时,如果是以下情况,则list请求会直接访问到etcd而不是经过apiserve...

网友评论

      本文标题:为什么你的etcd请求会超时

      本文链接:https://www.haomeiwen.com/subject/lkmmiltx.html