ETCD学习使用

一、介绍

etcd(分布式键值存储)是一个开源的分布式系统工具,用于可靠地存储和提供键值对数据。etcd 通常通过 HTTP 或 gRPC 提供 API,允许应用程序通过简单的接口与其交互。由于其可靠性和稳定性,etcd 在构建可扩展、分布式、高可用的系统中发挥着重要的作用。

  • Client层:Client层包括client v2和v3两个大版本API客户端库,提供了简洁易用的API,同时支持负载均衡、节点间故障自动转移,可极大降低业务使用etcd复杂度,提升开发效率、服务可用性。
  • API网络层:API网络层主要包括client访问server和server节点之间的通信协议。一方面,client访问etcd server的API分为v2和v3两个大版本。v2API使用HTTP/1.x协议,v3 API使用gRPC协议。同时v3通过etcd grpc-gateway组件也支持 HTTP/1.x协议,便于各种语言的服务调用。另一方面, server之间通信协议,是指节点间通过Raft算法实现数据复制和Leader选举等功能时使用的HTTP协议。
  • Raft 算法层:Raft算法层实现了Leader 选举、日志复制、ReadIndex等核心算法特性,用于保障etcd多个节点间的数据一致性、提升服务可用性等,是etcd的基石和亮点。
  • 功能逻辑层:etcd核心特性实现层,如典型的KVServer模块、MVCC模块、Auth鉴权模块、Lease租约模块、Compactor压缩模块等,其中MVCC模块主要由treelndex模块和boltdb 模块组成。
  • 存储层:存储层包含预写日志(WAL)模块、快照(Snapshot)模块、boltdb模块。其中WAL可保障etcd crash后数据不丢失,boltdb则保存了集群元数据和用户写入的数据。

二、下载安装

1、下载

apisix依赖etcd,所以要先保证etcd启动,下载地址:Release v3.5.10 · etcd-io/etcd · GitHub。下载完成后上传到服务器进行解压。

2、配置环境变量

将文件夹中etcd和etcdctl两个文件添加可执行文件路径到环境变量PATH中。etcd是服务端,etcdctl是运维人员操作的控制端,一般只需要装etcd,现在是学习就都装在同一台机器。

3、 编辑profile文件

编辑profile文件,在文件的末尾添加

bash 复制代码
# 在文件最后加入变量,因为etcd默认使用V2版本,我们需要V3版本的API。
export ETCDCTL_API=3

使环境变量生效,查看版本信息。

4、创建配置文件

创建数据存放目录。

创建etcd配置文件。

bash 复制代码
cat <<EOF | tee /etc/etcd.conf
#节点名称
ETCD_NAME="version"
#数据存放位置
ETCD_DATA_DIR="/var/lib/etcd/"
ETCD_ENABLE_V2="true"
ALLOW_NONE_AUTHENTICATION="yes"
ETCD_ADVERTISE_CLIENT_URLS="http://0.0.0.0:2379"
ETCD_LISTEN_CLIENT_URLS="http://0.0.0.0:2379"

EOF

5、配置etcd.service文件

内容如下:

bash 复制代码
[Unit]
Description=Etcd Server
Documentation=https://github.com/coreos/etcd
After=network.target
 
[Service]
User=root
Type=notify
#这个文件特别关键,etcd使用的环境变量都需要通过环境变量文件读取
EnvironmentFile=-/etc/etcd.conf
ExecStart=/usr/local/bin/etcd
Restart=on-failure
RestartSec=10s
LimitNOFILE=40000
 
[Install]
WantedBy=multi-user.target

6、启动etcd

  • systemctl daemon-reload 从新加载配置
  • systemctl enable etcd 设置开启启动
  • systemctl start etcd 启动etcd

在启动时如果出现/usr/local/bin目录权限不足时,使用如下命令可以解决:

复制代码
restorecon -rv /usr/local/bin/

使用systemctl show etcd.service命令可以查询状态,内容非常多:

三、命令使用

ETCD提供了丰富的命令行工具etcdctl,用于与ETCD集群进行交互。以下是一些常用的etcdctl命令示例。

  • etcdctl put k v 设置键值对
  • etcdctl get k 获取键值对
  • etcdctl get --prefix k 递归获取键值对
  • etcdctl del k 删除键值对
  • etcdctl watch k 监视键的变化
  • etcdctl member list 查看集群成员列表
  • etcdctl endpoint health 查看集群的健康状态
  • etcdctl endpoint status --write-out=table 查看集群的详细状态信息
  • etcdctl endpoint status 192.168.197.131:2379 查看指定节点的详细信息
  • etcd --help |``grep enable``-v2 查看是否开启V2协议

ETCD没有直接列出所有键的命令,但你可以通过etcdctl endpoint status --write-out=table查看集群状态,或者使用范围查询(etcdctl get --keys-only --from-key "" --limit=0)来尝试获取所有键(注意,这可能在大型数据集中非常低效)。

四、权限管理

在 etcd 中,权限操作通常通过 Role-Based Access Control (RBAC) 来管理。以下是一些常见的 etcd 权限操作。

1、创建用户

复制代码
etcdctl user add <username>:<password>

2、为用户授权

创建用户后,你可以为其授予特定的权限。这通常涉及到创建角色和将角色分配给用户。

复制代码
etcdctl role add <rolename>
etcdctl role grant-permission <rolename> <permission-type> <key> <range-end>
etcdctl user grant-role <username> <rolename>

上述例子中,创建了一个名为 "readwrite" 的角色,并授予了该角色对 "/path/to/key/*" 范围内键的读写权限。然后,将该角色授予了用户 "admin"。

3、列出用户、角色和权限

复制代码
etcdctl user list
etcdctl role list
etcdctl user get <username>
etcdctl role get <rolename>

4、删除用户和角色

复制代码
etcdctl user remove <username>
etcdctl role remove <rolename>

五、docker安装etcd

1、拉取镜像

复制代码
docker pull bitnami/etcd:3.3.13-r80

2、启动容器

复制代码
docker run -it --name etcd-server \
-v /e/github/docker-apisix/example/etcd_conf/etcd.conf.yml:/opt/bitnami/etcd/conf/etcd.conf.yml \
-p 2379:2379 \
-p 2380:2380  \
--env ALLOW_NONE_AUTHENTICATION=yes \
-d bitnami/etcd:3.3.13-r80

3、进入容器查看

复制代码
docker exec -it etcd-server bash

进入容器并查看信息:

相关推荐
西岸行者5 天前
学习笔记:SKILLS 能帮助更好的vibe coding
笔记·学习
悠哉悠哉愿意5 天前
【单片机学习笔记】串口、超声波、NE555的同时使用
笔记·单片机·学习
别催小唐敲代码5 天前
嵌入式学习路线
学习
毛小茛5 天前
计算机系统概论——校验码
学习
babe小鑫5 天前
大专经济信息管理专业学习数据分析的必要性
学习·数据挖掘·数据分析
winfreedoms5 天前
ROS2知识大白话
笔记·学习·ros2
在这habit之下5 天前
Linux Virtual Server(LVS)学习总结
linux·学习·lvs
我想我不够好。5 天前
2026.2.25监控学习
学习
im_AMBER5 天前
Leetcode 127 删除有序数组中的重复项 | 删除有序数组中的重复项 II
数据结构·学习·算法·leetcode
CodeJourney_J5 天前
从“Hello World“ 开始 C++
c语言·c++·学习