Loading [MathJax]/jax/output/CommonHTML/config.js
前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >ETCD 运维笔记

ETCD 运维笔记

作者头像
知一
发布于 2021-12-10 11:42:44
发布于 2021-12-10 11:42:44
5K10
代码可运行
举报
文章被收录于专栏:知一杂谈知一杂谈
运行总次数:0
代码可运行

调研环境说明 etcd –version etcd Version: 3.5.1 Git SHA: d42e8589e Go Version: go1.17.2 Go OS/Arch: darwin/amd64

参数说明

启动参数

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
--name etcd-1 // 节点名称
--data-dir /Users/noogel/Debug/data/etcd1 // 数据目录
--initial-advertise-peer-urls http://127.0.0.1:238
--listen-peer-urls http://127.0.0.1:2381
--listen-client-urls http://127.0.0.1:2379
--advertise-client-urls http://127.0.0.1:2379
--initial-cluster-token etcd-lock-cluster-1 // 集群 token
--initial-cluster etcd-1=http://127.0.0.1:2381,etcd-2=http://127.0.0.1:2382,etcd-3=http://127.0.0.1:2383 // 集群节点信息
--initial-cluster-state new // 初始化的集群状态
--heartbeat-interval 1000 // 心跳间隔
--auto-compaction-retention 1 // 开启自动压缩,间隔 1h 执行
--auto-compaction-mode periodic
--quota-backend-bytes 8589934592 // 后端存储大小
--election-timeout 5000 // 选举超时时间

关于自动压缩 https://etcd.io/docs/v3.4/op-guide/maintenance/#defragmentation

  • --auto-compaction-mode=revision --auto-compaction-retention=1000 每5分钟自动压缩”latest revision” - 1000
  • --auto-compaction-mode=periodic --auto-compaction-retention=12h 每1小时自动压缩并保留12小时窗口。

自动压缩碎片后还需要单独再清理占用的系统存储空间,etcdctl defrag

最佳实践

  1. heartbeat timeout 默认为 100ms,推荐配置为 1s;
  2. election timeout 默认为 1000ms,推荐为 5s(election timeout >= 5 * heartbeat timeout);
  3. quota-backend-bytes 默认为 2G(最大值8G),推荐根据集群容量预估调整;
  4. 配置 auto-compaction-retention=1 和 auto-compaction-mode=periodic 参数,定期压缩历史数据;
  5. 推荐通过 cronjob 定期执行 etcdctl defrag(如果 defrag 执行时间 > election timeout,则集群会进入重新选主模式)

环境模拟

端口映射

单机环境写集群搭建,以下是端口映射

etcd1 2379 -> 2391 2380 -> 2381

etcd2 2379 -> 2392 2380 -> 2382

etcd3 2379 -> 2393 2380 -> 2383

启动命令

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
ETCDCTL_API=3 etcd --name etcd-1 --data-dir /Users/noogel/Debug/data/etcd1 --initial-advertise-peer-urls http://127.0.0.1:2381 --listen-peer-urls http://127.0.0.1:2381 --listen-client-urls http://127.0.0.1:2379 --advertise-client-urls http://127.0.0.1:2379 --initial-cluster-token etcd-lock-cluster-1 --initial-cluster etcd-1=http://127.0.0.1:2381,etcd-2=http://127.0.0.1:2382,etcd-3=http://127.0.0.1:2383 --initial-cluster-state new --heartbeat-interval 1000 --auto-compaction-mode=revision --auto-compaction-retention=1000 --quota-backend-bytes 8589934592 --election-timeout 5000 > /Users/noogel/Debug/data/etcd1/run.log 2>&1 &

ETCDCTL_API=3 etcd --name etcd-2 --data-dir /Users/noogel/Debug/data/etcd2 --initial-advertise-peer-urls http://127.0.0.1:2382 --listen-peer-urls http://127.0.0.1:2382 --listen-client-urls http://127.0.0.1:2378 --advertise-client-urls http://127.0.0.1:2378 --initial-cluster-token etcd-lock-cluster-1 --initial-cluster etcd-1=http://127.0.0.1:2381,etcd-2=http://127.0.0.1:2382,etcd-3=http://127.0.0.1:2383 --initial-cluster-state new --heartbeat-interval 1000 --auto-compaction-mode=revision --auto-compaction-retention=1000 --quota-backend-bytes 8589934592 --election-timeout 5000 > /Users/noogel/Debug/data/etcd2/run.log 2>&1 &

