ETCD学习

下载etcd

  1. #下载
  2. wget https://github.com/etcd-io/etcd/releases/download/v3.3.18/etcd-v3.3.18-linux-amd64.tar.gz
  3. #解压
  4. tar zxvf etcd-v3.3.18-linux-amd64.tar.gz
  5. cd etcd-v3.3.18-linux-amd64.tar.gz
  6. #复制到用户目录
  7. cp etcd etcdctl /usr/local/bin
  8. #赋予执行权限
  9. chmod +x etcd
  10. chmod +x etcdctl

启动etcd

本人是作为练习,将etcd暴露在公网,可以直接通过ip访问,一般不建议这么做

  1. ./etcd --listen-client-urls 'http://0.0.0.0:2379' --advertise-client-urls 'http://0.0.0.0:2379'
  2. # 后台启动
  3. #nohup etcd --listen-client-urls 'http://0.0.0.0:2379' --advertise-client-urls 'http://0.0.0.0:2379' &

设置V3环境变量(默认V2)

  1. export ETCDCTL_API=3
  2. #或者永久设置 vim /etc/profile 在最后添加export ETCDCTL_API=3 然后source /etc/profile

操作etcd (参考文档)

Key-value 命令

PUT [options] <key> <value>

PUT设置kv键值对,如果k已经存在,则进行覆盖

options可选项

  • lease -- lease ID(16进制的租约ID)关联到key上
  • prev-kv -- 返回修改前的前一个键值对
  • ignore-value -- 使用其当前值更新key
  • ignore-lease -- 使用其当前租约更新key

输出

OK

示例

  1. # 设置
  2. etcdctl put foo bar
  3. # ok
  4. #读取
  5. etcdctl get foo
  6. # foo
  7. # bar
  8. # 设置新kv并读取前一次的kv
  9. etcdctl put foo bar1 --prev-kv
  10. # OK
  11. # foo
  12. # bar
  13. # 读取
  14. etcdctl get foo
  15. # foo
  16. # bar1
  17. # 给key添加租约(需要提前申请租约)
  18. etcdctl put foo bar --lease=1234abcd
  19. # 报错 etcdserver: requested lease not found。需要先申请一个租约
  20. # 申请一个500秒的租约
  21. etcdctl lease grant 500
  22. # 给key添加租约
  23. #lease 694d6ed6e8fed50f granted with TTL(500s)
  24. etcdctl put foo bar --lease=694d6ed6e8fed50f
  25. # OK
  26. # 使用其当前租约更新key(为了使用现有租约)
  27. etcdctl put foo bar4 --ignore-lease
  28. # ok
  29. etcdctl get foo
  30. # foo
  31. # bar4
  32. # 使用当前值更新kv(为了解除租约,保持值不变)
  33. etcdctl put foo --ignore-value
  34. # OK

备注

如果未将作为命令行参数给出,则此命令尝试从标准输入中读取值。

如果value是值包含"-",会被解析为一个标志位,这个时候输入需要"--"解决

  1. etcdctl put foo -bar4
  2. # Error: unknown shorthand flag: 'b' in -bar4
  3. etcdctl put foo -- -bar4
  4. etcdctl put -- foo -bar5
  5. # OK

可以具有多行或空格,但是必须使用双引号包起来,如下所示:

  1. etcdctl put foo "bar 1 2 3"
  2. # ok
  3. etcdctl get foo
  4. # foo
  5. # bar 1 2 3

GET [options] <key> [range_end]

如果指定了range_end,则GET会获取键或键范围[key,range_end)左闭右开

  • hex -- 以16进制编码输出kv

  • limit -- 限制结果集最大数量

  • prefix -- 获取相同前缀的key

  • order -- 以升序或者降序对结果进行排序

  • sort-by -- 根据创建时间、Key、修改时间、值、版本进行目标排序

  • rev -- 指定版本

  • print-value-only -- 与write-out = simple一起使用时仅打印值

  • consistency -- 线性一致性或序列一致性

  • from-key -- 从指定Key开始往后查找(根据字节比较)

  • keys-only -- 只读取key

Output

<key>

<value>

<next_key>

