ETCD集群运维

这篇具有很好参考价值的文章主要介绍了ETCD集群运维。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

ETCD扩容节点

节点1:10.1.1.10
etcd --name infra0 --initial-advertise-peer-urls http://10.1.1.10:2380 \
  --listen-peer-urls http://10.1.1.10:2380 \
  --listen-client-urls http://10.1.1.10:2379,http://127.0.0.1:2379\
  --advertise-client-urls http://10.1.1.10:2379 \
  --initial-cluster-token etcd-cluster-1 \
  --initial-cluster infra0=http://10.1.1.10:2380,infra1=http://10.1.1.11:2379,infra2=http://10.1.1.12:2379\
  --initial-cluster-state new

节点2:10.1.1.11
etcd --name infra1 --initial-advertise-peer-urls http://10.1.1.11:2380 \
  --listen-peer-urls http://10.1.1.11:2380 \
  --listen-client-urls http://10.1.1.11:2379,http://127.0.0.1:2379\
  --advertise-client-urls http://10.1.1.11:2379 \
  --initial-cluster-token etcd-cluster-1 \
  --initial-cluster infra0=http://10.1.1.10:2380,infra1=http://10.1.1.11:2379,infra2=http://10.1.1.12:2379\
  --initial-cluster-state new

节点3:10.1.1.12
etcd --name infra2 --initial-advertise-peer-urls http://10.1.1.12:2380 \
  --listen-peer-urls http://10.1.1.12:2380 \
  --listen-client-urls http://10.1.1.12:2379,http://127.0.0.1:2379\
  --advertise-client-urls http://10.1.1.12:2379 \
  --initial-cluster-token etcd-cluster-1 \
  --initial-cluster infra0=http://10.1.1.10:2380,infra1=http://10.1.1.11:2379,infra2=http://10.1.1.12:2379\
  --initial-cluster-state new

在以上的任意一个节点

查看集群健康状态
etcdctl cluster-health
查看集群状态
etcdctl member list

运行时重配置,通知集群新的配置
etcdctl member add http://10.1.1.13:2380

启动:
区别:--initial-cluster 的值,--initial-cluster-state为existing
节点4:10.1.1.13
etcd --name infra2 --initial-advertise-peer-urls http://10.1.1.13:2380 \
  --listen-peer-urls http://10.1.1.13:2380 \
  --listen-client-urls http://10.1.1.13:2379,http://127.0.0.1:2379\
  --advertise-client-urls http://10.1.1.13:2379 \
  --initial-cluster-token etcd-cluster-1 \
  --initial-cluster 
  infra0=http://10.1.1.10:2380,infra1=http://10.1.1.11:2379,infra2=http://10.1.1.12:2379,infra4=http://10.1.1.13:2379 \
  --initial-cluster-state existing

ETCD参数调优

etcd默认配置在本地网络下通常能够运行的很好,因为延时很低。然而在跨数据中心部署etcd或网络延时很高时,etcd的心跳间隔和选举超时时间等参数需要根据实际情况进行调整。
网络并不是导致延时的唯一来源,不论Follower还是Leader,请求和响应都受磁盘I/O延时影响。

时间参数

心跳间隔:主节点通知从节点它还是Leader的频率,该参数应该设置成节点之间RTT的时间,默认是100ms。
选举超时时间:从节点等待多久没收到主节点的心跳就尝试去竞选Leader,默认是1000ms

心跳间隔建议设置为临近节点间RTT的最大值,通常0.5~1.5倍的RTT,如果心跳间隔设置太短,etcd就会发送没有必要的心跳,增加CPU和网络资源消耗;如果设置太大,导致选举等待时间的超时。
选举等待时间设置的过长,会导致节点异常检查时间过长。
(评估RTT的最简单方法是使用ping操作)

选举超时时间应该基于心跳间隔和节点之间的平均RTT值,必须至少是RTT的10倍时间以应对网络波动。
选举超时时间的上限是50000ms,这个时间只能适用于全球范围内分布式部署的etcd集群。

心跳间隔和选举超时时间的值对同一个etcd集群的所有节点都生效,如果各个节点不同的话,就会导致集群发生不可预知的不稳定性,可以通过启动参数或者环境变量覆盖默认值,

etcd --heartbeat-interval=100 --election-timeout=500

快照

etcd总是向日志文件中追加key的改动,这样会导致key的的改动日志文件会线性增长。
快照提供一种通过保护系统的当前状态并移除旧日志文件的方式来压缩日志文件。
默认修改数量达到10000时才会建立快照,如果etcd的内存使用和磁盘使用过高,应该尝试调低快照触发的阈值

etcd --snapshot-count=5000

磁盘

etcd集群对于磁盘I/O的延时非常敏感,因为etcd必须持久化它的日志,当其他IO密集型的进行也在占用磁盘IO的带宽时,会导致fsync延时非常高。这将导致etcd丢失心跳包,请求超时或暂时性的Leader丢失。
etcd服务器赋予更高的磁盘IO,可以使用SSD高性能盘

网络

如果etcd的主节点要处理大规模并发的客户端请求,有可能因为网络拥塞的原因延迟对从节点的响应。

