Etcd的认识2

264 阅读2分钟

这是我参与更文挑战的第17天,活动详情查看: 更文挑战

Etcd整体架构

etcd的整体架构

  • 客户端层
    • Clientv3/etcdctl客户端。用户通过命令行或者客户端调用api方式调用使用
    • 客户端层提供负载均衡和节点间故障转移等特性
  • API接口层
    • 提供李客户端访问服务端的通信协议和接口的定义,以及服务端节点之间相互通信的协议
    • etcd v3 提供gRPC方式;etcd v2使用http/1.x协议
  • etcd Raft层
    • 负责Leader选举和日志复制等功能
    • 还与集群中的其他etcd节点交互,实现分布式一致性数据同步
  • 逻辑层
    • 鉴权、租约、KVServer、MVCC、Compactor压缩
  • etcd存储
    • 实现快照、预写式日志WAL

client

type Client struct{
  Cluster //向集群中增加etcd服务端节点,管理员操作
  KV      // 键值存储
  Lease   // 租约相关操作
  Watcher // 观察订阅,监听数据变化
  Auth 	  // 管理etcd的用户和权限,管理员操作
  Maintenance // 维护etcd,如迁移etcd的leader节点,管理员操作
  Username string // 认证的用户名
  Password string //认证的密码
}

建立客户端与etcd集群连接

cli,err := clientV3.New(clientV3.Config}{
  Endpoints : []string{ "localhost:8080","localhost:8081"}, //etcd多个节点服务地址,可以传递多个
  DialTimeout : 10 * time.Second, // 首次连接超时时间,一旦连接成功后,后续会自动重连,其他不同关心
})

KV存储

// 获取kv对象实例
kv := clientev3.NewKV(client)

// kv 接口的定义
type KV interface {
  Put(ctx context.Context, key,val string,opts ...opOption)(*PutResponse,error)
  Get (ctx context.Context, key string,opts ...opOption)(*GetResponse,error)
  Delete (ctx context.Context, key string,opts ...opOption)(*DeleteResponse,error)
  Compact (ctx context.Context,  rev int64,opts ...compactOption)(*CompactResponse,error)
  Do(ctx context.Context,op op)(OpResponse,error)
  Txn(ctx context.Context) Txn
}
  • Put 将键值对放入etcd中

    • 键值可以是纯子节数组,字符串是该子节数组的 不可变表示形式
  • Get 对存储的数据进行取值

    • 参数opOption是可选的函数参数。
      • 值为withRange(end)返回[key,end]范围内的键
      • 值为WithFromKey() 返回大于或等于的key的键
      • 值为WithRev(rev),Get查询给定修订版本的键
      • 值为WithLimit(limit)返回的key数量受limit限制
      • 值为WithSort 对键进行排序
  • Delete 对存储的数据进行删除

  • Compact 压缩etcd键值对存储中的事件历史

    • 键值对应当定期压缩,否则事件历史会无限增长
  • Txn 事务

    • 在单个事务中处理多个请求
    • 不允许在一个Txn中多次修改同一个key
  • Watch 异步监控键的更改

  • Lease Service 提供租约的支持,

    • Lease是检测客户端存活状况的机制
  • Lock Service 提供分布式共享锁的支持

    • 以gRPC接口的方式暴露客户端的锁机制
    • Lock方法
    • Unlock方法