<next_value>

...

Examples

首先设置一些Key

  1. etcdctl put foo bar
  2. # OK
  3. etcdctl put foo1 bar1
  4. # OK
  5. etcdctl put foo2 bar2
  6. # OK
  7. etcdctl put foo3 bar3
  8. # OK

读取key为foo的值

  1. etcdctl get foo
  2. # foo
  3. # bar

读取key为foo的值,并且进行16进制编码

  1. etcdctl get foo --hex
  2. # \x66\x6f\x6f
  3. # \x62\x61\x72

读取key前缀为foo的值

  1. etcdctl get foo --prefix
  2. # foo
  3. # bar
  4. # foo1
  5. # bar1
  6. # foo2
  7. # foo2
  8. # foo3
  9. # bar3

读取key前缀为foo的值并且倒序 (默认为ASCEND)

  1. etcdctl get foo --prefix --order="DESCEND"
  2. # foo3
  3. # bar3
  4. # foo2
  5. # bar2
  6. # foo1
  7. # bar1
  8. # foo
  9. # bar

读取所有key的值

  1. etcdctl get --from-key ''
  2. # foo
  3. # bar
  4. # foo1
  5. # bar1
  6. # foo2
  7. # foo2
  8. # foo3
  9. # bar3

根据创建时间读取所有key的值

  1. etcdctl get foo --from-key '' --sort-by=CREATE
  2. # foo
  3. # bar
  4. # foo1
  5. # bar1
  6. # foo2
  7. # foo2
  8. # foo3
  9. # bar3

读取指定版本的kv

  1. etcdctl get foo --rev=0
  2. # foo
  3. # bar

只读取指定版本的v

  1. etcdctl get foo --print-value-only
  2. # foo

只读取指定版本的k

  1. etcdctl get foo --keys-only
  2. # foo
  3. #

读取key的字节排序值大于等于foo1的所有key

  1. etcdctl get --from-key foo1
  2. # foo1
  3. # bar1
  4. # foo2
  5. # bar2
  6. # foo3
  7. # bar3

读取key的字节排序值大于等于foo1并且小于foo3的所有key

  1. etcdctl get foo1 foo3
  2. # foo1
  3. # bar1
  4. # foo2
  5. # bar2

读取key的字节排序值大于等于foo1的所有key的前2条

  1. etcdctl get --from-key foo1 --limit 2
  2. # foo1
  3. # bar1
  4. # foo2
  5. # bar2

备注

如果任何键或值包含不可打印的字符或控制字符,则由于换行而导致简单格式化的输出可能不明确。 为了解决这个问题,设置--hex十六进制编码所有字符串。

DEL [options] <key> [range_end]

如果指定了range_end,则删除指定的键或键范围[key,range_end)左闭右开

Options

  • prefix -- 删除指定前缀的key

  • prev-kv -- 删除后返回kv值

  • from-key -- 从指定Key开始往后删除(根据字节比较)

删除指定key

  1. etcdctl put foo bar
  2. # OK
  3. etcdctl del foo
  4. # 1
  5. etcdctl get foo

删除指定key并返回kv的值

  1. etcdctl del foo1 --prev-kv
  2. # 1
  3. # foo1
  4. # bar1

从指定key开始删除

  1. etcdctl del --from-key foo
  2. # 2

删除以foo为前缀的key

  1. etcdctl del foo --prefix
  2. # 2

TNX[options] (事务)

TXN从标准输入读取多个etcd请求,并将它们作为单个原子事务应用。

可选性

  • hex -- 输出16进制编码字符串

  • interactive -- 根据互动提示输入事务程序

