etcd v3使用示例

news/2024/4/24 22:46:31/

1.简单使用

1.1 增加

  • set

指定某个键的值。例如:

$ etcdctl set /testdir/testkey "Hello world"
Hello world
复制代码

支持的选项包括:

--ttl '0' 该键值的超时时间(单位为秒),不配置(默认为0)则永不超时
--swap-with-value value 若该键现在的值是value,则进行设置操作
--swap-with-index '0'   若该键现在的索引值是指定索引,则进行设置操作
复制代码
  • mk

如果给定的键不存在,则创建一个新的键值。例如:

$ etcdctl mk /testdir/testkey "Hello world"
Hello world
复制代码

当键存在的时候,执行该命令会报错,例如:

$ etcdctl mk /testdir/testkey "Hello world"
Error:  105: Key already exists (/testdir/testkey) [8]
复制代码

支持的选项为:

--ttl '0'  超时时间(单位为秒),不配置(默认为 0)。则永不超时
复制代码
  • mkdir

如果给定的键目录不存在,则创建一个新的键目录。例如:

$ etcdctl mkdir testdir2
复制代码

当键目录存在的时候,执行该命令会报错,例如:

$ etcdctl mkdir testdir2
Error:  105: Key already exists (/testdir2) [9]
复制代码

支持的选项为:

--ttl '0' 超时时间(单位为秒),不配置(默认为0)则永不超时。
复制代码
  • setdir

创建一个键目录。如果目录不存在就创建,如果目录存在更新目录TTL。

$ etcdctl setdir testdir3
复制代码

支持的选项为:

--ttl '0' 超时时间(单位为秒),不配置(默认为0)则永不超时。
复制代码

1.2 删除

  • rm

删除某个键值。例如:

$ etcdctl rm /testdir/testkey
PrevNode.Value: Hello
复制代码

当键不存在时,则会报错。例如:

$ etcdctl rm /testdir/testkey
Error:  100: Key not found (/testdir/testkey) [7]
复制代码

支持的选项为:

--dir 如果键是个空目录或者键值对则删除
--recursive 删除目录和所有子键
--with-value  检查现有的值是否匹配
--with-index '0'检查现有的index是否匹配
复制代码
  • rmdir

删除一个空目录,或者键值对。

$ etcdctl setdir dir1
$ etcdctl rmdir dir1
复制代码

若目录不空,会报错:

$ etcdctl set /dir/testkey hi
hi
$ etcdctl rmdir /dir
Error:  108: Directory not empty (/dir) [17]
复制代码

1.3 更新

  • update

当键存在时,更新值内容。例如:

$ etcdctl update /testdir/testkey "Hello"
Hello
复制代码

当键不存在时,则会报错。例如:

$ etcdctl update /testdir/testkey2 "Hello"
Error:  100: Key not found (/testdir/testkey2) [6]
复制代码

支持的选项为:

--ttl '0' 超时时间(单位为秒),不配置(默认为 0)则永不超时。
复制代码
  • updatedir

更新一个已经存在的目录。

$ etcdctl updatedir testdir2
复制代码

支持的选项为:

--ttl '0' 超时时间(单位为秒),不配置(默认为0)则永不超时。
复制代码

1.4 查询

  • get

获取指定键的值。例如:

$ etcdctl get /testdir/testkey
Hello world
复制代码

当键不存在时,则会报错。例如:

$ etcdctl get /testdir/testkey2
Error:  100: Key not found (/testdir/testkey2) [5]
复制代码

支持的选项为:

--sort 对结果进行排序
--consistent 将请求发给主节点,保证获取内容的一致性。
复制代码
  • ls

列出目录(默认为根目录)下的键或者子目录,默认不显示子目录中内容。

例如:

$ etcdctl ls
/testdir
/testdir2
/dir$ etcdctl ls dir
/dir/testkey
复制代码

支持的选项包括:

--sort 将输出结果排序
--recursive 如果目录下有子目录,则递归输出其中的内容
-p 对于输出为目录,在最后添加/进行区分
复制代码

1.5 watch

  • watch

监测一个键值的变化,一旦键值发生更新,就会输出最新的值并退出。

例如:用户更新testkey键值为Hello watch。

$ etcdctl get /testdir/testkey
Hello world
$ etcdctl set /testdir/testkey "Hello watch"
Hello watch
$ etcdctl watch testdir/testkey
Hello watch
复制代码

支持的选项包括:

--forever  一直监测直到用户按CTRL+C退出
--after-index '0' 在指定index之前一直监测
--recursive 返回所有的键值和子键值
复制代码
  • exec-watch

监测一个键值的变化,一旦键值发生更新,就执行给定命令。

例如:用户更新testkey键值。

$ etcdctl exec-watch testdir/testkey -- sh -c 'ls'
config	Documentation  etcd  etcdctl  README-etcdctl.md  README.md  READMEv2-etcdctl.md
复制代码

支持的选项包括:

--after-index '0' 在指定 index 之前一直监测
--recursive 返回所有的键值和子键值
复制代码

1.6 备份

备份etcd的数据。

$ etcdctl backup --data-dir /var/lib/etcd  --backup-dir /home/etcd_backup
复制代码

支持的选项包括:

--data-dir  etcd的数据目录
--backup-dir 备份到指定路径
复制代码

1.7 member

通过listaddremove命令列出、添加、删除etcd实例到etcd集群中。

查看集群中存在的节点

$ etcdctl member list
8e9e05c52164694d: name=dev-master-01 peerURLs=http://localhost:2380 clientURLs=http://localhost:2379 isLeader=true
复制代码

删除集群中存在的节点

$ etcdctl member remove 8e9e05c52164694d
Removed member 8e9e05c52164694d from cluster
复制代码

向集群中新加节点

$ etcdctl member add etcd3 http://192.168.1.100:2380
Added member named etcd3 with ID 8e9e05c52164694d to cluster

2.使用示例

