什么是Etcd,如何运维Etcd ?
介绍
ETCD 是一个分布式、可靠的 key-value 存储的分布式系统,用于存储分布式系统中的关键数据;当然,它不仅仅用于存储,还提供配置共享及服务发现;基于Go语言实现。
ETCD的特点
简单:定义明确,面向用户的API(gRPC)
安全:具有可选客户端证书身份验证的自动TLS
快速:基准10,000次写入/秒
可靠:使用Raft正确分发
ETCD的作用
etcd中存储了集群的元数据信息,集群状态和网络配置,在高可用集群中往往会采用奇数节点(最少3个)的集群。
ETCD proxy功能简介
etcd提供了proxy功能,即代理功能,etcd可以代理的方式来运行。
etcd代理可以运行在每一台主机,在这种代理模式下,etcd的作用就是一个反向代理,把客户端的etcd请求转发到真正的etcd集群。这种方式既加强了集群的弹性,又不会降低集群的写的性能。
在rainbond集群中,除管理节点以外的其他节点都通过etcd-proxy方式与etcd服务端建立连接。
ETCD常用运维命令
etcd 提供了 etcdctl 命令行工具 和 HTTP API 两种交互方法。etcdctl命令行工具用 go 语言编写,也是对 HTTP API 的封装,日常使用起来也更容易。所以这里我们主要使用 etcdctl 命令行工具演示。
- etcd最新的API版本是v3,与v2相比,v3更高效更清晰。要使用v3,设置环境变量即可。
 
export ETCDCTL_API=3
etcdctl version
- 列出集群内的成员以及他们当前的角色是不是leader
 
etcdctl member list
- 查看节点状态
 
etcdctl endpoint health
- 跟集群成员相关的命令如下:
 
member add        添加成员
member remove     删除成员
member update     更新集群中的一个成员
member list       列出及集群中的成员
- 通过 put 将 key 和 value 存储到 etcd 集群中。每个存储的密钥都通过 Raft 协议复制到所有 etcd 集群成员,以实现一致性和可靠性。示例:
 
设置键的值的命令 key 到 value:
$ etcdctl put key value
OK
- 从etcd 集群中读取 key 的值。
 
etcdctl get  key
上述命令同时返回 key 和 value,如果只读取 key 对应的值,则使用以下命令
etcdctl get key --print-value-only
按key前缀查找rainbond集群所有节点信息
etcdctl get /rainbond/node  --prefix
- 监测一个键值的变化,一旦键值发生更新,就会输出最新的值
 
etcdctl watch key
- 删除key
 
删除 key 为 key的命令
$ etcdctl del key
1
删除具有前缀的键的命令:
etcdctl del --prefix key
- 更新内容
 