输入格式

  1. <Txn> ::= <CMP>* "\n" <THEN> "\n" <ELSE> "\n"
  2. <CMP> ::= (<CMPCREATE>|<CMPMOD>|<CMPVAL>|<CMPVER>|<CMPLEASE>) "\n"
  3. <CMPOP> ::= "<" | "=" | ">"
  4. <CMPCREATE> := ("c"|"create")"("<KEY>")" <CMPOP> <REVISION>
  5. <CMPMOD> ::= ("m"|"mod")"("<KEY>")" <CMPOP> <REVISION>
  6. <CMPVAL> ::= ("val"|"value")"("<KEY>")" <CMPOP> <VALUE>
  7. <CMPVER> ::= ("ver"|"version")"("<KEY>")" <CMPOP> <VERSION>
  8. <CMPLEASE> ::= "lease("<KEY>")" <CMPOP> <LEASE>
  9. <THEN> ::= <OP>*
  10. <ELSE> ::= <OP>*
  11. <OP> ::= ((see put, get, del etcdctl command syntax)) "\n"
  12. <KEY> ::= (%q formatted string)
  13. <VALUE> ::= (%q formatted string)
  14. <REVISION> ::= "\""[0-9]+"\""
  15. <VERSION> ::= "\""[0-9]+"\""
  16. <LEASE> ::= "\""[0-9]+\""

输出

SUCCESS 如果etcd成功处理了事务,

FAILURE 事务处理失败

示例

交互模式 如果确定了就要连续按两次enter,进行下一步

  1. etcdctl put key1 1
  2. etcdctl txn -i
  3. # compares:
  4. mod("key1") > "0"
  5. # success requests (get, put, delete):
  6. put key1 "overwrote-key1"
  7. # failure requests (get, put, delete):
  8. put key1 "created-key1"
  9. put key2 "some extra key"
  10. # SUCCESS
  11. # OK
  12. etcdctl get key --prefix
  13. key1
  14. overwrote-key1
  15. key2
  16. some extra key
  17. # OK

非交互模式

  1. ./etcdctl txn <<<'mod("key1") > "0"
  2. put key1 "overwrote-key1"
  3. put key1 "created-key1"
  4. put key2 "some extra key"
  5. '
  6. # FAILURE
  7. # OK
  8. # OK

备注

在TXN命令中使用多行值时,换行符必须表示为\ n。 文字换行符将导致解析失败。

COMPACTION [options] <revision> (压缩)

COMPACTION丢弃给定修订版之前的所有etcd事件历史记录。 由于etcd使用多版本并发控制模型,因此它将所有关键更新保留为事件历史记录。 当不再需要修订的事件历史记录时,可以将所有被替换的键压缩以回收etcd后端数据库中的存储空间。

physical -为true以等待压缩以物理删除所有旧修订

输出

打印压缩的版本

示例

  1. etcdctl compaction 1
  2. # compacted revision 1

WATCH [options] [key or prefix] [range_end] [--] [exec-command arg1 arg2 ...] (监听)

可选性

  • hex -- 十六进制打印

  • interactive -- 开启交互式session监听

  • prefix -- 监听包含前缀的key

  • prev-kv -- kv改变获取前一个kv

  • rev -- 监听版本

输入格式

仅交互式模式接受输入。

  1. watch [options] <key or prefix>\n

输出

<event>

[

<old_key>

<old_value>

]

<key>

<value>

...

示例

非交互模式

输入etcdctl watch foo命令开始监听,当监听的key有变化的时候,打印出 事件 key value

  1. # bash1
  2. etcdctl watch foo
  3. # bash2
  4. etcdctl put foo bar
  5. # ok
  6. # bash1
  7. # PUT
  8. # foo
  9. # bar

LEASE <subcommand> (租约)

LEASE提供了租约管理的命令集合

LEASE GRANT <ttl>

LEASE GRANT使用服务器选择的生存时间(以秒为单位)创建新的租约大于或等于请求的TTL值。

输出

Prints a message with the granted lease ID.

Example

  1. etcdctl lease grant 60
  2. # lease 694d6ed6e8fed554 granted with TTL(60s)

LEASE REVOKE <leaseID>

租借撤销会销毁给定的租约,并删除所有附加的key。

Output

打印租约被撤销的消息

示例

  1. etcdctl lease revoke 694d6ed6e8fed558
  2. # lease 694d6ed6e8fed558 revoked

LEASE TIMETOLIVE <leaseID> [options]

LEASE TIMETOLIVE 检索具有给定lease ID的租约信息。

可选项

  • keys -- 获取在这个租约上的keys

输出

打印租约信息