# 设置一个key值
[root@etcd-0-8 ~]# etcdctl set /msg "hello k8s"
hello k8s# 获取key的值
[root@etcd-0-8 ~]# etcdctl get /msg
hello k8s# 获取key值的详细信息
[root@etcd-0-8 ~]# etcdctl -o extended get /msg
Key: /msg
Created-Index: 12
Modified-Index: 12
TTL: 0
Index: 12hello k8s# 获取不存在的key回报错
[root@etcd-0-8 ~]# etcdctl get /xxzx
Error:  100: Key not found (/xxzx) [12]# 设置key的ttl,过期后会被自动删除
[root@etcd-0-8 ~]# etcdctl set /testkey "tmp key test" --ttl 5
tmp key test
[root@etcd-0-8 ~]# etcdctl get /testkey
Error:  100: Key not found (/testkey) [14]# key 替换操作
[root@etcd-0-8 ~]# etcdctl get /msg
hello k8s
[root@etcd-0-8 ~]# etcdctl set --swap-with-value "hello k8s" /msg "goodbye"
goodbye
[root@etcd-0-8 ~]# etcdctl get /msg
goodbye# mk 仅当key不存在时创建(set对同一个key会覆盖)
[root@etcd-0-8 ~]# etcdctl get /msg
goodbye
[root@etcd-0-8 ~]# etcdctl mk /msg "mktest"
Error:  105: Key already exists (/msg) [18]
[root@etcd-0-8 ~]# etcdctl mk /msg1 "mktest"
mktest# 创建自排序的key
[root@etcd-0-8 ~]# etcdctl mk --in-order /queue s1
s1
[root@etcd-0-8 ~]# etcdctl mk --in-order /queue s2
s2
[root@etcd-0-8 ~]# etcdctl ls --sort /queue
/queue/00000000000000000021
/queue/00000000000000000022
[root@etcd-0-8 ~]# etcdctl get /queue/00000000000000000021
s1# 更新key值
[root@etcd-0-8 ~]# etcdctl update /msg1 "update test"
update test
[root@etcd-0-8 ~]# etcdctl get /msg1
update test# 更新key的ttl及值
[root@etcd-0-8 ~]# etcdctl update --ttl 5 /msg "aaa"
aaa# 创建目录
[root@etcd-0-8 ~]# etcdctl mkdir /testdir# 删除空目录
[root@etcd-0-8 ~]# etcdctl mkdir /test1
[root@etcd-0-8 ~]# etcdctl rmdir /test1# 删除非空目录
[root@etcd-0-8 ~]# etcdctl get /testdir
/testdir: is a directory
[root@etcd-0-8 ~]#
[root@etcd-0-8 ~]# etcdctl rm --recursive /testdir# 列出目录内容
[root@etcd-0-8 ~]# etcdctl ls /
/tmp
/msg1
/queue
[root@etcd-0-8 ~]# etcdctl ls /tmp
/tmp/a
/tmp/b# 递归列出目录的内容
[root@etcd-0-8 ~]# etcdctl ls --recursive /
/msg1
/queue
/queue/00000000000000000021
/queue/00000000000000000022
/tmp
/tmp/b
/tmp/a# 监听key,当key发生改变的时候打印出变化
[root@etcd-0-8 ~]# etcdctl watch /msg1
xxx[root@VM_0_17_centos ~]# etcdctl update /msg1 "xxx"
xxx# 监听某个目录,当目录中任何 node 改变的时候,都会打印出来
[root@etcd-0-8 ~]# etcdctl watch --recursive /
[update] /msg1
xxx[root@VM_0_17_centos ~]# etcdctl update /msg1 "xxx"
xxx# 一直监听,除非 `CTL + C` 导致退出监听
[root@etcd-0-8 ~]# etcdctl watch --forever /# 监听目录,当发生变化时执行一条命令
[root@etcd-0-8 ~]# etcdctl exec-watch --recursive / -- sh -c "echo change"
change# backup
[root@etcd-0-14 ~]# etcdctl backup --data-dir /data/app/etcd --backup-dir /root/etcd_backup
2019-12-04 10:25:16.113237 I | ignoring EntryConfChange raft entry
2019-12-04 10:25:16.113268 I | ignoring EntryConfChange raft entry
2019-12-04 10:25:16.113272 I | ignoring EntryConfChange raft entry
2019-12-04 10:25:16.113293 I | ignoring member attribute update on /0/members/2d2e457c6a1a76cb/attributes
2019-12-04 10:25:16.113299 I | ignoring member attribute update on /0/members/d2d2e9fc758e6790/attributes
2019-12-04 10:25:16.113305 I | ignoring member attribute update on /0/members/56e0b6dad4c53d42/attributes
2019-12-04 10:25:16.113310 I | ignoring member attribute update on /0/members/56e0b6dad4c53d42/attributes
2019-12-04 10:25:16.113314 I | ignoring member attribute update on /0/members/2d2e457c6a1a76cb/attributes
2019-12-04 10:25:16.113319 I | ignoring member attribute update on /0/members/d2d2e9fc758e6790/attributes
2019-12-04 10:25:16.113384 I | ignoring member attribute update on /0/members/56e0b6dad4c53d42/attributes# 使用v3版本
[root@etcd-0-14 ~]# export ETCDCTL_API=3
[root@etcd-0-14 ~]# etcdctl --endpoints="http://172.16.0.8:2379,http://172.16.0.14:2379,http://172.16.0.17:2379" snapshot save mysnapshot.db
Snapshot saved at mysnapshot.db
[root@etcd-0-14 ~]# etcdctl snapshot status mysnapshot.db -w json
{"hash":928285884,"revision":0,"totalKey":5,"totalSize":20480}

http://www.ppmy.cn/news/47454.html

