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方法