Etcd教程 — 第五章 Etcd之etcdctl的使用,面试官

先自我介绍一下,小编浙江大学毕业,去过华为、字节跳动等大厂,目前阿里P7

深知大多数程序员,想要提升技能,往往是自己摸索成长,但自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前!

因此收集整理了一份《2024年最新Golang全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友。
img
img
img
img
img

既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,涵盖了95%以上Go语言开发知识点,真正体系化!

由于文件比较多,这里只是将部分目录截图出来,全套包含大厂面经、学习笔记、源码讲义、实战项目、大纲路线、讲解视频,并且后续会持续更新

如果你需要这些资料,可以添加V获取:vip1024b (备注go)
img

正文

–key=“” identify secure client using this TLS key file
–password=“” password for authentication (if this option is used, --user option shouldn’t include password)
–user=“” username[:password] for authentication (prompt if password is not supplied)
-w, --write-out=“simple” set the output format (fields, json, protobuf, simple, table)

可以看到,etcdctl的命令很多,常用的命令选项【OPTIONS】:

–debug 输出CURL命令,显示执行命令的时候发起的请求
–no-sync 发出请求之前不同步集群信息
–output, -o ‘simple’ 输出内容的格式(simple 为原始信息,json 为进行json格式解码,易读性好一些)
–peers, -C 指定集群中的同伴信息,用逗号隔开(默认为: “127.0.0.1:4001”)
–cert-file HTTPS下客户端使用的SSL证书文件
–key-file HTTPS下客户端使用的SSL密钥文件
–ca-file 服务端使用HTTPS时,使用CA文件进行验证
–help, -h 显示帮助命令信息
–version, -v 打印版本信息

3 数据库操作

数据库操作围绕对键值和目录的 CRUD (即增删改查,符合 REST 风格的一套API操作)完整生命周期的管理。

Etcd在键的组织上采用了层次化的空间结构(类似于文件系统中目录的概念),用户指定的键可以为单独的名字,如:testkey,此时实际上放在根目录/下面,也可以为指定目录结构,如/cluster1/node2/testkey,则将创建相应的目录结构。

3.1 写操作

[root@etcd01 ~]# etcdctl put /testdir/testkey “Hello world”
OK
[root@etcd01 ~]# etcdctl put /testdir/testkey2 “Hello world2”
OK
[root@etcd01 ~]# etcdctl put /testdir/testkey3 “Hello world3”
OK

成功写入三对键值,/testdir/testkey、/testdir/testkey2 和 /testdir/testkey3。

3.2 读操作

[root@etcd01 ~]# etcdctl get /testdir/testkey
/testdir/testkey
Hello world

get 十六进制读指定的值:

[root@etcd01 ~]# etcdctl get /testdir/testkey --hex
\x2f\x74\x65\x73\x74\x64\x69\x72\x2f\x74\x65\x73\x74\x6b\x65\x79
\x48\x65\x6c\x6c\x6f\x20\x77\x6f\x72\x6c\x64

get 指定范围内的值:

[root@etcd01 ~]# etcdctl get /testdir/testkey /testdir/testkey3
/testdir/testkey
Hello world
/testdir/testkey2
Hello world2

可以看到,获取了大于等于 /testdir/testkey,且小于 /testdir/testkey3 的键值对。testkey3 不在范围之内,因为范围是半开区间 [testkey, testkey3), 不包含 testkey3。

获取指定前缀的所有键值对,通过 –prefix 可以指定前缀:

[root@etcd01 ~]# etcdctl get --prefix /testdir/testkey
/testdir/testkey
Hello world
/testdir/testkey2
Hello world2
/testdir/testkey3
Hello world3

这样即可获取所有以 /testdir/testkey 开头的键值对。当前缀获取的结果过多时,还可以通过 –limit=2 限制获取的数量:

etcdctl get --prefix --limit=2 /testdir/testkey

读取键过往版本的值:
应用可能想读取键的被替代的值【即旧值】。例如,应用可能想通过访问键的过往版本来回滚到旧的配置。或者,应用可能想通过多个请求来得到一个覆盖多个键的统一视图,而这些请求可以通过访问键历史记录而来。因为 etcd 集群上键值存储的每个修改都会增加 etcd 集群的全局修订版本,应用可以通过提供旧有的 etcd 修改版本来读取被替代的键。现有如下这些键值对:

foo = bar # revision = 2
foo1 = bar2 # revision = 3
foo = bar_new # revision = 4
foo1 = bar2_new # revision = 5

准备工作:

[root@etcd01 ~]# etcdctl put foo bar
OK
[root@etcd01 ~]# etcdctl put foo1 bar2
OK
[root@etcd01 ~]# etcdctl put foo bar_new
OK
[root@etcd01 ~]# etcdctl put foo1 bar2_new
OK

访问以前版本 key 的示例:

