快速学习安装使用etcd

1. 什么是 etcd?

etcd 是一个分布式键值存储系统,主要用于分布式系统的配置管理和服务发现。它提供了可靠的数据存储,etcd 可以用来构建高可用的分布式键值数据库,根据官网介绍并且支持分布式锁、Leader 选举等功能,通常被用作微服务架构中的注册中心。在目前go的大部分组件还有框架中都被采用为注册中心组件 相当于zookper和redis

2. 安装 etcd

2.1. 在本地安装 etcd

2.1.1. Linux/MacOS

在 Linux 或 MacOS 上,你可以通过以下步骤安装 etcd:

复制代码
wget https://github.com/etcd-io/etcd/releases/download/v3.5.9/etcd-v3.5.9-linux-amd64.tar.gz
tar -xvf etcd-v3.5.9-linux-amd64.tar.gz
cd etcd-v3.5.9-linux-amd64
sudo mv etcd /usr/local/bin/
sudo mv etcdctl /usr/local/bin/
2.1.2. Windows
  1. 访问 etcd releases page
  2. 下载最新的 Windows 版本的 etcd。
  3. 解压后,将 etcdetcdctl 二进制文件路径添加到系统的环境变量中。

2.2. 使用 Docker 安装 etcd

你也可以通过 Docker 轻松地运行 etcd:

复制代码
docker run -d \
  -p 2379:2379 \
  -p 2380:2380 \
  --name etcd \
  --restart always \
  quay.io/coreos/etcd:v3.5.9 \
  /usr/local/bin/etcd \
  --name s1 \
  --data-dir=/var/lib/etcd \
  --listen-client-urls http://0.0.0.0:2379 \
  --advertise-client-urls http://0.0.0.0:2379

3. 启动 etcd

安装完成后,可以通过命令行启动 etcd:

bash 复制代码
etcd

etcd 默认监听 127.0.0.1:2379 端口。

你可以通过 etcdctl 命令行工具与 etcd 交互。它可以执行各种操作,如读写键值、查看集群状态等。

4. etcdctl 基本指令

4.1. 设置环境变量

为简化命令,你可以设置一些环境变量:

复制代码
export ETCDCTL_ENDPOINTS=127.0.0.1:2379

4.2. 基本操作

如果是docker 容器可能没有安装bash 环境 可以采用直接运行容器内部的形式

bash 复制代码
hcy@DESKTOP-VT67UMJ:/mnt/c/Users/侯$ docker exec -it etcd /usr/local/bin/etcdctl put mykey "Hello etcd"
OK
hcy@DESKTOP-VT67UMJ:/mnt/c/Users/侯$ docker exec -it etcd /usr/local/bin/etcdctl get mykey
mykey
Hello etcd
4.2.1. 存储键值对
复制代码
etcdctl put mykey "Hello, etcd"
4.2.2. 读取键值对
复制代码
etcdctl get mykey
4.2.3. 删除键值对
复制代码
etcdctl del mykey
4.2.4. 列出所有键值
复制代码
 etcdctl get a --from-key --keys-only
4.2.5. 事务操作

etcd 支持原子事务,允许你在一个事务中执行多个操作。

复制代码
etcdctl txn <<EOF
> cmp("mykey", "value", "=")
> success
>   put("mykey2", "success")
> failure
>   put("mykey3", "failure")
> EOF

4.3. 监控键值变更

你可以通过 watch 命令监控指定键或键的前缀的变更。

复制代码
etcdctl watch mykey

5. 集群管理

etcd 支持集群模式,允许多个 etcd 实例组成集群来提供高可用性。

5.1. 启动集群

你可以通过以下命令启动一个包含三个节点的 etcd 集群:

复制代码
etcd --name infra0 --initial-advertise-peer-urls http://127.0.0.1:2380 \
  --listen-peer-urls http://127.0.0.1:2380 \
  --listen-client-urls http://127.0.0.1:2379 \
  --advertise-client-urls http://127.0.0.1:2379 \
  --initial-cluster-token etcd-cluster-1 \
  --initial-cluster infra0=http://127.0.0.1:2380,infra1=http://127.0.0.1:2381,infra2=http://127.0.0.1:2382 \
  --initial-cluster-state new

5.2. 查看集群成员

复制代码
etcdctl member list

5.3. 增加和删除集群成员

增加成员
复制代码
etcdctl member add infra3 --peer-urls=http://127.0.0.1:2383
删除成员
复制代码
etcdctl member remove <memberID>

6. etcd Web UI

为了更方便地管理和监控 etcd,你可以使用 etcd 的 Web UI 插件。

6.1. 安装 etcd Web UI

  1. 下载 etcd 的 Web UI 项目,如 etcdkeeper

  2. 运行 etcdkeeper:

    git clone https://github.com/evildecay/etcdkeeper
    cd etcdkeeper
    go run main.go

  3. 访问 http://localhost:8080/etcdkeeper/ 来访问 Web UI。

6.2. 通过 Web UI 进行操作

通过 Web UI,你可以:

  • 查看和管理键值对:可以直观地查看、添加、修改、删除 etcd 中的键值对。
  • 监控集群状态:通过图形化界面查看集群状态、健康状况等。

7. 使用 etcd 进行分布式锁

etcd 提供了原子操作和版本控制功能,使得它可以用来实现分布式锁。

7.1. 实现分布式锁

复制代码
etcdctl lock mylock "echo 'This is a critical section'"

这个命令会创建一个锁,执行命令完成后,锁会自动释放。

7.2. 手动锁和解锁

复制代码
# 锁定
etcdctl put mylock "locked" --lease=<lease_id>

# 解锁
etcdctl del mylock

8. 高级特性

8.1. 角色管理和权限控制

etcd 支持角色管理和权限控制,以增强安全性。

8.1.1. 创建用户和角色
复制代码
etcdctl user add root
etcdctl role add root
etcdctl user grant-role root root
8.1.2. 设置权限
复制代码
etcdctl role grant-permission root --prefix=true readwrite /mykey
8.1.3. 启用认证
复制代码
etcdctl auth enable

8.2. 使用 etcd 进行配置管理

你可以使用 etcd 存储应用程序的配置,并通过 watch 命令监听配置变更,实时更新应用配置。

复制代码
etcdctl put /config/app1/database "mysql://user:pass@localhost/db"

你的应用可以通过监听 /config/app1/database 键的变更,自动加载新的配置。

相关推荐
啦啦啦_99995 分钟前
Redis-2-queryFormat()方法
数据库·redis·缓存
1024小神38 分钟前
SVG标签中path路径参数学习
学习
浅念-1 小时前
C++入门(2)
开发语言·c++·经验分享·笔记·学习
ZH15455891311 小时前
Flutter for OpenHarmony Python学习助手实战:面向对象编程实战的实现
python·学习·flutter
玄同7651 小时前
SQLite + LLM:大模型应用落地的轻量级数据存储方案
jvm·数据库·人工智能·python·语言模型·sqlite·知识图谱
吾日三省吾码1 小时前
别只会“加索引”了!这 3 个 PostgreSQL 反常识优化,能把性能和成本一起打下来
数据库·postgresql
chian-ocean1 小时前
百万级图文检索实战:`ops-transformer` + 向量数据库构建语义搜索引擎
数据库·搜索引擎·transformer
简佐义的博客1 小时前
生信入门进阶指南:学习顶级实验室多组学整合方案,构建肾脏细胞空间分子图谱
人工智能·学习
近津薪荼1 小时前
dfs专题4——二叉树的深搜(验证二叉搜索树)
c++·学习·算法·深度优先
小Tomkk1 小时前
数据库 变更和版本控制管理工具 --Bytebase 安装部署(linux 安装篇)
linux·运维·数据库·ci/cd·bytebase