相关文章

ubuntu安装V2board宝塔面板教程

ubuntu安装V2board宝塔面板教程 运行环境:ubuntu-20.04 搭建宝塔web页面环境 切到linux服务器命令行 在用户目录下创建BT目录,进入BT目录 在BT目录下执行命令 sudo wget -O install.sh http://download.bt.cn/install/install-ubuntu_6.0.sh && sudo sh install.sh…

面试题30天打卡-day06

1、什么是反射机制?说说反射机制的优缺点、应用场景? 反射机制:Java的反射机制是在运行状态,对于任意一个类,都能够动态的获得这个类的属性和方法;对于一个对象,都能动态的调用它当中的方法和属…

几十个简要的游戏案例分析

文章目录 一、 介绍二、 影响游戏体验的因素三、 游戏能爆火的因素1.影响游戏爆火因素的排名2.玩游戏的两种经典心理3.经典案例分析Qq农场植物大战僵尸水果忍者召唤神龙羊了个羊 4.游戏公司可借鉴的经验 四、 几十款游戏的多方面分析FC红白游戏机十二人街霸热血高校系列魂斗罗系…

搭建系统。

前言:为了应对大量简单页面的生产需求而设计的一种工具型产品就是搭建系统,它的目标非常明确,就是快速生产大量的页面。 这节我们来了解搭建系统 搭建系统的设计 几种常见的搭建系统的设计 第一种,是模板化搭建,由前…

二极管反向恢复过程详细解析

二极管反向恢复过程,现代脉冲电路中大量使用晶体管或二极管作为开关, 或者使用主要是由它们构成的逻辑集成电路。而作为开关应用的二极管主要是利用了它的通(电阻很小)、断(电阻很大) 特性, 即二极管对正向及反向电流表现出的开关作用。二极管和一般开关的不同在于,…

ThreadLocal InheritableThreadLocal TransmittableThreadLocal的使用以及原理

ThreadLocal 每个线程向ThreadLocal设置值&#xff0c;再取值&#xff0c;实现线程之间的隔离 public class ThreadLocalCase1 {private static ThreadLocal<Integer> threadLocal new ThreadLocal<>();public static void main(String[] args) {Random random …

JavaScript的基础语法学习

文章目录 一、JavaScript let 和 const二、JavaScript JSON三、javascript:void(0) 含义四、JavaScript 异步编程总结 一、JavaScript let 和 const let 声明的变量只在 let 命令所在的代码块内有效。 const 声明一个只读的常量&#xff0c;一旦声明&#xff0c;常量的值就不…

APIs -- DOM正则表达式

1. 介绍 正则表达式(Regular Expression)是用于匹配字符串中字符组合的模式。在JavaScript中&#xff0c;正则表达式也是对象通常用来查找、替换那些符合正则表达式的文本&#xff0c;许多语言都支持正则表达式。正则表达式在JavaScript中的使用场景: 例如验证表单:用户名表单…

MyBatis --- 缓存、逆向工程、分页插件

一、MyBatis的缓存 1.1、MyBatis的一级缓存 一级缓存是SqlSession级别的&#xff0c;通过同一个SqlSession查询的数据会被缓存&#xff0c;下次查询相同的数据&#xff0c;就会从缓存中直接获取&#xff0c;不会从数据库重新访问 使一级缓存失效的四种情况&#xff1a; 1、…

ElasticSearch——详解主从模式,以及主节点的选取算法(一)

详解主从模式&#xff0c;以及主节点的选取算法 Discovery模块负责发现集群中的节点&#xff0c;以及选择主节点。 ES支持多种不同Discovery类型选择&#xff0c;内置的实现称为Zen Discovery&#xff0c;其他的包括公有云平台亚马逊的EC2、谷歌的GCE等。本文讨论内置的Zen Di…

rviz 可视化手机 IMU

