Go最新Etcd教程 — 第五章 Etcd之etcdctl的使用,2024年最新诚意分享

img
img
img

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

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

如果你需要这些资料,可以戳这里获取

    user revoke-role        Revokes a role from a user
    version                 Prints the version of etcdctl
    watch                   Watches events stream on keys or prefixes

OPTIONS:
–cacert=“” verify certificates of TLS-enabled secure servers using this CA bundle
–cert=“” identify secure client using this TLS certificate file
–command-timeout=5s timeout for short running command (excluding dial timeout)
–debug[=false] enable client-side debug logging
–dial-timeout=2s dial timeout for client connections
-d, --discovery-srv=“” domain name to query for SRV records describing cluster endpoints
–discovery-srv-name=“” service name to query when using DNS discovery
–endpoints=[127.0.0.1:2379] gRPC endpoints
-h, --help[=false] help for etcdctl
–hex[=false] print byte strings as hex encoded strings
–insecure-discovery[=true] accept insecure SRV records describing cluster endpoints
–insecure-skip-tls-verify[=false] skip server certificate verification (CAUTION: this option should be enabled only for testing purposes)
–insecure-transport[=true] disable transport security for client connections
–keepalive-time=2s keepalive time for client connections
–keepalive-timeout=6s keepalive timeout for client connections
–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

img
img
img

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

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

如果你需要这些资料,可以戳这里获取

evision = 4
OK
$ etcdctl put foo1 bar1_new # revision = 5
OK

[外链图片转存中…(img-AY3ua8jh-1715834861001)]
[外链图片转存中…(img-429rY887-1715834861002)]
[外链图片转存中…(img-ELoGBYbp-1715834861002)]

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

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

如果你需要这些资料,可以戳这里获取

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值