当前位置: 首页 > news >正文

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文件,在文件的末尾添加

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

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

4、创建配置文件

        创建数据存放目录。

        创建etcd配置文件。

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文件

        内容如下:

[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

        进入容器并查看信息:

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • 解决跨域问题的方法
  • 关于模型外推能力的论文
  • 深入探秘 WorkManager:Android 异步任务管理的强大工具
  • 面试真题 | 小红书-C++引擎架构
  • vscode 代码格式setting设置
  • Java语法-类和对象(上)
  • java jdk8内存序列化为xml
  • C语言 | Leetcode C语言题解之第416题分割等和子集
  • 一个示例了解什么是 API 集成
  • 设计模式之责任链
  • CSS基本概念以及CSS的多种引入方式
  • CSS调整背景
  • 使用 HFD 加快 Hugging Face 模型和数据集的下载,解决443报错
  • PHP 递归遍历目录
  • 时序预测:LSTM、ARIMA、Holt-Winters、SARIMA模型的分析与比较
  • [笔记] php常见简单功能及函数
  • go语言学习初探(一)
  • Hibernate【inverse和cascade属性】知识要点
  • If…else
  • jquery ajax学习笔记
  • LeetCode29.两数相除 JavaScript
  • macOS 中 shell 创建文件夹及文件并 VS Code 打开
  • Netty源码解析1-Buffer
  • Python利用正则抓取网页内容保存到本地
  • vue和cordova项目整合打包,并实现vue调用android的相机的demo
  • 给初学者:JavaScript 中数组操作注意点
  • 猫头鹰的深夜翻译:Java 2D Graphics, 简单的仿射变换
  • 使用common-codec进行md5加密
  • 为什么要用IPython/Jupyter?
  • 想晋级高级工程师只知道表面是不够的!Git内部原理介绍
  • 职业生涯 一个六年开发经验的女程序员的心声。
  • 白色的风信子
  • 【干货分享】dos命令大全
  • 选择阿里云数据库HBase版十大理由
  • ​TypeScript都不会用,也敢说会前端?
  • !$boo在php中什么意思,php前戏
  • # Python csv、xlsx、json、二进制(MP3) 文件读写基本使用
  • # 达梦数据库知识点
  • # 消息中间件 RocketMQ 高级功能和源码分析(七)
  • #include<初见C语言之指针(5)>
  • ( 10 )MySQL中的外键
  • (2)(2.4) TerraRanger Tower/Tower EVO(360度)
  • (2024,Flag-DiT,文本引导的多模态生成,SR,统一的标记化,RoPE、RMSNorm 和流匹配)Lumina-T2X
  • (52)只出现一次的数字III
  • (C语言)fgets与fputs函数详解
  • (Matalb时序预测)WOA-BP鲸鱼算法优化BP神经网络的多维时序回归预测
  • (Redis使用系列) Springboot 使用redis实现接口Api限流 十
  • (ResultSet.TYPE_SCROLL_INSENSITIVE,ResultSet.CONCUR_READ_ONLY)讲解
  • (二) Windows 下 Sublime Text 3 安装离线插件 Anaconda
  • (二刷)代码随想录第15天|层序遍历 226.翻转二叉树 101.对称二叉树2
  • (附源码)apringboot计算机专业大学生就业指南 毕业设计061355
  • (五)关系数据库标准语言SQL
  • (一)Mocha源码阅读: 项目结构及命令行启动
  • (转)Oracle 9i 数据库设计指引全集(1)
  • (转)shell调试方法