etcd 入门实战(1)-简介及安装

打印 上一主题 下一主题

主题 1682|帖子 1682|积分 5046

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?立即注册

x
‌etcd 是一个分布式的、可靠的键值存储体系,专门用于保存分布式体系中最关键的数据。‌本文主要包括 etcd 简介和安装;文中所使用到的软件版本:etcd 3.5.18、Centos 7.9.2009。
1、简介

etcd 是一个强同等性的分布式键值存储体系,提供了一种可靠的方式来存储分布式体系的数据。它能够优雅地在网络分区期间举行 leader 推举,并且可以容忍呆板故障,甚至在 leader 节点中也是云云。
1.1、etcd 功能

1.2.1、监控

监控(Watch) 是指 etcd 客户端可以持续监听某个键值对或键值对范围的变化(包括增、删、改)。一旦发生变化,etcd 会将变化的内容推送给监控客户端,而无需客户端自动去查询。
1.2.2、租约

在 etcd 中,租约(Lease) 是一种机制,用于为键值对(KV)赋予一个生命周期。租约的引入是为了支持 TTL(Time-to-Live),即键值对在一定时间内有效,超时后会自动被删除。租约在分布式体系中非常有效,特殊是在协调同等性和保持数据更新时。
租约的关键概念:
创建租约:当你为某个键值对分配租约时,这个键值对会与租约绑定。
续约:租约可以被续约。续约意味着你可以通过延伸租约的生存时间来防止它过期。每次续约都会重置租约的到期时间。
租约过期:如果租约过期了,所有与该租约绑定的键值对将会被删除。
租约ID:每个租约都会有一个唯一的ID,用于标识该租约。通过该ID,用户可以管理租约的生命周期,包括续约、删除等操作。
1.2.3、基于租约的锁

etcd 提供了一个可靠、高效且强同等性的方式来实现分布式锁。基于租约的锁使用了 etcd 的租约(lease) 功能。在这种机制下,客户端可以为锁设置一个超时时间(即租约的生存时间),如果在指定时间内客户端没有续期租约,etcd 会自动删除该锁,从而制止死锁的发生。
1.2.4、推举

etcd 推举是基于 Raft 协议 实现的分布式 leader 推举机制。它用于保证在分布式体系中始终有一个唯一的 leader 节点来协调其他节点的工作。这是分布式同等性算法中的一个焦点概念,确保体系中的所有节点对某个关键决策(如配置、资源分配等)告竣同等,并且可以容忍部分节点故障而不影响体系的正常运行。
1.2、与 zookeeper 的区别

etcd 和 Zookeeper 都是分布式体系中常用的协调服务,它们都有存储配置数据、服务发现、提供高可用性和同等性等功能;虽然它们有很多相似之处,但也有一些区别。
特性etcdZookeeper同等性协议RaftZAB数据模子键值存储(KV)树状布局(Znodes)性能通常更快,特殊是在写操作方面相对较慢,特殊是在高并发写操作时API简单,支持 HTTP/gRPC,当代化相对复杂,主要支持 Java用途配置管理、服务发现、集群状态存储分布式协调、分布式锁、推举、队列等集群扩展性通常支持 7 个节点以内的集群支持较大的集群适用场景Kubernetes、云原生架构等大数据体系、分布式应用等2、安装

2.1、单机安装

2.1.1、下载并解压 etcd