[root@etcd01 ~]# etcdctl get --prefix foo #访问最新版本的key
foo
bar_new
foo1
bar2_new

[root@etcd01 ~]# etcdctl get --prefix --rev=4 foo # 访问第4个版本的key
foo
bar_new
foo1
bar2

[root@etcd01 ~]# etcdctl get --prefix --rev=3 foo # 访问第3个版本的key
foo
bar
foo1
bar2

[root@etcd01 ~]# etcdctl get --prefix --rev=2 foo # 访问第3个版本的key
foo
bar

[root@etcd01 ~]# etcdctl get --prefix --rev=1 foo # 访问第1个版本的key

读取大于等于指定键的 byte 值的键
应用可能想读取大于等于指定键 的 byte 值的键。假设 etcd 集群已经有下列键:

a = 123
b = 456
z = 789

读取大于等于键 b 的 byte 值的键的命令:

[root@etcd01 ~]# etcdctl get --from-key b
b
456
c
789

删除键。应用可以从 etcd 集群中删除一个键或者特定范围的键。
假设 etcd 集群已经有下列键:

a = 123
b = 456
c = 789
foo = bar_new
foo1 = bar2_new
hello = world

删除键 foo 的命令:

[root@etcd01 ~]# etcdctl del foo
1 # 删除键的个数

删除从 foo to foo1 范围的键的命令:

etcdctl del foo foo1

删除键 a并返回被删除的键值对的命令:

[root@etcd01 ~]# etcdctl del --prev-kv a
1 # 删除键的个数
a # 被删除的键
123 # 被删除的键的值

删除前缀为 foo 的键的命令:

[root@etcd01 ~]# etcdctl del --prefix foo
1 # 删除键的个数

删除大于等于键 b 的 byte 值的键的命令:

[root@etcd01 ~]# etcdctl del --from-key b
3 # 删除键的个数

3.3 watch 历史改动

watch 监测一个键值的变化,一旦键值发生更新,就会输出最新的值并退出。例如:用户更新 testkey 键值为 Hello watch。

[root@etcd01 ~]# etcdctl watch testkey

在另一个节点上输入:

[root@etcd02 ~]# etcdctl put testkey Hello watch
OK

结果:

[root@etcd01 ~]# etcdctl watch testkey
PUT
testkey
Hello

从 foo to foo9 范围内键的命令:

[root@etcd01 ~]# etcdctl watch foo foo9

在另一个节点上输入:

[root@etcd02 ~]# etcdctl put foo1 bar1
[root@etcd02 ~]# etcdctl put foo2 bar2

结果:

[root@etcd01 ~]# etcdctl watch foo foo9
PUT
foo1
bar1
PUT
foo2
bar2

以16进制格式在键 foo 上进行观察的命令:

[root@etcd01 ~]# etcdctl watch foo --hex

在另一个节点上输入:

[root@etcd02 ~]# etcdctl put foo bar
OK

结果:

PUT
\x66\x6f\x6f # 键
\x62\x61\x72 # 值

观察多个键 foo 和 zoo 的命令:

[root@etcd01 ~]# etcdctl watch -i
watch foo
watch zoo

在另外一个终端输入:

[root@etcd02 ~]# etcdctl put foo bar
[root@etcd02 ~]# etcdctl put zoo val

结果:

watch foo
watch zoo
PUT
foo
bar
PUT
zoo
val

查看 key 的历史改动,应用可能想观察 etcd 中键的历史改动。例如,应用想接收到某个键的所有修改。如果应用一直连接到 etcd,那么 watch 就足够好了。但是,如果应用或者 etcd 出错,改动可能发生在出错期间,这样应用就没能实时接收到这个更新。为了保证更新被交付,应用必须能够观察到键的历史变动。为了做到这点,应用可以在观察时指定一个历史修订版本,就像读取键的过往版本一样。

假设我们完成了下列操作序列:

$ etcdctl put foo bar # revision = 2
OK
$ etcdctl put foo1 bar1 # revision = 3
OK
$ etcdctl put foo bar_new # revision = 4
OK
$ etcdctl put foo1 bar1_new # revision = 5
OK

观察历史改动:

从修订版本 2 开始观察键 foo 的改动

$ etcdctl watch --rev=2 foo
PUT
foo
bar
PUT
foo
bar_new

从上一次历史修改开始观察:

网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。

需要这份系统化的资料的朋友,可以添加V获取:vip1024b (备注Go)
img

一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!

revision = 5

OK

观察历史改动:

从修订版本 2 开始观察键 foo 的改动

$ etcdctl watch --rev=2 foo
PUT
foo
bar
PUT
foo
bar_new

从上一次历史修改开始观察:

网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。

需要这份系统化的资料的朋友,可以添加V获取:vip1024b (备注Go)
[外链图片转存中…(img-UER7M2zN-1713126099279)]

一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!

  • 30
    点赞
  • 15
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值