分布式注册服务中心

etcd是一个分布式K-V数据库,是构建一个分布式系统的核心部分。

etcd需要重点掌握的知识

  • api 比较简单的接口,组合实现功能
  • 架构,与mysql里面使用的数据结构进行比较(b+树)
  • raft,一致性算法,理解分布式系统中的同步算法一个很好的案例

etc目录在linux系统中通常用来放置一些用户无关的配置文件的信息。etcd是配置服务。

etcd设计是为了提供高可用、强一致性的小型kv数据存储服务。与redis的区别在于,redis是个内存数据库,而etcd自v3版本是磁盘数据库。

etcd的v3版本使用lease(租约)替换key ttl自动过期机制。

etcd支持事务(四个特性,原子性等)和多版本并发控制,也就是mvcc。用来解决什么问题?解决一致性非锁定读的问题。

etcd的存储引擎是boltdb。

etcd的linux 3.5.5版本的链接

链接:https://pan.baidu.com/s/1HmZwqTNsR6_FbCS_UCs8qQ
提取码:ot9e

api操作

一个窗口启动服务(整个操作实战我采用相对路径,没有设置环境变量)

./etcd

客户端去访问并操作

./etcdctl put key master

有put就有get

./etcdctl get key

打印所有key的信息

./etcdctl get key --prefix

监听某个key

./etcdctl watch key2

监听只会监听增删改的时间,不会监听查事件

事务练习

TXN if /then /else ops

租约

很多key可以共享一个租约,一个租约设置一个ttl(过期时间),当这个租约过期了,挂到这个租约上的所有key就失效了。用于集群监控以及服务注册发现

lease grant				创建一个租约
lease keep-alive		续约,实现注册发现的关键
lease list				枚举所有租约
lease revoke			销毁租约
lease timetolive		获取租约信息

如果删除租约,挂接在这个租约下的所有key都会被删除。

master@ubuntu:~/etcd-v3.5.5-linux-amd64$ etcdctl lease grant 10
lease 694d8393b7b47304 granted with TTL(10s)

应用场景

  • 服务发现
  • 负载均衡

etcd架构

在这里插入图片描述

可以看到,按照分层模型,etcd 可分为 Client 层、API 网络层、Raft 算法层、逻辑层和存储层。这些层的功能如下:

  • Client 层:Client 层包括 client v2 和 v3 两个大版本 API 客户端库,提供了简洁易用的 API,同时支持负载均衡、节点间故障自动转移,可极大降低业务使用 etcd 复杂度,提升开发效率、服务可用性。
  • API 网络层:API 网络层主要包括 client 访问 server 和 server 节点之间的通信协议。一方面,client 访问 etcd server 的 API 分为 v2 和 v3 两个大版本。v2 API 使用 HTTP/1.x 协议,v3 API 使用 gRPC 协议。同时 v3 通过 etcd grpc-gateway 组件也支持 HTTP/1.x 协议,便于各种语言的服务调用。另一方面,server 之间通信协议,是指节点间通过 Raft 算法实现数据复制和 Leader 选举等功能时使用的 HTTP 协议。
  • Raft 算法层:Raft 算法层实现了 Leader 选举、日志复制、ReadIndex 等核心算法特性,用于保障 etcd 多个节点间的数据一致性、提升服务可用性等,是 etcd 的基石和亮点。
  • 功能逻辑层:etcd 核心特性实现层,如典型的 KVServer 模块、MVCC 模块、Auth 鉴权模块、Lease 租约模块、Compactor 压缩模块等,其中 MVCC 模块主要由 treeIndex 模块和 boltdb 模块组成。
  • 存储层:存储层包含预写日志 (WAL) 模块、快照 (Snapshot) 模块、boltdb 模块。其中 WAL 可保障 etcd crash 后数据不丢失,boltdb 则保存了集群元数据和用户写入的数据。
数据版本号机制
master@ubuntu:~/etcd-v3.5.5-linux-amd64$ ./etcdctl get key -w json | json_pp
{
   "count" : 1,
   "header" : {
      "member_id" : 10276657743932975437,
      "cluster_id" : 14841639068965178418,
      "revision" : 6,
      "raft_term" : 3
   },
   "kvs" : [
      {
         "create_revision" : 2,
         "key" : "a2V5",
         "mod_revision" : 6,
         "version" : 3,
         "value" : "Y2hhbmd4aW5n"
      }
   ]
}
etcd存储原理

分布式锁分为公平锁和非公平锁。公平锁是因为采用互斥锁,非公平锁是因为采用自旋锁。互斥锁会用排队的机制。

B树和B+树的区别在于,B+将叶子节点用双向链表连接起来,适合范围查询。

mysql为了加快索引数据,采用什么数据结构?自适应hash。

读写机制

etcd不支持并发写,只支持并发读。
事务开始之前读取的是B+树的数据,采用内存映射mmap的方式。

Raft共识算法

动图欣赏
raft共识算法是一种保持数据一致性的算法。两种超时选举超时>心跳超时。raft可以解决脑裂(如因为网络不通,造成节点分区)的问题。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值