原博客&#xff1a;https://www.cnblogs.com/hitcm/p/5616364.html 原代码&#xff1a;https://github.com/hitcm/Android_Camera-IMU.git 上面说的不太详细&#xff0c;出现了无法可视化 IMU 转交的情况。git 的 issue 中也有人遇到这个问题。本博客记录了自己如何克服 BUG 并…

【C++】map和set的模拟实现

文章目录 1、map、set和红黑树源码的截取2、红黑树的迭代器3、代码部分3-1、Set.h3-2、Map.h3-3、RBTee.h3-4、测试代码 1、map、set和红黑树源码的截取 我们红黑树的节点只需要用到value值就够了&#xff0c;value是什么&#xff0c;节点就存什么。但是&#xff0c;红黑树的源…

MySQL学习笔记第一天

第02章 MySQL环境搭建 1.MySQL的卸载 步骤1&#xff1a;停止MySQL服务 在卸载之前&#xff0c;先停止MySQL8.0的服务。按键盘上的“Ctrl Alt Delete”组合键&#xff0c;打开“任务管理器”对话框&#xff0c;可以在“服务”列表找到“MySQL8.0”的服务&#xff0c;如果现…

肖 sir_就业课__014python讲解

python讲解 一、python梳理 1、python 数据类型有哪些&#xff1f; 字符、列表、元组、字典、集合 2、列表、元组、字典、集合的区别&#xff1f; 3、python中函数&#xff1f; &#xff08;1&#xff09;自定义函数 def 函数名&#xff08;&#xff09; &#xff08;2&#…

树莓派计算机视觉编程:6~10

原文&#xff1a;Raspberry Pi Computer Vision Programming 协议&#xff1a;CC BY-NC-SA 4.0 译者&#xff1a;飞龙 本文来自【ApacheCN 计算机视觉 译文集】&#xff0c;采用译后编辑&#xff08;MTPE&#xff09;流程来尽可能提升效率。 当别人说你没有底线的时候&#xff…

maven安装教程(结合eclipse和IDEA)

一.安装maven 本文须知:安装maven环境之前要先安装java jdk环境(没有安装java环境的可以先去看安装JAVA环境的教程)Maven 3.3+ require JDK 1.7 及以上。 第一步:下载maven(本教程安装的是3.8.4) 官方下载链接:https://maven.apache.org/download.cgi Binary是可执行版本…

MyBatisPlus3.4.3版自动生成代码的使用

AutoGenerator 是 MyBatis-Plus 的代码生成器&#xff0c;通过 AutoGenerator 可以快速生成 Entity、Mapper、Mapper XML、Service、Controller 等各个模块的代码&#xff0c;极大的提升了开发效率。 1 准备工作 创建springboot工程&#xff0c;这里省略。 2 导入依赖 <d…

靶机精讲之HackademicRTB1

主机发现 nmap扫描 端口扫描 只有80端口开放 UDP扫描 web渗透 服务扫描 脚本扫描 DOS攻击漏洞 枚举漏洞 查看web端 进行目录爆破 点击 点击后发现地址结构像有目录爆破 接上面枚举漏洞 复制那枚举目录到web 接目录爆破 apeache服务器 查看内容管理系统是否是自建的 在库搜索…

第九篇 Spring数据库事务管理

《Spring》篇章整体栏目 ————————————————————————————— 【第一章】spring 概念与体系结构 【第二章】spring IoC 的工作原理 【第三章】spring IOC与Bean环境搭建与应用 【第四章】spring bean定义 【第五章】Spring 集合注入、作用域 【第六章】…

以人为本的重点是有效网络安全计划的关键

安全和风险管理 (SRM) 领导者在根据九大行业趋势创建和实施网络安全计划时&#xff0c;必须重新考虑他们在技术和以人为本的元素之间的投资平衡。 以人为本的网络安全方法对于减少安全故障至关重要。 在控制设计和实施以及通过业务沟通和网络安全人才管理中关注人&#xff…