介绍
Etcd 是 CoreOS 基于 Raft 协议开发的分布式键值对存储 (key-value peer store) ,设计用来可靠而快速的保存关键数据并提供访问。
etcd 可用于:
- 共享配置
- 服务发现
- 分布式锁或一致性保障
- 分布式数据队列
- 分布式通知和协调
- 集群选举
安装
安装脚本如下:
ETCD_VER=v3.5.10# 设置下载 URLGITHUB_URL=https://github.com/etcd-io/etcd/releases/downloadDOWNLOAD_URL=${GITHUB_URL}# 下载 etcd 压缩包curl -L ${DOWNLOAD_URL}/${ETCD_VER}/etcd-${ETCD_VER}-linux-amd64.tar.gz -o /tmp/etcd-${ETCD_VER}-linux-amd64.tar.gz# 解压到 /usr/local 目录tar xzvf /tmp/etcd-${ETCD_VER}-linux-amd64.tar.gz -C /usr/local/etcd --strip-components=1# 输出版本信息来验证安装/usr/local/etcd/etcd --version/usr/local/etcd/etcdctl version配置环境变量:
vi /etc/profile# 在文件的最后添加如下内容:export ETCDCTL_API=3# 保存退出后让环境变量生效source /etc/profilesystemd 部署 etcd
直接使用命令行启动 etcd 服务不便于运维管理。在系统上安装服务,可以使用 systemd 来托管服务,能够做到服务进程管理以及开机启动等功能。
etcd 安装完成后,在/usr/local 目录下有一个 etcd 目录。进入 etcd 目录,将可执行文件复制到/usr/local/bin 目录下:
cp etcd* /usr/local/bin准备配置文件和数据目录
mkdir -p /etc/etcdmkdir -p /data/etcd准备 systemd 服务文件
systemd 系统服务的基础配置内容。可能需要调整的内容主要是 ExecStart=/usr/local/bin/etcd 和 EnvironmentFile=/etc/etcd/etcd.conf ,根据实际准备的路径配置即可。
vim /usr/lib/systemd/system/etcd.service内容如下:
[Unit]Description=Etcd ServerAfter=network.targetAfter=network-online.targetWants=network-online.target[Service]Type=notifyEnvironmentFile=/etc/etcd/etcd.confExecStart=/usr/local/bin/etcdRestart=on-failureLimitNOFILE=65536[Install]WantedBy=multi-user.target准备配置文件
etcd 启动参数调整可以分为两种,一种是在 etcd 命令行参数中指定,另外一种是通过环境变量的方式导致。这里选择使用环境变量的方式导入配置。
vim /etc/etcd/etcd.conf内容如下:
ETCD_NAME="etcd01"ETCD_DATA_DIR="/data/etcd/default.etcd"ETCD_LISTEN_PEER_URLS="http://192.168.11.10:2380"ETCD_LISTEN_CLIENT_URLS="http://192.168.11.10:2379,http://127.0.0.1:2379"ETCD_INITIAL_ADVERTISE_PEER_URLS="http://192.168.11.10:2380"ETCD_ADVERTISE_CLIENT_URLS="http://192.168.11.10:2379"ETCD_INITIAL_CLUSTER="etcd01=http://192.168.11.10:2380"ETCD_INITIAL_CLUSTER_TOKEN="etcd-cluster"ETCD_INITIAL_CLUSTER_STATE="new"运行服务
重载服务配置,使 /etc/etcd/etcd.conf 配置文件生效
systemctl daemon-reload启动服务,使 etcd 就可以作为系统服务运行。
# 启动服务systemctl start etcd配置 systemd 开机启动 etcd 服务和取消 etcd 开机自启动。
# 让etcd开机自启动systemctl enable etcd# 取消开机自启动systemctl disable etcd查看集群状态