Github(https://github.com/etcd-io/etcd/releases) 下载 etcd 的二进制包,然后解压:
  1. tar zxvf etcd-v3.5.18-linux-amd64.tar.gz
复制代码
2.1.2、启动
  1. ./etcd \
  2. --listen-client-urls=http://10.49.196.33:2379,http://127.0.0.1:2379 \
  3. --advertise-client-urls=http://10.49.196.33:2379
复制代码
2.2、集群安装

假设在 10.49.196.30、10.49.196.31、10.49.196.32 三台呆板上安装 etcd,在各呆板上下载并解压 etcd 二进制包。
2.2.1、启动

10.49.196.30 上启动 etcd
  1. ./etcd --name infra0 \
  2.   --initial-advertise-peer-urls http://10.49.196.30:2380 \
  3.   --listen-peer-urls http://10.49.196.30:2380 \
  4.   --listen-client-urls http://10.49.196.30:2379,http://127.0.0.1:2379 \
  5.   --advertise-client-urls http://10.49.196.30:2379 \
  6.   --initial-cluster-token etcd-cluster-1 \
  7.   --initial-cluster infra0=http://10.49.196.30:2380,infra1=http://10.49.196.31:2380,infra2=http://10.49.196.32:2380 \
  8.   --initial-cluster-state new
复制代码
10.49.196.31 上启动 etcd
  1. ./etcd --name infra1 \
  2.   --initial-advertise-peer-urls http://10.49.196.31:2380 \
  3.   --listen-peer-urls http://10.49.196.31:2380 \
  4.   --listen-client-urls http://10.49.196.31:2379,http://127.0.0.1:2379 \
  5.   --advertise-client-urls http://10.49.196.31:2379 \
  6.   --initial-cluster-token etcd-cluster-1 \
  7.   --initial-cluster infra0=http://10.49.196.30:2380,infra1=http://10.49.196.31:2380,infra2=http://10.49.196.32:2380 \
  8.   --initial-cluster-state new
复制代码
10.49.196.32 上启动 etcd 启动
  1. ./etcd --name infra2 \
  2.   --initial-advertise-peer-urls http://10.49.196.32:2380 \
  3.   --listen-peer-urls http://10.49.196.32:2380 \
  4.   --listen-client-urls http://10.49.196.32:2379,http://127.0.0.1:2379 \
  5.   --advertise-client-urls http://10.49.196.32:2379 \
  6.   --initial-cluster-token etcd-cluster-1 \
  7.   --initial-cluster infra0=http://10.49.196.30:2380,infra1=http://10.49.196.31:2380,infra2=http://10.49.196.32:2380 \
  8.   --initial-cluster-state new
复制代码
以 --initial-cluster 开头的参数将在后续的 etcd 启动中被忽略;可以在初始引导过程完成后,放心地删除这些参数。
2.2.2、删除成员

可以从集群中删除成员,先使用命令(./etcdctl member list)查当作员列表:
  1. 3fcb05114d00bff, started, infra1, http://10.49.196.31:2380, http://10.49.196.31:2379, false
  2. 39d5fdc963168cff, started, infra0, http://10.49.196.30:2380, http://10.49.196.30:2379, false
  3. 714552ae5b7875d1, started, infra2, http://10.49.196.32:2380, http://10.49.196.32:2379, false
复制代码
这里删除 infra2 这个节点:
  1. ./etcdctl member remove 714552ae5b7875d1
复制代码
再次查当作员列表:
  1. 3fcb05114d00bff, started, infra1, http://10.49.196.31:2380, http://10.49.196.31:2379, false
  2. 39d5fdc963168cff, started, infra0, http://10.49.196.30:2380, http://10.49.196.30:2379, false
复制代码
2.2.3、添加成员

可以向集群中添加新的成员,这里添加成员 infra3(http://10.49.196.33:2380)。
A、通过 HTTP 成员 API、gRPC 成员 API 或 etcdctl member add 命令将新成员添加到集群中
  1. ./etcdctl member add infra3 --peer-urls=http://10.49.196.33:2380
复制代码
B、使用新的集群配置启动新成员
  1. ./etcd --name infra3 \
  2.   --initial-advertise-peer-urls http://10.49.196.33:2380 \
  3.   --listen-peer-urls http://10.49.196.33:2380 \
  4.   --listen-client-urls http://10.49.196.33:2379,http://127.0.0.1:2379 \
  5.   --advertise-client-urls http://10.49.196.33:2379 \
  6.   --initial-cluster-token etcd-cluster-1 \
  7.   --initial-cluster infra0=http://10.49.196.30:2380,infra1=http://10.49.196.31:2380,infra3=http://10.49.196.33:2380 \
  8.   --initial-cluster-state existing
复制代码
再次查当作员列表:
  1. 3fcb05114d00bff, started, infra1, http://10.49.196.31:2380, http://10.49.196.31:2379, false
  2. 39b5a133e03275b4, started, infra3, http://10.49.196.33:2380, http://10.49.196.33:2379, false
  3. 39d5fdc963168cff, started, infra0, http://10.49.196.30:2380, http://10.49.196.30:2379, false
复制代码
2.3、配置阐明

2.3.1、命令行参数

etcd 启动时,可以根据需要调整参数的默认值;通过 "./etcd -h" 查看所有的参数。
A、Member
参数阐明默认值
name成员名称default
data-dir数据目录${name}.etcd
wal-dirwal 目录 
snapshot-count触发快照写入磁盘的已提交事务数目100000
heartbeat-interval心跳间隔(ms)100
election-timeout推举超时时间(ms)1000
listen-peer-urls节点间通信监听地址http://localhost:2380
listen-client-urls客户端哀求监听地址,包括 http 和 grpc 哀求http://localhost:2379
listen-client-http-urls客户端哀求 http 监听地址,改参数将会从 listen-client-urls 中删除 http 服务 
max-snapshots最大快照文件数5
max-wals最大 wal 文件时5
B、Clustering
参数阐明默认值
initial-advertise-peer-urls对外发布的节点间通信地址http://localhost:2380
initial-cluster初始化集群的配置信息default=http://localhost:2380
initial-cluster-state初始化集群的状态('new' or 'existing')new
initial-cluster-token初始化集群的令牌 
advertise-client-urls对外发布的客户端哀求地址http://localhost:2379
2.3.2、情况变量

每个参数都有一个对应的情况变量,情况变量的名称与参数相同,但前面会加上 ETCD_ 前缀,并且接纳全大写和蛇形定名法。例如,--some-flag 对应的情况变量为 ETCD_SOME_FLAG。
例如,可以使用以下脚本启动 etcd:
  1. export ETCD_LISTEN_CLIENT_URLS="http://10.49.196.33:2379,http://127.0.0.1:2379"
  2. export ETCD_ADVERTISE_CLIENT_URLS="http://10.49.196.33:2379"
  3. ./etcd
复制代码
2.3.3、配置文件

也可以把参数写到配置文件中,启动时指定配置文件。
A、新建 etcd.conf.yml 配置文件
  1. listen-client-urls: http://10.49.196.33:2379
  2. advertise-client-urls: http://10.49.196.33:2379
复制代码
B、通过配置文件启动 etcd
  1. ./etcd --config-file=./etcd.conf.yml
复制代码
更多配置可查看官方提供的样例文件:https://github.com/etcd-io/etcd/blob/main/etcd.conf.yml.sample。
2.3.4、配置优先级

命令行参数优先于情况变量。
如果提供了配置文件,则所有命令行参数和情况变量将被忽略。
 
参考:
https://etcd.io/docs/v3.5/op-guide/clustering/。
 

免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。
回复

使用道具 举报

0 个回复

倒序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

大连密封材料

论坛元老
这个人很懒什么都没写!
快速回复 返回顶部 返回列表