etcd 基础入门

标签:etcd首次发布:2023-12-02最近修改:2023-12-02

介绍

Etcd 是 CoreOS 基于 Raft 协议开发的分布式键值对存储 (key-value peer store) ,设计用来可靠而快速的保存关键数据并提供访问。

etcd 可用于:

  • 共享配置
  • 服务发现
  • 分布式锁或一致性保障
  • 分布式数据队列
  • 分布式通知和协调
  • 集群选举

安装

安装脚本如下:

bash
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

配置环境变量:

text
vi /etc/profile# 在文件的最后添加如下内容:export ETCDCTL_API=3# 保存退出后让环境变量生效source /etc/profile

systemd 部署 etcd

直接使用命令行启动 etcd 服务不便于运维管理。在系统上安装服务,可以使用 systemd 来托管服务,能够做到服务进程管理以及开机启动等功能。

etcd 安装完成后,在/usr/local 目录下有一个 etcd 目录。进入 etcd 目录,将可执行文件复制到/usr/local/bin 目录下:

bash
cp etcd* /usr/local/bin

准备配置文件和数据目录

bash
mkdir -p /etc/etcdmkdir -p /data/etcd

准备 systemd 服务文件

systemd 系统服务的基础配置内容。可能需要调整的内容主要是 ExecStart=/usr/local/bin/etcdEnvironmentFile=/etc/etcd/etcd.conf ,根据实际准备的路径配置即可。

bash
vim /usr/lib/systemd/system/etcd.service

内容如下:

bash
[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 命令行参数中指定,另外一种是通过环境变量的方式导致。这里选择使用环境变量的方式导入配置。

bash
vim /etc/etcd/etcd.conf

内容如下:

bash
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 配置文件生效

bash
systemctl daemon-reload

启动服务,使 etcd 就可以作为系统服务运行。

bash
# 启动服务systemctl start etcd

配置 systemd 开机启动 etcd 服务和取消 etcd 开机自启动。

bash
# 让etcd开机自启动systemctl enable etcd# 取消开机自启动systemctl disable etcd

查看集群状态

image-20231201210849999

正常的集群没有 ERROR 异常,而且有一个节点的 IS LEADER 的值为 true

检查集群的健康状况命令:

bash
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 中文文档