正常的集群没有 ERROR 异常,而且有一个节点的 IS LEADER 的值为 true。
检查集群的健康状况命令:
etcdctl endpoint --cluster health基本操作
基本概念
| 术语 | 描述 |
|---|---|
| Node(节点) | Node 是 raft 状态机的一个实例。它有唯一标识,如果它是 leader,会内部记录其他节点的信息。 |
| Member(成员) | Member 是 etcd 的一个实例。它承载一个 Node,并为客户端提供服务。 |
| Cluster(集群) | Cluster 由多个 Member 组成。每个成员的节点遵循 raft 一致性协议来复制日志。集群从成员中接收提案,提交他们并应用到本地存储。 |
| Peer(同伴) | Peer 是同一个集群中的其他成员。 |
| Proposal(提议) | 提议是一个需要完成 raft 协议的请求(例如写请求,配置修改请求)。 |
| Client(客户端) | Client 是集群 HTTP API 的调用者。对于 V3 版本,应该包括 gRPC API。 |
| etcd HTTP Server | 用于处理用户发送的 API 请求以及其它 etcd 节点的同步与心跳信息请求。 |
| etcd Store | 用于处理 etcd 支持的各类功能的事务,包括数据索引、节点状态变更、监控与反馈、事件处理与执行等等,是 etcd 对用户提供的大多数 API 功能的具体实现。 |
| Raft | Raft 强一致性算法的具体实现,是 etcd 的核心。 |
| WAL | Write Ahead Log(预写式日志),是 etcd 的数据存储方式。除了在内存中存有所有数据的状态以及节点的索引以外,etcd 就通过 WAL 进行持久化存储。WAL 中, 所有的数据提交前都会事先记录日志。Snapshot 是为了防止数据过多而进行的状态快照;Entry 表示存储的具体日志内容。 |
客户端命令
etcdctl 命令概览:
| 命令 | 解释 |
|---|---|
| alarm disarm | 解除所有警报 |
| alarm list | 列出所有警报 |
| auth disable | 禁用认证 |
| auth enable | 启用认证 |
| auth status | 返回身份认证状态 |
| check datascale | 检查不同工作负载下给定服务器端点所持有的数据的内存使用情况 |
| check perf | 检查 etcd 集群的性能 |
| compaction | 压缩 etcd 中的事件历史 |
| defrag | 对给定端点的 etcd 成员的存储进行碎片整理 |
| del | 删除指定的键或键范围 [key, range_end) |
| elect | 观察和参与领导者选举 |
| endpoint hashkv | 为 --endpoints 中指定的每个端点打印 KV 历史哈希值 |
| endpoint health | 检查在 --endpoints 标志中指定的端点的健康状况 |
| endpoint status | 打印在 --endpoints 中指定的端点的状态 |
| get | 获取键或键范围 |
| help | 任何命令的帮助 |
| lease grant | 创建租约 |
| lease keep-alive | 保持租约有效(续租) |
| lease list | 列出所有活动租约 |
| lease revoke | 撤销租约 |
| lease timetolive | 获取租约信息 |
| lock | 获取一个命名锁 |
| make-mirror | 在目标 etcd 集群制作一个镜像 |
| member add | 将一个成员添加到集群中 |
| member list | 列出集群中的所有成员 |
| member promote | 提升集群中的非投票成员 |
| member remove | 从集群中移除一个成员 |
| member update | 更新集群中的一个成员 |
| move-leader | 将领导权转移给另一个 etcd 集群成员 |
| put | 将给定的键放入存储中 |
| role add | 添加一个新角色 |
| role delete | 删除角色 |
| role get | 获取角色的详细信息 |
| role grant-permission | 授予角色一个键 |
| role list | 列出所有角色 |
| role revoke-permission | 从角色中撤销一个键 |
| snapshot restore | 将 etcd 成员的快照恢复到 etcd 目录 |
| snapshot save | 将 etcd 节点的快照存储到给定的文件中 |
| snapshot status | 获取给定文件的快照状态 |
| txn | 在一个事务中处理所有请求 |
| user add | 添加一个新用户 |
| user delete | 删除用户 |
| user get | 获取用户的详细信息 |
| user grant-role | 授予用户一个角色 |
| user list | 列出所有用户 |
| user passwd | 更改用户的密码 |
| user revoke-role | 从用户中撤销角色 |
| version | 打印 etcdctl 的版本 |
| watch | 观察键或前缀上的事件流 |
以上就是所有命令的一个简单介绍,当然,如果要知道具体的用法,还是需要使用etcdctl "具体命令" --help的命令去查看其具体用法。
服务端配置
使用etcd --help命令就可以查看服务端可以使用的配置选项。这里面的服务端配置选项非常多,具体用法可以参考服务端配置 · Etcd 中文文档 。