ETCDCTL_API=3 etcd --name etcd-3 --data-dir /Users/noogel/Debug/data/etcd3 --initial-advertise-peer-urls http://127.0.0.1:2383 --listen-peer-urls http://127.0.0.1:2383 --listen-client-urls http://127.0.0.1:2377 --advertise-client-urls http://127.0.0.1:2377 --initial-cluster-token etcd-lock-cluster-1 --initial-cluster etcd-1=http://127.0.0.1:2381,etcd-2=http://127.0.0.1:2382,etcd-3=http://127.0.0.1:2383 --initial-cluster-state new --heartbeat-interval 1000 --auto-compaction-mode=revision --auto-compaction-retention=1000 --quota-backend-bytes 8589934592 --election-timeout 5000 > /Users/noogel/Debug/data/etcd3/run.log 2>&1 &

历史数据清理命令

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
rm -rf /Users/noogel/Debug/data/etcd1
rm -rf /Users/noogel/Debug/data/etcd2
rm -rf /Users/noogel/Debug/data/etcd3
mkdir etcd1 etcd2 etcd3

日常运维

常规命令

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
export ETCDCTL_API=3
// 节点列表查询
etcdctl member list
// 节点状态
etcdctl --endpoints=127.0.0.1:2381,127.0.0.1:2382,127.0.0.1:2383 endpoint status --write-out=table
// 整理磁盘碎片
etcdctl --endpoints=127.0.0.1:2381,127.0.0.1:2382,127.0.0.1:2383 --user root:123456 defrag

开启鉴权

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
// 添加 root 用户
etcdctl --endpoints=127.0.0.1:2381,127.0.0.1:2382,127.0.0.1:2383 user add root
// 授权 root 角色
etcdctl --endpoints=127.0.0.1:2381,127.0.0.1:2382,127.0.0.1:2383 user grant-role root root
// 查看用户列表
etcdctl --endpoints=127.0.0.1:2381,127.0.0.1:2382,127.0.0.1:2383 --user=root:123456 user list
// 开启鉴权
etcdctl --endpoints=127.0.0.1:2381,127.0.0.1:2382,127.0.0.1:2383 auth enable

生产集群节点启动方式

在生产机通过 systemd 启动。第一次启动命令--initial-cluster-state new,后续节点的增加需要修改为 --initial-cluster-state existing,不明白看节点增加部分。

修改配置

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
// 编辑配置
vim /lib/systemd/system/etcd.service
// 重新加载配置
systemctl daemon-reload
// 启动服务
systemctl start etcd.service
// 查看服务状态
systemctl status etcd.service

问题处理

Etcd 的 compact 机制

Etcd 默认不会自动 compact,需要设置启动参数,或者通过命令进行compact,如果变更频繁建议设置,否则会导致空间和内存的浪费以及错误。Etcd v3 的默认的 backend quota 2GB,如果不 compact,boltdb 文件大小超过这个限制后,就会报错:”Error: etcdserver: mvcc: database space exceeded”,导致数据无法写入。

要从空间不足配额警报中恢复:

  1. Compact etcd的历史。
  2. 对每个etcd端点进行碎片整理。
  3. 解除警报。
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
# 1、获取当前的版本
$ rev=$(ETCDCTL_API=3 etcdctl --endpoints=:2379 endpoint status --write-out="json" | egrep -o '"revision":[0-9]*' | egrep -o '[0-9].*')
# 2、压缩当前版本之前的所有记录
$ ETCDCTL_API=3 etcdctl compact $rev
compacted revision 1516
# 3、清理多余的碎片空间
$ ETCDCTL_API=3 etcdctl defrag
Finished defragmenting etcd member[127.0.0.1:2381]
# 4、解除警告
$ ETCDCTL_API=3 etcdctl alarm disarm
memberID:13803658152347727308 alarm:NOSPACE

需要注意的是整理碎片释放空间,要一个一个节点执行,因为在执行期间节点是无响应的,直到处理完。防止因为全部节点无响应导致的服务不可用

碎片整理

压缩key空间后,会出现内部碎片,这些压缩出来的碎片空间可以被etcd使用,但是不会真正的释放物理空间,需要进行碎片整理,如:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
$ etcdctl defrag
Finished defragmenting etcd member[127.0.0.1:2379]以上指令只作用于当前所在的主机,不会在集群

