快速学习安装使用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 键的变更,自动加载新的配置。

相关推荐
智象科技3 分钟前
告警自动化赋能运维:意义与价值解析
网络·数据库·人工智能·自动化·告警·一体化运维·ai运维
源远流长jerry4 分钟前
在云环境中部署 NFV:OpenStack 讲解
数据库·openstack
※DX3906※4 分钟前
SpringBoot之旅4: MyBatis 操作数据库(进阶) 动态SQL+MyBatis-Plus实战,从入门到熟练,再也不踩绑定异常、SQL拼接坑
java·数据库·spring boot·spring·java-ee·maven·mybatis
ACGkaka_16 分钟前
ES 学习(四)Elasticsearch-Head 的安装和使用
大数据·学习·elasticsearch
毕设源码-郭学长22 分钟前
【开题答辩全过程】以 基于Android的安全知识学习APP为例,包含答辩的问题和答案
学习
癫狂无敌酷炫帅炸天的学习狂25 分钟前
芯片手册怎么读
学习
小的~~29 分钟前
使用StreamLoad向Doris-4.0.3版本的聚合表导数据超时问题
运维·服务器·数据库
zwenqiyu30 分钟前
zwq重链剖分学习笔记,从入门到过掉模板题
笔记·学习
笑梦无境33 分钟前
mysql基础篇一(多年前整理)
数据库·mysql
Yushan Bai34 分钟前
HP-UX平台Oracle启动实例遭遇ORA-27300/ORA-27301/ORA-27302报错
数据库·oracle·ux