示例

  1. # 申请一个租约
  2. etcdctl lease grant 500
  3. # lease 694d6ed6e8fed55b granted with TTL(500s)
  4. # 将租约附加到kv上
  5. etcdctl put foo1 bar --lease=694d6ed6e8fed55b
  6. # OK
  7. # 将租约附加到kv上
  8. etcdctl put foo2 bar --lease=694d6ed6e8fed55b
  9. # OK
  10. # 查看租约的信息
  11. etcdctl lease timetolive 694d6ed6e8fed55b
  12. # lease 694d6ed6e8fed55b granted with TTL(500s), remaining(386s)
  13. # 查看租约的信息和签约的keys
  14. etcdctl lease timetolive 2d8257079fa1bc0c --keys
  15. # lease 694d6ed6e8fed55b granted with TTL(500s), remaining(352s), attached keys([foo1 foo2])
  16. # 查看租约的信息,以json输出
  17. etcdctl lease timetolive 2d8257079fa1bc0c --write-out=json
  18. # {"cluster_id":14841639068965178418,"member_id":10276657743932975437,"revision":31,"raft_term":2,"id":7587842816500225371,"ttl":321,"granted-ttl":500,"keys":null}
  19. # 查看租约的信息和签约的keys,以json输出
  20. etcdctl lease timetolive 2d8257079fa1bc0c --write-out=json --keys
  21. # {"cluster_id":14841639068965178418,"member_id":10276657743932975437,"revision":31,"raft_term":2,"id":7587842816500225371,"ttl":289,"granted-ttl":500,"keys":["Zm9vMQ==","Zm9vMg=="]}
  22. # 租约过期
  23. etcdctl lease timetolive 694d6ed6e8fed55b
  24. # lease 694d6ed6e8fed55b already expired

LEASE LIST

LEASE LIST 列出所有有效的租约

输出

有效租约清单

示例

  1. etcdctl lease grant 500
  2. # lease 694d6ed6e8fed560 granted with TTL(500s)
  3. etcdctl lease list
  4. # found 1 leases
  5. # 694d6ed6e8fed560

LEASE KEEP-ALIVE <leaseID>

LEASE KEEP-ALIVE 定期刷新租约使其不过期

Output

为发送的每个保持活动状态打印一条消息,或打印一条消息,表明租约已到期。

Example

  1. # 起一个10秒生存期的租约
  2. etcdctl lease grant 10
  3. # lease 694d6ed6e8fed562 keepalived with TTL(10)
  4. # lease 694d6ed6e8fed562 keepalived with TTL(10)
  5. # lease 694d6ed6e8fed562 keepalived with TTL(10)
  6. # lease 694d6ed6e8fed562 keepalived with TTL(10)
  7. # lease 694d6ed6e8fed562 keepalived with TTL(10)
  8. ...

