没有合适的资源?快使用搜索试试~ 我知道了~
etcd实战及其原理分析
资源推荐
资源详情
资源评论
etcd是一个Go语言编写的分布式、高可用的一致性键值存储系统,用于提供可靠的分布式
键值(key-value)存储、配置共享和服务发现等功能。
官网:https://etcd.io/
文档:https://etcd.io/docs/v3.5/quickstart/
1.2etcd的应用场景
分布式系统中的数据分为控制数据和应用数据。etcd的使用场景默认处理的数据都是控制
数据,对于应用数据,只推荐数据量很小,但是更新访问频繁的情况。常见的etcd使用场
景包括:服务发现、分布式锁、分布式队列、分布式通知和协调、主备选举等。
1.3为什么使用etcd
与ZooKeeper相比,etcd更简单,安装、部署和使用更加容易,并且etcd的某些功能是
ZooKeeper所没有的。因此,在很多场景下,etcd比ZooKeeper更受用户的青睐,具体表
现在如下几个方面:
etcd更加稳定可靠,它的唯一目标就是把分布式一致性KV存储做到极致,所以
它更注重稳定性和扩展性。
在服务发现的实现上,etcd使用的是节点租约(Lease),并且支持Group(多
key);而ZooKeeper使用的是临时节点,临时节点存在不少的问题。
etcd支持稳定的watch,而不是ZooKeeper一样简单的单次触发(onetime
trigger)watch。因为在微服务的环境下,通过调度系统的调度,一个服务随时可能
会下线,也可能为应对临时访问压力而增加新的服务节点,而很多调度系统是需要得
到完整节点历史记录的,在这方面,etcd可以存储数十万个历史变更。
etcd支持MVCC(多版本并发控制),因为有协同系统需要无锁操作。
etcd支持更大的数据规模,支持存储百万到千万级别的key。
相比ZooKeeper,etcd的性能更好。在一个由3台8核节点组成的云服务器上,
etcdv3版本可以做到每秒数万次的写操作和数十万次的读操作。
1.4etcd架构
上图是etcd基础架构图,按照分层模型,etcd可分为Client层、API网络层、Raft算法层、
逻辑层和存储层。这些层的功能如下:
Client层:Client层包括clientv2和v3两个大版本APl客户端库,提供了简洁易用
的API,同时支持负载均衡、节点间故障自动转移,可极大降低业务使用etcd复杂
度,提升开发效率、服务可用性。
API网络层:API网络层主要包括client访问server和server节点之间的通信协议。
一方面,client访问etcdserver的API分为v2和v3两个大版本。v2API使用HTTP/1.x
协议,v3API使用gRPC协议。同时v3通过etcdgrpc-gateway组件也支持
HTTP/1.x协议,便于各种语言的服务调用。另一方面,server之间通信协议,是指
节点间通过Raft算法实现数据复制和Leader选举等功能时使用的HTTP协议。
Raft算法层:Raft算法层实现了Leader选举、日志复制、ReadIndex等核心算
法特性,用于保障etcd多个节点间的数据一致性、提升服务可用性等,是etcd的基石
和亮点。
功能逻辑层:etcd核心特性实现层,如典型的KVServer模块、MVCC模块、
Auth鉴权模块、Lease租约模块、Compactor压缩模块等,其中MVCC模块主要由
treelndex模块和boltdb模块组成。
存储层:存储层包含预写日志(WAL)模块、快照(Snapshot)模块、boltdb模块。
其中WAL可保障etcdcrash后数据不丢失,boltdb则保存了集群元数据和用户写入
的数据。
2.etcd实战
2.1etcd环境搭建
对于搭建开发和测试环境,最简单和快捷的方式是在本地部署一个单机版或集群版的etcd
环境。
单实例etcd部署
etcd社区提供了编译好的etcd服务器和客户端的二进制文件以供下载
1 wgethttps://github.com/etcd‐io/etcd/releases/download/v3.5.5/etcd‐
v3.5.5‐linux‐amd64.tar.gz
2 tar‐zxvfetcd‐v3.5.5‐linux‐amd64.tar.gz
3 cdetcd‐v3.5.5‐linux‐amd64/
4 #启动etcd服务
5 ./etcd
6 #后台启动etcd,日志文件输出到/tmp/etcd.log目录
7 nohup./etcd>/tmp/etcd.log2>&1&
8 #查看etcd版本
9 ./etcd‐version
10 #将etcd和etcdctl复制到/usr/local/bin目录,系统中可以直接调用etcd/etcdctl
11 cpetcdetcdctl/usr/local/bin
启动的etcd进程默认在2379端口监听来自客户端的请求。用户可以使用etcd的命令行
工具etcdctl与etcdserver进行交互,具体命令如下所示:
1 #etcd读写操作
2 etcdctl‐‐endpoints=localhost:2379putusernamefox
3 etcdctl‐‐endpoints=localhost:2379getusername
单机多实例etcd部署
剩余40页未读,继续阅读
资源评论
weixin_43109587
- 粉丝: 2
- 资源: 3
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功