什么是etcd

etcd 是一个分布式一致性k-v存储系统,可用于服务注册发现与共享配置,具有以下优点

  1. 安全:支持TLS通信,并可以针对不同的用户进行对key的读写控制
  2. 简单 :相比于晦涩难懂的paxos算法,etcd基于相对简单且易实现的raft算法实现一致性,并通过gRPC提供接口调用
  3. 高性能:10,000 /秒的写性能。其主要应用于服务注册发现以及共享配置

命令操作

基本操作

# 检查默认节点的健康情况
etcdctl endpoint health

# 列出所有的keys,不显示值
etcdctl get --prefix --keys-only ""

# dir operation
etcdctl rmdir dir
etcdctl mkdir dir

权限操作

# 开启身份认证
etcdctl auth enable

# 列出所有角色/用户
etcdctl role/user list 

# 创建角色/用户 可以使用--new-user-password选项提供明文密码
etcdctl --endpoints="" user/role add [user][root]

# 添加用户角色
etcdctl user grant-role [role] [user]
# 删除用户角色
etcdctl user revoke-role [role] [user]

# 删除角色
etcdctl role delete [role]

# 列出这个角色的所有权限
etcdctl role get [role]
# 给所有以/foo开头的key赋予读权限
etcdctl role grant-permission [role] --prefix=true read /foo/
# 删除一个角色的权限,如果添加权限的时候指定了--prefix=true,删除同样需要
etcdctl role revoke-permission [role] --prefix=true /foo/bar

# 修改指定用户密码
etcdctl user passwd [user] --user

数据持久化

数据默认会存放在/var/lib/etcd/default目录,会被分为两个文件夹中,分别是

  1. snap 存放快照数据,存储etcd的数据状态,防止wal文件过多而设置的快照
  2. wal 存放预习式的日志,记录了整个数据变化的全部历程。在etcd中,所有数据的修改提交前先写入到wal中

wal重要功能就是对故障的快速回复和数据回滚

etcd 会把启动的配置信息存储到data-dir参数指定的数据目录中。配置信息包括本地节点的ID、集群ID和初始时集群信息。用户需要避免 etcd 从一个过期的数据目录中重新启动,因为使用过期的数据目录启动的节点会与集群中的其他节点产生不一致