作者介绍:简历上没有一个精通的运维工程师,下面的思维导图也是预计更新的内容和当前进度(不定时更新)。

数据库是一个系统(应用)最重要的资产之一,所以我们的数据库将从以下几个数据库来进行介绍。
MySQL
PostgreSQL
Redis
Etcd(本章节)
在介绍Etcd数据库的增删改查(CRUD)之前,我们需要先了解Etcd的两个API版本:V2和V3。
版本介绍
etcd 主要有v2和v3两个核心 API 版本,是迭代升级的两代接口,设计理念和底层实现差异显著,v3 为目前主流生产使用版本。
etcd 从 3.4 版本 开始,将 etcdctl 的默认 API 版本正式从 v2 改为 v3;而在 etcd 3.0~3.3 版本中,etcdctl 仍默认使用 v2 API,需要手动指定才能用 v3。
v2和v3可以简单理解为两个独立的库,使用v2写入的数据和v3写入的数据相互隔离,两个存储区之间没有自动同步或关联查询的机制。如果要让数据在两个世界都可用,必须用两个版本的客户端分别写入两次,或者使用官方迁移工具做一次性拷贝。

数据结构
我们前面在介绍ZooKeeper的时候,介绍他的是树形目录结构,而我们的今天的Etcd也是他一样,也是采用树形目录结构,所以的增删改查也基于这个树形目录。

增删改查
在开始操作前,必须设置API版本为3(否则会使用默认的v2 API,导致操作失败或数据错乱)
export ETCDCTL_API=3
# 或者在每次命令前显式指定put 命令是幂等的。如果键不存在则创建,存在则用新值覆盖旧值。
# 基本写入
etcdctl put /project/database/host "192.168.1.100"
# 带租约写入 (键在租约过期后自动删除)
LEASE_ID=$(etcdctl lease grant 60) # 创建60秒租约
etcdctl put /tmp/session_token "abc123" --lease=$LEASE_ID# 1. 精确获取
etcdctl get /project/database/host
# 2. 范围获取 (获取一个区间内的键,按字节序)
etcdctl get /project/database/a /project/database/z
# 3. 前缀获取 (最常用,模拟列出目录)
etcdctl get /project/database/ --prefix
# 输出示例:
# /project/database/host
# 192.168.1.100
# /project/database/port
# "3306"
# 4. 获取历史版本 (需要启用 --write-out=fields 查看详细信息或指定修订版本)
etcdctl get /project/database/host --rev=5 # 获取该键在修订版本5时的值
# 5. 只获取键名或数量
etcdctl get /project/database/ --prefix --keys-only
etcdctl get /project/database/ --prefix --count-only# 1. 精确删除
etcdctl del /project/database/host
# 2. 前缀删除 (模拟删除目录及其下所有内容)
etcdctl del /project/database/ --prefix
# 3. 删除并返回被删除的数据
etcdctl del /project/database/ --prefix --prev-kv