ETCD集群运维

news2025/1/10 10:34:15

ETCD集群运维

  • ETCD扩容节点
  • ETCD参数调优
    • 时间参数
    • 快照
    • 磁盘
    • 网络
  • 监控
  • 维护
    • 压缩历史版本
    • 消除碎片化
    • 存储配额
    • 快照备份
  • 灾难恢复
    • 快照
    • 恢复
  • etcd gateway
    • 作用
    • 什么时候不应该使用网关
    • 启动方式
  • gRPC代理
    • 可扩展的watch API
    • 租约
    • 请求缓存
    • 启动gRPC代理

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。
在这里插入图片描述

租约

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

请求缓存

gRPC proxy会缓存来自客户端的请求,保证etcd server 频繁的被客户端请求滥用

启动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

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

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

相关文章

管理类联考——逻辑——知识篇——论证推理——一、削弱——haimian

削弱 考点分析 削弱 年度 2012 2013 2014 2015 2016 2017 2018 2019 2020 2021 2022 2023题量223262132 主要问法 以下哪项如果为真,则能最严重地削弱(反驳)上述结论?以下哪项如果为真,则最能削弱(反驳&#xff09…

文心一言 VS 讯飞星火 VS chatgpt (46)-- 算法导论6.1 4题

四、假设一个最大堆的所有元素都不相同,那么该堆的最小元素应该位于哪里? 文心一言: 最大堆的最小元素位于堆的根结点。由于最大堆的性质,根结点是堆中所有元素的最大值,因此它也是堆中所有元素的最小值。 讯飞星火&#xff1a…

工具及方法 - 如何进行任务管理

如何做好你该做的事,这是你的一生之敌。 没有一步到位的工具和一劳永逸的方法,只有不断变化的需求和自己用起来顺手的感觉。 对于GTD工具,在手机上安装过番茄工作法的工具,在电脑的Excel上也做过任务列表,在免费的项目…

解决 kali换源之后签名无效

报错问题: apt-get update 报错 更新扩展知识:kali更新源 终端输入 vi /etc/apt/sources.list #中科大 deb http://mirrors.ustc.edu.cn/kali kali-rolling main non-free contrib deb-src http://mirrors.ustc.edu.cn/kali kali-rolling main …

计算机视觉中,有哪些基于控制点对的图像变换?

这里探讨的所有图像变换(二维)都是基于控制点对的,它们的主要区别在于: 1、它们是如何通过两张图像的控制点对产生变换场(变换矩阵或者变换公式中的参数)的 2、控制点之间的对应关系严格程度 这里说的变换…

远心镜头案例锦集

远心镜头(Telecentric lens) 定义:远心镜头是一类将其入瞳或出瞳放置于无穷远的光学系统。是为纠正传统镜头视差而设计,它可以在一定的物距范围内,使得到的图像放大倍率不会变化,即这种镜头拍出来的图像没…

人工智能(4):模型评估

模型评估是模型开发过程不可或缺的一部分。它有助于发现表达数据的最佳模型和所选模型将来工作的性能如何。 按照数据集的目标值不同,可以把模型评估分为分类模型评估和回归模型评估。 1 分类模型评估 准确率 预测正确的数占样本总数的比例。 其他评价指标…

嵌入式C开发 VS 嵌入式CPP开发!

目录 ​答主:听心跳的声音 答主:pansz 答主:candy 这是知乎嵌入式领域的一个热门话题,原文链接: https://www.zhihu.com/question/374663834 几个高赞回答: ​答主:听心跳的声音 单片机的主…

多项式回归的原理及实现、多重回归的原理

1.多项式回归的原理及实现 笔记来源于《白话机器学习的数学》 1.1 多项式回归的原理 预测一个变量 x x x与一个变量 y y y的关系 例如:广告费 x x x与点击量 y y y 用曲线拟合数据 求导过程类比本人之前的博客进行推导,相关笔记:最小二乘法的…

Nginx基于授权的访问控制步骤

目录 一、安装httpd-tools 二、生成用户密码认证文件 三、修改主配置文件相对应的目录,添加认证配置置顶 四、 重启服务 五、 访问网址 一、安装httpd-tools 二、生成用户密码认证文件 三、修改主配置文件相对应的目录,添加认证配置置顶 Vim /usr/loc…

【雕爷学编程】Arduino动手做(124)---24位WS2812环形灯板

37款传感器与执行器的提法,在网络上广泛流传,其实Arduino能够兼容的传感器模块肯定是不止这37种的。鉴于本人手头积累了一些传感器和执行器模块,依照实践出真知(一定要动手做)的理念,以学习和交流为目的&am…

tensorflow2模型保存和恢复

有两种方法可以保存模型: 使用检查点,一种简单的在硬盘上保存变量的方法使用SavedModel,模型结构及检查点 检查点不包含任何关于模型自身的描述:它们只是一种简单的存储参数并能让开发者正确恢复它的方法。 SavedModel格式在保…

Mysql复习多表查询

Mysql复习多表查询 1.多表关系2.多表查询概述3.内连接4. 外连接5. 自连接5.1 案例 6. 子查询6.1 标量子查询6.1.1 标量子查询案例 6.1 列子查询6.2 行子查询6.2.1 demo1 6.3 表子查询6.3.1 demo16.3.2 demo2 7.联合查询8.1 案例 附录 1.多表关系 >多表查询 项目开发中&…

【算法】代码随想录、数组——长度最小的子数组、滑动窗口实现

209.长度最小的子数组 解法思想来自代码随想录:209.长度最小的子数组 (1)暴力解法 我们暴力解法直接使用两个for循环,然后不断的遍历寻找符合条件的子序列; 初始化长度变量length和结果变量result为0和int类型最大数…

近期离职心情记录 大不了前端换行!

提了离职了,发消息给领导的时候我都不敢看,发了马上关闭了聊天框当乌龟。。。 一、大致背景介绍 现在在二线城市的上市公司,本人大专学历,学的是java(甚至还报名了培训班)。第一个公司是现在公司的外包公司…

管理类联考——逻辑——知识篇——论证推理——七、论证方式——haimian

论证方式 考点分析 削弱 年度 2012 2013 2014 2015 2016 2017 2018 2019 2020 2021 2022 2023题量211111 题型分类 关键问题 题型特征 典型问法: 为了评价上述论证的正确性,回答以下哪个问题最为重要以下哪项对于评价上述结论最为重要? 思路点拨…

【IMX6ULL驱动开发学习】10.设置uboot使用网络加载zImage和dtb

1. 在uboot中设置网络 首先启动自己的板子,使用 ifconfig 命令或者 ifconfig -a 命令查看自己网卡的地址 ifconfig ifconfig -a我的网卡地址是这个 52:15:66:2E:16:71接着设置自己的ip setenv ipaddr 192.168.1.100设置服务器ip setenv serverip 192.168.1.200保…

如何系列 如何在单机和集群环境保证代码线程安全

文章目录 什么是线程安全什么场景下会发生如何保证线程安全单机环境1.无状态设计2.使用final关键字(不可变)3.使用synchronized关键字4.使用volatile关键字5.使用java.util.concurrent.atomic包中的原子包装类6.使用java.util.concurrent.locks包中的锁7…

【ROS2】(导航-05)在 Navigation-ROS 2上加载地图

一、说明 如何建立ROS2的导航地图?在ROS2的服务器中,其中有一个地图服务器,该服务器与参数服务器类同,当外界节点请求的时候,将新的地图导入导航系统中。注意,这里新的地图就是因为场景足够大时&#xff0c…

Docker常见使用

Docker常见使用 1、Docker安装 ## 下载阿里源repo文件 $ curl -o /etc/yum.repos.d/Centos-7.repo http://mirrors.aliyun.com/repo/Centos-7.repo $ curl -o /etc/yum.repos.d/docker-ce.repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo$ yum clean …