监控

etcd服务端会在客户端端口的metrics路径上暴露metrics数据,可以时间监控。

curl -L http://localhost:2379/metrics

维护

如下的所有运维管理都是在操作etcd的存储空间,存储空间的配额用于控制etcd数据空间的大小,如果etcd的节点磁盘空间不足了,配额会触发告警,然后etcd系统将进入操作受限的维护模式。为了避免存储空间消耗完导致写不进去,应该定期清理key的历史版本。在清理etcd节点存储碎片后,存储空间会重新调整。定期对etcd节点状态做快照备份,以便在错误的运维操作引起数据丢失或数据不一致时进行数据恢复。

压缩历史版本

启动参数,设置自动压缩key的历史版本,以小时以为单位,如下表示保留1小时的历史版本
etcd -auto-compaction-retention=1

使用压缩命令,压缩至版本号3
etcdctl compact 3

在压缩之后,版本号3之前的key版本都变得不可用,可以如下命令查看
etcdctl get --rev=2 somekey

消除碎片化

压缩历史版本后,后台数据库将存在内部的碎片,这些碎片无法被后台存储使用,却占用节点存储空间,
因此需要消除碎片化,释放这些存储空间。

[root@VM-12-8-opencloudos ~]# etcdctl defrag
Finished defragmenting etcd member[127.0.0.1:2379]

存储配额

如果设置了存储配额,当一个节点的存储空间超过配额,etcd就会触发集群范围的告警,并将集群置于只读key和删除key的维护模式,

设置16M的存储配额
etcd --quota-backend-bytes=$((16*1024*1024))

默认值为
2 * 1024 * 1024 * 1024

查看告警是否出发
etcdctl alarm list

快照备份

定期为etcd节点做快照,以便容灾恢复

etcdctl snapshot save backup.db

灾难恢复

etcd自己被设计有一定的容灾能力,对于一个N节点的集群,允许最多出现(N-1)/2个节点发生永久性故障之后还能正常对外服务,当超过(N-1)/2时,就会陷入不可逆地失去仲裁的境地。一旦仲裁丢失,集群机会无法保证一致性,因此无法再接收到更新请求了。
为了从灾难性故障中恢复,提供了快照和恢复机制来重建一个新的etcd集群。

快照

etcdctl --endpoints=$ENDPOINT snapshot save snapshot.db

恢复

恢复到新集群,例如恢复到新集群(m1,m2,m3),以m1为例:
为m1节点创建新的etcd数据目录
etcdctl snapshot restore snapshot.db \
	--name m1 \
	--initial-cluster m1=http://m1:2380,m2=http://m2:2380,m3=http://m3:2380 \
	--initial-cluster-token etcd-cluster-test \
	--initial-advertise-peer-urls http://m1:2380

启动etcd进程
etcd \
	--name m1 \
	--listen-client-urls http://m1:2379 \
	--advertise-client-urls http://m1:2379 \
	--initial-advertise-peer-urls http://m1:2380
	

etcd gateway

etcd网关是一个简单的TCP代理,可用于向etcd集群转发网络数据,etcd网关对用户透明且无状态的,不会修改客户端请求和响应

作用

访问etcd的每个应用需要获取到etcd集群的客户端短点地址,但是如果集群重配置发生变化,应用程序需要同步更新,否则会影响应用程序的可用性。
etcd网关监听一个固定的本地地址,每个应用程序都与它的本地etcd网关相连,这样只有etcd网关需要更新其后端服务器列表,对应用来说,后端服务器端的更新是透明的。

什么时候不应该使用网关

  • 性能:etcd网关并不是为提升etcd性能而设计的,不提供缓存,watch合并,批处理等提升性能的特性,高性能场景下并不推荐使用etcd网关
  • 已有服务发现机制:集群管理系统本身支持服务发现,通过DNS域名或集群的LB的IP

启动方式

etcd gateway start --endpoints=http://10.1.1.1:2379,http://10.1.1.2:2379,http://10.1.1.3:2379

gRPC代理

gRPC代理是一个运行在gRPC层(L7),无状态的etcd反向代理,它被设计成一个降低核心etcd集群的请求负载,对于横向扩展,gRPC代理会合并watch以及为API请求绑定一个过期租约。还可以保护集群免受大流量的冲击,缓存range request的结果。

可扩展的watch API

它可以将多个客户端(c-watchers)对同一个key的监控合并到一个链接(s-watcher)到 etcd server的请求。同时它会广播从s-watcher收到的时间到所有的c-watchers。
ETCD集群运维

租约

lease API支持续约机制,客户端通过定时刷新(heartbean)来实现续约(v2和v3的实现机制也不一样)。用于集群监控以及服务注册发现。
跟上图类似,为了减少etcd server的交互次数,gRPC proxy同样提供了合并功能
ETCD集群运维
3个client注册到gRPC proxy中(c-stream),通过心跳(heartbeat)来定时续约,gRPC proxy会合并生成一个s-stream 注册到etcd server

请求缓存