etcd学习之安装与命令的更多相关文章

  1. 【分布式】ZooKeeper学习之一:安装及命令行使用

    ZooKeeper学习之一:安装及命令行使用 一直都想着好好学一学分布式系统,但是这拖延症晚期也是没得治了,所以干脆强迫自己来写一个系列博客,从zk的安装使用.客户端调用.涉及到的分布式原理.选举过程 ...

  2. etcd学习记录

    参考资料: etcd:从应用场景到实现原理的全方位解读 etcd:用于服务发现的键值存储系统 Etcd学习(一)安装和.NET客户端测试 Etcd学习(二)集群搭建Clustering

  3. Etcd学习(二)集群搭建Clustering

    1.单个etcd节点(测试开发用) 之前我一直开发测试一直是用的一个Etcd节点,然后启动命令一直都是直接打一个etcd(我已经将etcd安装目录的bin目录加入到PATH环 境变量中),然后启动信息 ...

  4. TCP/IP协议学习之实例ping命令学习笔记

    TCP/IP协议学习之实例ping命令学习笔记(一) 一. 目的为了让网络协议学习更有效果,在真实网络上进行ping命令前相关知识的学习,暂时不管DNS,在内网中,进行2台主机间的ping命令的整个详 ...

  5. MySQL 服务安装及命令使用

    MySQL 服务安装及命令使用 课程来源说明 本节实验后续至第17节实验为本课程的进阶篇,都基于 MySQL 官方参考手册制作,并根据实验楼环境进行测试调整改编.在此感谢 MySQL 的开发者,官方文 ...

  6. Hadoop学习------Hadoop安装方式之(二):伪分布部署

    要想发挥Hadoop分布式.并行处理的优势,还须以分布式模式来部署运行Hadoop.单机模式是指Hadoop在单个节点上以单个进程的方式运行,伪分布模式是指在单个节点上运行NameNode.DataN ...

  7. 2018-05-11-机器学习环境安装-I7-GTX960M-UBUNTU1804-CUDA90-CUDNN712-TF180-KERAS-GYM-ATARI-BOX2D

    layout: post title: 2018-05-11-机器学习环境安装-I7-GTX960M-UBUNTU1804-CUDA90-CUDNN712-TF180-KERAS-GYM-ATARI- ...

  8. 20165223 Linux安装及命令入门

    预备作业3:Linux安装及命令入门 一.VirtualBox和Ubuntu的安装 通过学习实践基于VirtualBox虚拟机安装Ubuntu图文教程,我开始学习虚拟机的安装,根据教程一步步试着安装. ...

  9. 20165328 预备作业3 Linux安装及命令

    Linux安装及学习 Linux安装遇到的问题: 问题:在我开始安装虚拟机的时候,在安装过程中总会出现初始界面,且无法跳过,陷入死循环. 解决方法:我在网上百度搜索该问题之后得到了答案,第一个界面是要 ...

随机推荐

  1. C# 可为空?及(??、?. )

    可空类型修饰符(?): 引用类型可以使用空引用表示一个不存在的值,而值类型通常不能表示为空. 例如:string str=null; 是正确的,int i=null; 编译器就会报错. 为了使值类型也 ...

  2. web基本概念

    一.互联网 互联网(英语:Internet),又称网际网络,或音译因特网(Internet).英特网,互联网始于1969年美国的阿帕网.是网络与网络之间所串连成的庞大网络,这些网络以一组通用的协议相连 ...

  3. loj 3102

    题目大意: 给定 \(m\) 棵无向树\(\left\{T_{1}=\left(V_{1}, E_{1}\right), T_{2}=\left(V_{2}, E_{2}\right), \cdots ...

  4. php读取邮件

    <?php header("Content-type: text/html; charset=utf-8"); class mail { private $server='' ...

  5. P3719 [AHOI2017初中组]rexp——递归模拟

    P3719 [AHOI2017初中组]rexp 没有什么算法的题做起来真不适应,这道题深深讽刺了我想用栈维护匹配括号个数的想法: 递归解决就行了: 时刻注意函数返回值是什么,边界条件是什么: #inc ...

  6. 项目管理、bug管理工具 ---禅道使用流程

    使用前描述: 禅道是付费的一款云平台工具,它可以实现项目管理.需求管理.bug提交.bug跟踪.文档管理.bug统计等功能 使用账号.密码:公司提供,登录后基本识别操作流程如下: 1.登录首页-我的地 ...

  7. window.location.href在微信端不起作用的解决方法?

    在我从第一张图的某个活动进去到详情页,点击返回是可以的,这里我是用了一个click事件,window.location.href="某死链接" 但是第二次进去点击之后点击事件是可以 ...

  8. GO语言strconv包的使用

    Go语言中strconv包实现了基本数据类型和其字符串表示的相互转换. strconv包 strconv包实现了基本数据类型与其字符串表示的转换,官方文档中文版. string与int类型转换 Ato ...

  9. SpringContextHolder 作用

    以静态变量保存Spring ApplicationContext, 可在任何代码任何地方任何时候取出ApplicaitonContext. 使用方式.在启动类里添加Bean package com.y ...

  10. 雪花ID实现新增数据同步

    雪花ID实现新增数据同步 GUID生成的ID,可以确保是唯一ID,但却是无序的,不适合用于数据同步. 雪花算法生成的ID(INT64)能够按照时间有序(升序)生成.只要电脑上的时间是正确的,新增的记录 ...