快速学习安装使用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. 解压后,将 etcd 和 etcdctl 二进制文件路径添加到系统的环境变量中。

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 键的变更,自动加载新的配置。

相关推荐
dadaobusi34 分钟前
pcie原子操作和nvme原子操作
学习
lusklusklusk38 分钟前
Oracle数据库基础之11_Duplicate和Dataguard和RAC
数据库·oracle
sunshine22 girl1 小时前
Java学习五 面向对象高级5 内部类1
java·学习
PHP实战开发录2 小时前
MySQL字段加索引为什么没变快
数据库·mysql·php·开发
红红谈说3 小时前
标签化推送与已读统计怎么做?一次通知链路的工程复盘
数据库·消息推送·数字乡村·集合运算·已读回执·标签体系·写入放大
每天题库3 小时前
架子工脚手架工题库:安全操作考点与模拟题练习指南
学习·安全·考试·题库·考证
Shadow(⊙o⊙)3 小时前
MySQL索引
数据库·mysql
yangmu32034 小时前
Codex 提示词优化教程:用四要素把模糊需求变成可执行任务
人工智能·学习
无敌贵点大王4 小时前
RTThread学习记录13——关于要使用一个外设,RTThread与cubemx到底要怎么配合?
c语言·stm32·学习·rtthread
倔强的石头_5 小时前
多环境配置治理:开发、测试、生产连接信息如何隔离
数据库