gRPC proxy会缓存来自客户端的请求,保证etcd server 频繁的被客户端请求滥用文章来源地址https://www.toymoban.com/news/detail-504268.html

启动gRPC代理

etcdctl grpc-proxy start --endpoints=http://10.1.1.1:2379,http://10.1.1.2:2379,http://10.1.1.3:2379 --listen-addr=1.1.1.1:2379

到了这里,关于ETCD集群运维的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • k8s外接etcd集群服务异常,使用snapshot恢复etcd集群

    master节点 主机 IP 版本 master01 192.168.66.50 k8s-1.23.17 master02 192.168.66.55 k8s-1.23.17 master03 192.168.66.56 k8s-1.23.17 etcd集群节点 主机 IP 版本 etcd01 192.168.66.58 3.5.6 etcd02 192.168.66.59 3.5.6 etcd03 192.168.66.57 3.5.6 生产环境中我们为了避免出现误操作或者是服务器硬件出见异常导致宕机,我们的虚拟

    2024年01月17日
    浏览(31)
  • docker搭建etcd集群

    最近用到etcd,就打算用docker搭建一套,学习整理了一下。记录在此,抛砖引玉。 文中的配置、代码见于https://gitee.com/bbjg001/darcy_common/tree/master/docker_compose_etcd 这样一个单节点etcd就起来了,环境变量 ALLOW_NONE_AUTHENTICATION=yes 允许无需密码登录 如果要设置密码,需要设置环境变量

    2024年02月01日
    浏览(25)
  • 2、etcd单机部署和集群部署

    上一章我们认识了 etcd ,简单的介绍了 etcd 的基础概念,但是理解起来还是比较抽象的。这一章我们就一起来部署下 etcd 。这样可以让我们对 etcd 有更加确切的认识。 对于平常的学习,其实搭建一个单机节点是够了的。接下来就讲讲怎么搭建单机节点。 本次部署是在 centos

    2024年02月08日
    浏览(32)
  • [Kubernetes] etcd的集群基石作用

    1. 配置存储 etcd作为一个高度可靠的分布式键值存储系统,存储了Kubernetes集群的完整配置和状态数据。集群的元数据,包括节点信息、命名空间、部署、副本集、服务、持久卷声明等,全部存储在etcd中。 2. 数据一致性 etcd使用raft一致性算法保证了数据的强一致性,确保了在

    2024年04月24日
    浏览(24)
  • 【kubernetes】Etcd集群部署与验证

    前言 :二进制部署kubernetes集群在企业应用中扮演着非常重要的角色。无论是集群升级,还是证书设置有效期都非常方便,也是从事云原生相关工作从入门到精通不得不迈过的坎。通过本系列文章,你将从虚拟机准备开始,到使用二进制方式从零到一搭建起安全稳定的高可用

    2024年02月10日
    浏览(49)
  • 微服务自动化 etcd集群搭建

    它需要开多个虚拟机 那我们就找到你使用的那个虚拟机复制 (强调两个主机都已经安装好了etcd服务并且能够正常运行) 不是复制就可以使用 我们需要把里面的不是vmdk和vmx的文件删了     然后再回到我们的虚拟机,鼠标右键选择打开   然后启动虚拟机它会提示我们是否已

    2024年01月17日
    浏览(32)
  • k8s中部署etcd集群

            Etcd是一个高可用的 、 开源的、分布式的Key/value存储系统 , 提供共享配置、服务的注册和发现、数据TTL失效、数据改变监视、多值、目录监听、分布式原子锁操作等功能 。 通常,k8s使用etcd进行数据存储,本文将部署etcd集群用做应用的存储。 一、前提         部

    2024年02月08日
    浏览(39)
  • Kubernetes高可用集群二进制部署(二)ETCD集群部署

    Kubernetes概述 使用kubeadm快速部署一个k8s集群 Kubernetes高可用集群二进制部署(一)主机准备和负载均衡器安装 Kubernetes高可用集群二进制部署(二)ETCD集群部署 Kubernetes高可用集群二进制部署(三)部署api-server Kubernetes高可用集群二进制部署(四)部署kubectl和kube-controller-man

    2024年02月14日
    浏览(33)
  • etcd单点部署集群及数据备份与恢复

    etcd单机集群部署 下载etcd 二进制安装包。 创建相关目录 在 /data/etcd/node1,/data/etcd/node2,/data/etcd/node3创建三个配置文件 node1.yml node2.yml node3.yml 配置文件参数解析 启动3个节点 查看集群状态 etcd备份脚本 etcd数据恢复 停止etcd 导入数据,如下 更改启动文件中data-dir为导入时的目

    2024年01月17日
    浏览(27)
  • 二进制搭建Kubernetes集群(一)——部署etcd集群和单master

    注意:生产环境中,etcd集群和master、node节点都应该部署在不同的机器上,此处为了实验方便,将三台etcd节点分别部署在了master和node节点上了 k8s集群master01:192.168.126.27    kube-apiserver kube-controller-manager kube-scheduler etcd k8s集群master02:192.168.80.21 k8s集群node01:192.168.80.11    

    2024年02月10日
    浏览(37)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包