环境中复刻。可以使用–cluster标记指定所有成员以自动查找所有集群成员。如:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
$ etcdctl defrag --cluster
Finished defragmenting etcd member[http://127.0.0.1:2381]
Finished defragmenting etcd member[http://127.0.0.1:2382]
Finished defragmenting etcd member[http://127.0.0.1:2383]
节点增减
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
# 查看成员信息
ETCDCTL_API=3 etcdctl member list
# 移除节点
ETCDCTL_API=3 etcdctl member remove wallet0x
# 添加节点
ETCDCTL_API=3 etcdctl member add wallet0x --peer-urls="http://10.137.158.119:2380"
# 最后再启动服务
# 其中启动命令 --initial-cluster-state 需要设置为 existing。

需要先移除故障节点成员,再添加进去成员列表。然后清理掉故障节点的工作目录内容,之后再启动服务,启动后服务会自动同步数据。

其中启动命令需要设置为 --initial-cluster-state existing

参考链接

http://www.zhaowenyu.com/etcd-doc/ops/data-space-manage.html https://xieys.club/etcd-backup-restore https://www.cnblogs.com/lowezheng/p/10307592.html https://bbotte.github.io/service_config/etcd-cluster-troubleshooting.html https://www.mytecdb.com/blogDetail.php?id=211 https://www.cnblogs.com/tencent-cloud-native/p/14893209.html http://www.dockone.io/article/2955 https://mytecdb.com/blogDetail.php?id=199

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2021-11-16,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
1 条评论
热度
最新
分享一个 Etcd 可视化管理工具,GUI 客户端,颜值高、响应快,http://www.redisant.cn/etcd
分享一个 Etcd 可视化管理工具,GUI 客户端,颜值高、响应快,http://www.redisant.cn/etcd
回复回复1举报
推荐阅读
编辑精选文章
换一批
Kubernetes之etcd数据库
etcd是CoreOS团队于2013年6月发起的开源项目,它的目标是构建一个高可用的分布式键值(key-value)数据库。etcd内部采用raft协议作为一致性算法,etcd基于Go语言实现。
聂伟星
2020/11/20
2.4K0
etcd集群搭建和使用中常见的报错信息(热key探测系列教程)
etcd的下载地址:https://github.com/etcd-io/etcd/releases
天涯泪小武
2020/07/08
1.4K0
golang源码分析:etcd(2)
启动一个etcd集群有三种方式,Static、etcd Discovery和DNS Discovery。Static很好理解就是启动的时候指定所有节点的ip地址,ectd Discovery 就是借助已经存在的etcd集群的服务发现能力找到新集群的所有节点,方式包括自建etcd集群和使用etcd官方集群两种方式。DNS方式就是使用DNS来实现类似服务发现相同的方式。
golangLeetcode
2023/08/09
3690
学习etcd
很早之前就听说过etcd,只记得是一个跟zookeeper很类似的东西,可以用来实现分布式锁。但一直没有关心这个东西到底是如何部署的,部署时怎么保证高可用,除了分布式锁外是否还有其它趣的功能。今天下班回家研究了下这个东东,很有收获,这里记录一下。 部署 创建一个docker主机 由于我本机并没安装etcd,于是想就直接在docker里玩etcd好了,所以先创建一个docker主机。 docker-machine create --driver virtualbox --engine-registry-mir
jeremyxu
2018/05/10
1.3K0
Etcd 快速搭建一个 etcd 集群的两个方法
最近一直在学习ETCD,搭建一个快速的学习环境是最重要的,官方给了一些搭建的方法,通过git 的方式。这边没有采用,还是使用传统的老的方法。
AustinDatabases
2022/02/09
3.1K0
Etcd  快速搭建一个 etcd  集群的两个方法
Etcd 维护
etcdctl snapshot restore snapshot.db --name m2 --initial-cluster m1=http:/host1:2380,m2=http://host2:2380,m3=http://host3:2380 --initial-cluster-token etcd-cluster-1 --initial-advertise-peer-urls http://host2:2380 $ etcdctl snapshot restore snapshot.db --name m3 --initial-cluster m1=http:/host1:2380,m2=http://host2:2380,m3=http://host3:2380 --initial-cluster-token etcd-cluster-1 --initial-advertise-peer-urls http://host3:2380
用户5760343
2019/10/29
2.5K0
Etcd 维护
etcd配置参数介绍(一)
Etcd是一个开源的高可用分布式键值存储系统,它被广泛用于构建云原生应用,比如Kubernetes。Etcd作为一个分布式系统,有很多配置参数可以用来控制其行为和性能,本文将对Etcd的常见配置参数进行介绍。
玖叁叁
2023/04/28
1.4K0
003.etcd集群部署-静态发现
静态启动etcd集群要求每个成员都知道集群中的另一个成员。Etcd运行在集群的每个coreos节点上,可以保证coreos集群的稳定,可靠的运行。当集群网络出现动荡,或者当前master节点出现异常时,etcd可以进行master节点的选举工作,同时恢复集群中损失的数据。
木二
2019/07/26
7720
彻底搞懂 etcd 系列文章(三):etcd 集群运维部署
etcd 是云原生架构中重要的基础组件,由 CNCF 孵化托管。etcd 在微服务和 Kubernates 集群中不仅可以作为服务注册与发现,还可以作为 key-value 存储的中间件。
aoho求索
2020/06/15
3.2K0
Etcd 高可用分布式键值数据库
etcd是CoreOS团队于2016年6月发起的开源项目,他的目标是构建一个高可用的分布式键值(key_value)数据库。Etcd内部采用raft协议作为一致性算法,Etcd是基于Go语言实现的。目前很火的kubernetes等项目都用到etcd组件作为一个高可用分布式键值存储。
张琳兮
2019/09/02
1K0
Kubernetes-v1.24版安装部署之基础环境准备
本次使用单master节点部署,需要多master请移步至一步步编译安装Kubernetes之master计算节点安装
王先森sec
2023/04/24
4910
Etcd 集群配置
部署环境三台机子: 10.42.5.187 10.42.5.188 10.42.5.189
用户5760343
2019/10/29
8230
Etcd基本部署与使用
在分布式系统中,各种服务配置信息的管理共享和服务发现是一个很基本也是很重要的问题,无论你调用服务还是调度容器,都需要知道对应的服务实例和容器节点地址信息。etcd 就是这样一款实现了元数据信息可靠存储的组件。
Se7en258
2021/05/18
3.7K0
使用Ansible playbooks快速构建etcd集群
本篇文章记录一下使用ansible-playbooks进行快速构建一个可用的etcd集群。在阅读并实践本文章之前,请确保您有一个可用的ansible环境。 一、集群规划 注意:本文档基于centos7+的操作系统上进行构建,在rhel7+系列也可用使用,其他发行版本可酌情参考 etcd_name节点端口 etcd110.0.0.772379/2380 etcd210.0.0.782379/2380 etcd310.0.0.792379/2380 以上节点详情信息用来规划集群规模以及名称角色,配
BGBiao
2018/02/26
1.6K0
使用 StatefulSet 部署 etcd 集群
上文我们简单介绍了 etcd 的基本概念和使用场景,本文就来介绍如何搭建 etcd 集群。在生产环境中,为了整个集群的高可用,etcd 正常都会以集群方式部署,避免单点故障。引导 etcd 集群的启动有以下三种机制:
我是阳明
2020/12/01
3.7K0
使用 StatefulSet 部署 etcd 集群
Windows下安装etcd集群及zRPC的简单使用
etcd是CoreOS团队于2013年6月发起的开源项目,它的目标是构建一个高可用的分布式键值(key-value)数据库。etcd内部采用raft协议作为一致性算法,etcd基于Go语言实现。
杨永贞
2021/03/04
3.2K0
ETCD入门指南
之前对etcd不是很了解,于是下定决心学习一下。随手把过程记录了一下,希望对大家有帮助。
没有故事的陈师傅
2021/08/13
5210
彻底搞懂 etcd 系列文章(四):etcd 安全
etcd 是云原生架构中重要的基础组件,由 CNCF 孵化托管。etcd 在微服务和 Kubernates 集群中不仅可以作为服务注册与发现,还可以作为 key-value 存储的中间件。
aoho求索
2020/06/10
7770
还不了解 etcd?一文带你快速入门(万字长文)
2018年12月 etcd 作为孵化项目 CNCF(云原生计算基金会),几天前 CNCF 宣布 etcd 正式毕业,成为 CNCF 顶级项目。CNCF 官方表示 etcd 项目的采用率持续增加,也有稳定的治理流程,功能已达一定成熟度。
aoho求索
2020/12/01
18.4K0
还不了解 etcd?一文带你快速入门(万字长文)
超全etcd管理指南,不看也得收藏
生产环境中给etcd配置证书相当重要,如果没有证书,那么k8s集群很容易被黑客利用而去挖矿什么的。做法非常简单,比如你下了一个不安全的镜像,通过程序扫描到etcd的ip和端口,那么黑客就可以绕开apiserver的认证直接写数据,写一些deployment pod等等,apiserver就会读到这些,从而去部署黑客的程序。 我们就有一个集群这样被利用去挖矿了,安全无小事,如果黑客恶意攻击也可轻松删除你的所有数据,所以证书与定期备份都很重要,即便有多个etcd节点,本文深入探讨etcd管理的重要的几个东西。
sealyun
2019/07/25
1.3K0
推荐阅读
相关推荐
Kubernetes之etcd数据库
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验