$  etcdctl put key testvalue
OK
$  etcdctl get key
key
testvalue
端口
| 端口 | 端口说明 | 
|---|---|
| 2380 | 和集群中其他节点通信 | 
| 2379 | 提供 HTTP API 服务,供客户端交互 | 
常见参数配置项解析
1 成员相关标识
--name
含义:此成员的名称。
默认值:default
环境变量:ETCD_NAME
作用:此配置值作为此节点在--initial-cluster标志中列出的条目(例如,default=http://localhost:2380)引用。若使用静态引导,则需要匹配标志中使用的密钥。使用发现时,每个成员必须具有唯一的名称。建议使用Hostname或者machine-id。
注意:使用发现时,每个成员必须具有唯一的名称。
--data-dir
含义:服务运行数据保存的路径。
默认值:${name}.etcd
环境变量:ETCD_DATA_DIR
作用:设置数据保存的目录。
--wal-dir
含义:专用wal目录的路径。
默认值:--data-dir的路径下
环境变量:ETCD_WAL_DIR
作用:独立设置wal目录,etcd会将WAL文件写入--wal-dir而不是--data-dir。独立的wal路径,有助于避免日志记录和其他IO操作之间的竞争。
--snapshot-count
含义:触发快照到磁盘的已提交事务数。
默认值:100000
环境变量:ETCD_SNAPSHOT_COUNT
作用:指定有多少事务(transaction)被提交时,触发截取快照保存到磁盘。
--heartbeat-interval
含义:心跳间隔的时间(以毫秒为单位)
默认值:100
环境变量:ETCD_HEARTBEAT_INTERVAL
作用:leader 多久发送一次心跳到 followers。
--election-timeout
含义:选举超时的时间(以毫秒为单位)
默认值:1000
环境变量:ETCD_ELECTION_TIMEOUT
作用:重新投票的超时时间,如果 follow 在该时间间隔没有收到心跳包,会触发重新投票,默认为 1000 ms。
--listen-peer-urls
含义:和成员之间通信的地址。
默认值:http://localhost:2380
环境变量:ETCD_LISTEN_PEER_URLS
作用:用于监听其他etcd member的url
提示:域名为无效值,如http://example.com:2380为错误配置。
--listen-client-urls
含义:对外提供服务的地址
默认值:http://localhost:2379
环境变量:ETCD_LISTEN_CLIENT_URLS
作用:对外提供服务的地址。
提示:域名为无效值,如http://example.com:2379为错误配置。
--max-snapshots
含义:要保留的最大快照文件数(0表示不受限制)。
默认值:5
环境变量:ETCD_MAX_SNAPSHOTS
作用:
提示:Windows上的用户默认值不受限制,建议手动清除至5。
--max-wals
含义:要保留的最大wal文件数(0表示不受限制)。
默认值:5
环境变量:ETCD_MAX_WALS
作用:
提示:Windows上的用户默认值不受限制,建议手动清除至5。
--cors
含义:逗号分隔的CORS原始白名单(跨源资源共享)
默认值:
环境变量:ETCD_CORS
--quota-backend-bytes(4294967296)
含义:当后端大小超过给定配额时(0默认为低空间配额),引发警报。
默认值:0
环境变量:ETCD_QUOTA_BACKEND_BYTES
--max-txn-ops
含义:事务中允许的最大操作数。
默认值:128
环境变量:ETCD_MAX_TXN_OPS
--max-request-bytes
含义:服务器将接受的最大客户端请求大小(字节)。
默认值:1572864
环境变量:ETCD_MAX_REQUEST_BYTES
--grpc-keepalive-min-time
含义:客户端在ping服务器之前应等待的最短持续时间间隔。
默认值:5s
环境变量:ETCD_GRPC_KEEPALIVE_MIN_TIME
--grpc-keepalive-interval
含义:服务器到客户端ping的频率持续时间,以检查连接是否处于活动状态(0表示禁用)。
默认值:2h
环境变量:ETCD_GRPC_KEEPALIVE_INTERVAL
--grpc-keepalive-timeout
含义:关闭非响应连接之前的额外持续等待时间(0表示禁用)。
默认值:20s
环境变量:ETCD_GRPC_KEEPALIVE_TIMEOUT
2 集群相关标识
提示:--initial-advertise-peer-urls, --initial-cluster, --initial-cluster-state, and --initial-cluster-token标识用于引导一个新成员,当重启一个已经存在的成员时将忽略。
--initial-advertise-peer-urls
含义:该节点成员对等URL地址,且会通告群集的其余成员节点。
默认值:http://localhost:2380
环境变量:ETCD_INITIAL_ADVERTISE_PEER_URLS
作用:
--initial-cluster
含义:集群中所有节点的信息。
默认值:default=http://localhost:2380
环境变量:ETCD_INITIAL_CLUSTER
作用:
注意:此处default为节点的--name指定的名字;localhost:2380为--initial-advertise-peer-urls指定的值。
--initial-cluster-state
含义:初始集群状态
默认值:new
环境变量:ETCD_INITIAL_CLUSTER_STATE
作用:设置new为初始静态或DNS引导期间出现的所有成员。如果将此选项设置为existing,则etcd将尝试加入现有群集。
--initial-cluster-token
含义:创建集群的 token,这个值每个集群保持唯一。
默认值:etcd-cluster
环境变量:ETCD_INITIAL_CLUSTER_TOKEN
作用:此配置可使重新创建集群,即使配置和之前一样,也会再次生成新的集群和节点 uuid;否则会导致多个集群之间的冲突,造成未知的错误。
--advertise-client-urls
含义:此成员的客户端URL列表,用于通告群集的其余部分。这些URL可以包含域名。
默认值:http://localhost:2379
环境变量:ETCD_ADVERTISE_CLIENT_URLS
作用:对外公告的该节点客户端监听地址。
--discovery
含义:用于引导群集的发现URL。
默认值:
环境变量:ETCD_DISCOVERY
作用:
--discovery-srv
含义:DNS srv域用于引导群集。
默认值:
环境变量:ETCD_DISCOVERY_SRV
作用:
--discovery-srv-name
含义:使用DNS引导时查询的DNS srv名称的后缀。
默认值:
环境变量:ETCD_DISCOVERY_SRV_NAME
作用:
--discovery-fallback
含义:发现服务失败时的预期行为(“退出”或“代理”)。“proxy”仅支持v2 API。
默认值:proxy
环境变量:ETCD_DISCOVERY_FALLBACK
作用:
--discovery-proxy
含义:用于流量到发现服务的HTTP代理。
默认值:
环境变量:ETCD_DISCOVERY_PROXY
作用:
--strict-reconfig-check
含义:拒绝可能导致仲裁丢失的重新配置请求。
默认值:false
环境变量:ETCD_STRICT_RECONFIG_CHECK
作用:
--auto-compaction-retention
含义:在一个小时内为mvcc键值存储的自动压实保留。0表示禁用自动压缩。
默认值:0
环境变量:ETCD_AUTO_COMPACTION_RETENTION
作用:
--auto-compaction-mode
含义:说明--auto-compaction-retention配置的基于时间保留的三种模式:periodic, revision. periodic
默认值:periodic
环境变量:ETCD_AUTO_COMPACTION_MODE
作用:
--enable-v2
含义:接受etcd V2客户端请求
默认值:true
环境变量:ETCD_ENABLE_V2
作用:
2.3 代理相关标识
提示:--proxy配置etcd以在代理模式下运行,“proxy”仅支持v2 API。
--proxy
含义:代理模式设置,("off", "readonly" or "on")
默认值:off
环境变量:ETCD_PROXY
作用:
--proxy-failure-wait
含义:在重新考虑代理请求之前,endpoints 将处于失败状态的时间(以毫秒为单位)。
默认值:5000
环境变量:ETCD_PROXY_FAILURE_WAIT
作用:
--proxy-refresh-interval
含义:endpoints 刷新间隔的时间(以毫秒为单位)。
默认值:30000
环境变量:ETCD_PROXY_REFRESH_INTERVAL
作用:
--proxy-dial-timeout
含义:拨号超时的时间(以毫秒为单位)或0表示禁用超时
默认值:1000
环境变量:ETCD_PROXY_DIAL_TIMEOUT
作用:
--proxy-write-timeout
含义:写入超时的时间(以毫秒为单位)或0以禁用超时。
默认值:5000
环境变量:ETCD_PROXY_WRITE_TIMEOUT
作用:
--proxy-read-timeout
含义:读取超时的时间(以毫秒为单位)或0以禁用超时。
默认值:0
环境变量:ETCD_PROXY_READ_TIMEOUT
作用:
2.4 安全相关标识
--ca-file
提示:已弃用,可以替换为--trusted-ca-file ca.crt、--client-cert-auth,etcd将执行相同的操作。
--cert-file
含义:客户端服务器TLS证书文件的路径。
默认值:
环境变量:ETCD_CERT_FILE
作用:
--key-file
含义:客户端服务器TLS密钥文件的路径。
默认值:
环境变量:ETCD_KEY_FILE
作用:
--client-cert-auth
含义:启用客户端证书验证。
默认值:false
环境变量:ETCD_CLIENT_CERT_AUTH
作用:
--client-crl-file
含义:客户端证书吊销列表文件的路径。
默认值:
环境变量:ETCD_CLIENT_CRL_FILE
作用:
--trusted-ca-file
含义:客户端服务器的路径TLS可信CA证书文件。
默认值:
环境变量:ETCD_TRUSTED_CA_FILE
作用:
--auto-tls
含义:客户端TLS使用生成的证书
默认值:false
环境变量:ETCD_AUTO_TLS
作用:
--peer-ca-file
提示:已弃用,可以替换为--peer-trusted-ca-file ca.crt --peer-client-cert-auth,etcd将执行相同的操作。
--peer-cert-file
含义:对等服务器TLS证书文件的路径。这是对等流量的证书,用于服务器和客户端。
默认值:
环境变量:ETCD_PEER_CERT_FILE
作用:
--peer-key-file
含义:对等服务器TLS密钥文件的路径。这是对等流量的关键,用于服务器和客户端。
默认值:
环境变量:ETCD_PEER_KEY_FILE
作用:
--peer-client-cert-auth
含义:启用对等客户端证书验证。
默认值:false
环境变量:ETCD_PEER_CLIENT_CERT_AUTH
作用:
--peer-crl-file
含义:对等证书吊销列表文件的路径。
默认值:
环境变量:ETCD_PEER_CRL_FILE
作用:
--peer-trusted-ca-file
含义:对等服务器TLS可信CA文件的路径。
默认值:
环境变量:ETCD_PEER_TRUSTED_CA_FILE
作用:
--peer-auto-tls
含义:Peer TLS使用自动生成的证书
默认值:false
环境变量:ETCD_PEER_AUTO_TLS
作用:
--peer-cert-allowed-cn
含义:允许CommonName进行对等体认证。
默认值:none
环境变量:ETCD_PEER_CERT_ALLOWED_CN
作用:
2.5 日志相关标识
--logger
含义:为结构化日志记录指定'zap'或'capnslog'。
默认值:capnslog
环境变量:ETCD_LOGGER
作用:
--log-outputs
含义:指定'stdout'或'stderr'以跳过日志记录,即使在systemd或逗号分隔的输出目标列表下运行也是如此。
默认值:default
环境变量:ETCD_LOG_OUTPUT
作用:
--debug
含义:将所有子包的默认日志级别设置为DEBUG。
默认值:false(所有包的INFO)
环境变量:ETCD_DEBUG
作用:
--log-package-levels
含义:将单个etcd子包设置为特定的日志级别。一个例子是etcdserver=WARNING,security=DEBUG
默认值:(所有包的INFO)
环境变量:ETCD_LOG_PACKAGE_LEVELS
作用:
2.6 非安全相关标识
--force-new-cluster
含义:强制创建新的单成员群集。它提交配置更改,强制删除集群中的所有现有成员并添加自身。需要将其设置为还原备份。
默认值:false
环境变量:ETCD_FORCE_NEW_CLUSTER
作用:
2.7 配置文件相关标识
--enable-pprof
含义:通过HTTP服务器启用运行时分析数据。地址位于客户端URL +“/ debug / pprof /”
默认值:false
环境变量:
作用:
--metrics
含义:设置导出的指标的详细程度,指定“扩展”以包括直方图指标。
默认值:basic
环境变量:
作用:
--listen-metrics-urls
含义:要监听的其他URL列表将响应端点/metrics和/health端点
默认值:
环境变量:
作用:
2.8 其他相关标识
--version
含义:打印版本并退出。
默认值:false
环境变量:
作用:
--config-file
含义:从文件加载服务器配置。
默认值:
环境变量:
作用:从配置文件加载相关配置。
2.9 认证相关标识
--auth-token
略
--bcrypt-cost
含义:为散列身份验证密码指定bcrypt算法的成本/强度。有效值介于4和31之间。
默认值:10
环境变量:
作用:
ETCD备份恢复
备份
由于etcd的强一致性,备份一个节点的数据即可,生产环境中,为了防止单节点异常没有生成备份,可以多加几个节点
export ETCDCTL_API=3
etcdctl --endpoints=http://节点IP:2379 snapshot save /etcd_bak/snap-$(date +%Y%m%d%H%M).db
恢复
etcdctl snapshot restore snapshot.db --name m3 --data-dir=/etcd_bak/snap-...db
相关资料推荐
ETCD 项目地址:https://github.com/etcd-io/etcd
ETCD官方文档:https://etcd.io/
ETCD官方文档中文版:https://doczhcn.gitbook.io/etcd/
CoreOS实战剖析ETCD: https://www.infoq.cn/article/coreos-analyse-etcd/
ETCD性能优化实践:https://www.kubernetes.org.cn/6295.html
ETCD灾难恢复: https://skyao.gitbooks.io/learning-etcd3/content/documentation/op-guide/recovery.html
什么是Etcd,如何运维Etcd ?的更多相关文章
- Etcd常用运维命令
		
目录 常用命令 常见操作 如何缩容? 如何扩容? 数据目录丢失或被误删除,节点启动失败或者加入集群报错? 操作步骤 操作步骤不正确的各种常见错误日志 常用命令 #查看集群member情况 etcdct ...
 - 灵雀云:etcd 集群运维实践
		
[编者的话]etcd 是 Kubernetes 集群的数据核心,最严重的情况是,当 etcd 出问题彻底无法恢复的时候,解决问题的办法可能只有重新搭建一个环境.因此围绕 etcd 相关的运维知识就比较 ...
 - saltstack自动化运维系列11基于etcd的saltstack的自动化扩容
		
saltstack自动化运维系列11基于etcd的saltstack的自动化扩容 自动化运维-基于etcd加saltstack的自动化扩容# tar -xf etcd-v2.2.1-linux-amd ...
 - etcd 集群运维实践
		
etcd 是 Kubernetes 集群的数据核心,最严重的情况是,当 etcd 出问题彻底无法恢复的时候,解决问题的办法可能只有重新搭建一个环境.因此围绕 etcd 相关的运维知识就比较重要,etc ...
 - 彻底搞懂 etcd 系列文章(三):etcd 集群运维部署
		
0 专辑概述 etcd 是云原生架构中重要的基础组件,由 CNCF 孵化托管.etcd 在微服务和 Kubernates 集群中不仅可以作为服务注册与发现,还可以作为 key-value 存储的中间件 ...
 - 运维知识体系v0.5
		
http://www.90qj.com/?post=318http://ixdba.blog.51cto.com/2895551/1751377 运维知识体系v0.5-(运维社区-赵班长出品,欢迎 ...
 - 从一到万的运维之路,说一说VM/Docker/Kubernetes/ServiceMesh
		
摘要:本文从单机真机运营的历史讲起,逐步介绍虚拟化.容器化.Docker.Kubernetes.ServiceMesh的发展历程.并重点介绍了容器化阶段之后,各项重点技术的安装.使用.运维知识.可以说 ...
 - saltstack运维软件
		
一.saltstack介绍 1.介绍 SaltStack管理工具允许管理员对多个操作系统创建一个一致的管理系统,包括VMware vSphere环境. SaltStack是一个服务器基础架构集中化管理 ...
 - Docker集群管理工具 - Kubernetes 部署记录  (运维小结)
		
一. Kubernetes 介绍 Kubernetes是一个全新的基于容器技术的分布式架构领先方案, 它是Google在2014年6月开源的一个容器集群管理系统,使用Go语言开发,Kubernete ...
 
随机推荐
- Helm 带你飞
			
文章目录 目录 文章目录 在没使用 Helm之前,向 K8S部署应用,我们要依次部署 deployment. svc 等,步骤较繁琐.况且随着很多项目微服务化,复杂的应用在容器中部署以及管理显得较为复 ...
 - VS2019开启调试,测试图片上传的时候,一点到图片上传,直接导致VS调试崩掉,返回 程序“[14764] iisexpress.exe”已退出,返回值为 -1 (0xffffffff)。 是什么原因导致的?
			
试着使用管理员身份运行vs 今天调试的时候遇到个奇葩问题 一点上传控件选择文件后 就终止调试 发现根源不在上传控件 而是本地的中文输入法!关掉vs自动终止调试设置就好了 工具->选项-> ...
 - Hyperledger fabric 链码篇GO(四)
			
Hyperledger fabric 链码篇GO(四) fabric中的链码也就是我们区块链所认知的智能合约,fabric中可由nodejs,java,go编写,本篇只针对GO语言编写链码.将详细介绍 ...
 - 在GitHub里面如何删除库
			
GitHub是一个面向开源及私有软件项目的托管平台,今天将为大家介绍如何在GitHub中彻底删除一个代码仓库. 在GitHub里面如何删除库 1.先进入个人仓库里面 2.点击进入你想要的删除的库 3. ...
 - [每日一题]ES6中为什么要使用Symbol?
			
关注「松宝写代码」,精选好文,每日面试题 加入我们一起学习,day day up 作者:saucxs | songEagle 来源:原创 一.前言 2020.12.23日刚立的flag,每日一题,题目 ...
 - [leetcode]207. Course Schedule课程表
			
在一个有向图中,每次找到一个没有前驱节点的节点(也就是入度为0的节点),然后把它指向其他节点的边都去掉,重复这个过程(BFS),直到所有节点已被找到,或者没有符合条件的节点(如果图中有环存在). /* ...
 - SpringBoot文件上传配置
			
/** * 文件上传配置 * @return */ @Bean public MultipartConfigElement multipartConfigElement() { MultipartCo ...
 - Redis学习笔记之数据库(一)
			
说句实话,redis这个软件要学习的东西实在多,多到,看的多了就容易迷失,而且还记不住.个人觉得靠记忆去学习一个知识肯定是比较糟糕的,所以还是要带着理解的,最终变成自己的东西,那这个东西才是自己的. ...
 - 第13章节 BJROBOT 雷达跟随【ROS全开源阿克曼转向智能网联无人驾驶车】
			
雷达跟随说明:注意深度摄像头的 USB 延长线,可能会对雷达扫描造成影响, 所以在雷达跟随前,把深度摄像头的 USB 延长线取下.另外雷达跟随范围大概是前方 50cm 和 120°内扫描到的物体都可以 ...
 - C++ 入门篇
			
C++基础入门 1 C++初识 1.1 第一个C++程序 编写一个C++程序总共分为4个步骤 创建项目 创建文件 编写代码 运行程序 1.1.1 创建项目  Visual Studio是我们用来编写 ...