etcd学习之安装与命令
ETCD学习
下载etcd
#下载
wget https://github.com/etcd-io/etcd/releases/download/v3.3.18/etcd-v3.3.18-linux-amd64.tar.gz
#解压
tar zxvf etcd-v3.3.18-linux-amd64.tar.gz
cd etcd-v3.3.18-linux-amd64.tar.gz
#复制到用户目录
cp etcd etcdctl /usr/local/bin
#赋予执行权限
chmod +x etcd
chmod +x etcdctl
启动etcd
本人是作为练习,将etcd暴露在公网,可以直接通过ip访问,一般不建议这么做
./etcd --listen-client-urls 'http://0.0.0.0:2379' --advertise-client-urls 'http://0.0.0.0:2379'
# 后台启动
#nohup etcd --listen-client-urls 'http://0.0.0.0:2379' --advertise-client-urls 'http://0.0.0.0:2379' &
设置V3环境变量(默认V2)
export ETCDCTL_API=3
#或者永久设置 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
示例
# 设置
etcdctl put foo bar
# ok
#读取
etcdctl get foo
# foo
# bar
# 设置新kv并读取前一次的kv
etcdctl put foo bar1 --prev-kv
# OK
# foo
# bar
# 读取
etcdctl get foo
# foo
# bar1
# 给key添加租约(需要提前申请租约)
etcdctl put foo bar --lease=1234abcd
# 报错 etcdserver: requested lease not found。需要先申请一个租约
# 申请一个500秒的租约
etcdctl lease grant 500
# 给key添加租约
#lease 694d6ed6e8fed50f granted with TTL(500s)
etcdctl put foo bar --lease=694d6ed6e8fed50f
# OK
# 使用其当前租约更新key(为了使用现有租约)
etcdctl put foo bar4 --ignore-lease
# ok
etcdctl get foo
# foo
# bar4
# 使用当前值更新kv(为了解除租约,保持值不变)
etcdctl put foo --ignore-value
# OK
备注
如果未将作为命令行参数给出,则此命令尝试从标准输入中读取值。
如果value是值包含"-",会被解析为一个标志位,这个时候输入需要"--"解决
etcdctl put foo -bar4
# Error: unknown shorthand flag: 'b' in -bar4
etcdctl put foo -- -bar4
etcdctl put -- foo -bar5
# OK
可以具有多行或空格,但是必须使用双引号包起来,如下所示:
etcdctl put foo "bar 1 2 3"
# ok
etcdctl get foo
# foo
# 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
etcdctl put foo bar
# OK
etcdctl put foo1 bar1
# OK
etcdctl put foo2 bar2
# OK
etcdctl put foo3 bar3
# OK
读取key为foo的值
etcdctl get foo
# foo
# bar
读取key为foo的值,并且进行16进制编码
etcdctl get foo --hex
# \x66\x6f\x6f
# \x62\x61\x72
读取key前缀为foo的值
etcdctl get foo --prefix
# foo
# bar
# foo1
# bar1
# foo2
# foo2
# foo3
# bar3
读取key前缀为foo的值并且倒序 (默认为ASCEND)
etcdctl get foo --prefix --order="DESCEND"
# foo3
# bar3
# foo2
# bar2
# foo1
# bar1
# foo
# bar
读取所有key的值
etcdctl get --from-key ''
# foo
# bar
# foo1
# bar1
# foo2
# foo2
# foo3
# bar3
根据创建时间读取所有key的值
etcdctl get foo --from-key '' --sort-by=CREATE
# foo
# bar
# foo1
# bar1
# foo2
# foo2
# foo3
# bar3
读取指定版本的kv
etcdctl get foo --rev=0
# foo
# bar
只读取指定版本的v
etcdctl get foo --print-value-only
# foo
只读取指定版本的k
etcdctl get foo --keys-only
# foo
#
读取key的字节排序值大于等于foo1的所有key
etcdctl get --from-key foo1
# foo1
# bar1
# foo2
# bar2
# foo3
# bar3
读取key的字节排序值大于等于foo1并且小于foo3的所有key
etcdctl get foo1 foo3
# foo1
# bar1
# foo2
# bar2
读取key的字节排序值大于等于foo1的所有key的前2条
etcdctl get --from-key foo1 --limit 2
# foo1
# bar1
# foo2
# bar2
备注
如果任何键或值包含不可打印的字符或控制字符,则由于换行而导致简单格式化的输出可能不明确。 为了解决这个问题,设置--hex十六进制编码所有字符串。
DEL [options] <key> [range_end]
如果指定了range_end,则删除指定的键或键范围[key,range_end)左闭右开
Options
prefix -- 删除指定前缀的key
prev-kv -- 删除后返回kv值
from-key -- 从指定Key开始往后删除(根据字节比较)
删除指定key
etcdctl put foo bar
# OK
etcdctl del foo
# 1
etcdctl get foo
删除指定key并返回kv的值
etcdctl del foo1 --prev-kv
# 1
# foo1
# bar1
从指定key开始删除
etcdctl del --from-key foo
# 2
删除以foo为前缀的key
etcdctl del foo --prefix
# 2
TNX[options] (事务)
TXN从标准输入读取多个etcd请求,并将它们作为单个原子事务应用。
可选性
hex -- 输出16进制编码字符串
interactive -- 根据互动提示输入事务程序
输入格式
<Txn> ::= <CMP>* "\n" <THEN> "\n" <ELSE> "\n"
<CMP> ::= (<CMPCREATE>|<CMPMOD>|<CMPVAL>|<CMPVER>|<CMPLEASE>) "\n"
<CMPOP> ::= "<" | "=" | ">"
<CMPCREATE> := ("c"|"create")"("<KEY>")" <CMPOP> <REVISION>
<CMPMOD> ::= ("m"|"mod")"("<KEY>")" <CMPOP> <REVISION>
<CMPVAL> ::= ("val"|"value")"("<KEY>")" <CMPOP> <VALUE>
<CMPVER> ::= ("ver"|"version")"("<KEY>")" <CMPOP> <VERSION>
<CMPLEASE> ::= "lease("<KEY>")" <CMPOP> <LEASE>
<THEN> ::= <OP>*
<ELSE> ::= <OP>*
<OP> ::= ((see put, get, del etcdctl command syntax)) "\n"
<KEY> ::= (%q formatted string)
<VALUE> ::= (%q formatted string)
<REVISION> ::= "\""[0-9]+"\""
<VERSION> ::= "\""[0-9]+"\""
<LEASE> ::= "\""[0-9]+\""
输出
SUCCESS 如果etcd成功处理了事务,
FAILURE 事务处理失败
示例
交互模式 如果确定了就要连续按两次enter,进行下一步
etcdctl put key1 1
etcdctl txn -i
# compares:
mod("key1") > "0"
# success requests (get, put, delete):
put key1 "overwrote-key1"
# failure requests (get, put, delete):
put key1 "created-key1"
put key2 "some extra key"
# SUCCESS
# OK
etcdctl get key --prefix
key1
overwrote-key1
key2
some extra key
# OK
非交互模式
./etcdctl txn <<<'mod("key1") > "0"
put key1 "overwrote-key1"
put key1 "created-key1"
put key2 "some extra key"
'
# FAILURE
# OK
# OK
备注
在TXN命令中使用多行值时,换行符必须表示为\ n。 文字换行符将导致解析失败。
COMPACTION [options] <revision> (压缩)
COMPACTION丢弃给定修订版之前的所有etcd事件历史记录。 由于etcd使用多版本并发控制模型,因此它将所有关键更新保留为事件历史记录。 当不再需要修订的事件历史记录时,可以将所有被替换的键压缩以回收etcd后端数据库中的存储空间。
physical -为true以等待压缩以物理删除所有旧修订
输出
打印压缩的版本
示例
etcdctl compaction 1
# compacted revision 1
WATCH [options] [key or prefix] [range_end] [--] [exec-command arg1 arg2 ...] (监听)
可选性
hex -- 十六进制打印
interactive -- 开启交互式session监听
prefix -- 监听包含前缀的key
prev-kv -- kv改变获取前一个kv
rev -- 监听版本
输入格式
仅交互式模式接受输入。
watch [options] <key or prefix>\n
输出
<event>
[
<old_key>
<old_value>
]
<key>
<value>
...
示例
非交互模式
输入etcdctl watch foo命令开始监听,当监听的key有变化的时候,打印出 事件 key value
# bash1
etcdctl watch foo
# bash2
etcdctl put foo bar
# ok
# bash1
# PUT
# foo
# bar
LEASE <subcommand> (租约)
LEASE提供了租约管理的命令集合
LEASE GRANT <ttl>
LEASE GRANT使用服务器选择的生存时间(以秒为单位)创建新的租约大于或等于请求的TTL值。
输出
Prints a message with the granted lease ID.
Example
etcdctl lease grant 60
# lease 694d6ed6e8fed554 granted with TTL(60s)
LEASE REVOKE <leaseID>
租借撤销会销毁给定的租约,并删除所有附加的key。
Output
打印租约被撤销的消息
示例
etcdctl lease revoke 694d6ed6e8fed558
# lease 694d6ed6e8fed558 revoked
LEASE TIMETOLIVE <leaseID> [options]
LEASE TIMETOLIVE 检索具有给定lease ID的租约信息。
可选项
- keys -- 获取在这个租约上的keys
输出
打印租约信息
示例
# 申请一个租约
etcdctl lease grant 500
# lease 694d6ed6e8fed55b granted with TTL(500s)
# 将租约附加到kv上
etcdctl put foo1 bar --lease=694d6ed6e8fed55b
# OK
# 将租约附加到kv上
etcdctl put foo2 bar --lease=694d6ed6e8fed55b
# OK
# 查看租约的信息
etcdctl lease timetolive 694d6ed6e8fed55b
# lease 694d6ed6e8fed55b granted with TTL(500s), remaining(386s)
# 查看租约的信息和签约的keys
etcdctl lease timetolive 2d8257079fa1bc0c --keys
# lease 694d6ed6e8fed55b granted with TTL(500s), remaining(352s), attached keys([foo1 foo2])
# 查看租约的信息,以json输出
etcdctl lease timetolive 2d8257079fa1bc0c --write-out=json
# {"cluster_id":14841639068965178418,"member_id":10276657743932975437,"revision":31,"raft_term":2,"id":7587842816500225371,"ttl":321,"granted-ttl":500,"keys":null}
# 查看租约的信息和签约的keys,以json输出
etcdctl lease timetolive 2d8257079fa1bc0c --write-out=json --keys
# {"cluster_id":14841639068965178418,"member_id":10276657743932975437,"revision":31,"raft_term":2,"id":7587842816500225371,"ttl":289,"granted-ttl":500,"keys":["Zm9vMQ==","Zm9vMg=="]}
# 租约过期
etcdctl lease timetolive 694d6ed6e8fed55b
# lease 694d6ed6e8fed55b already expired
LEASE LIST
LEASE LIST 列出所有有效的租约
输出
有效租约清单
示例
etcdctl lease grant 500
# lease 694d6ed6e8fed560 granted with TTL(500s)
etcdctl lease list
# found 1 leases
# 694d6ed6e8fed560
LEASE KEEP-ALIVE <leaseID>
LEASE KEEP-ALIVE 定期刷新租约使其不过期
Output
为发送的每个保持活动状态打印一条消息,或打印一条消息,表明租约已到期。
Example
# 起一个10秒生存期的租约
etcdctl lease grant 10
# lease 694d6ed6e8fed562 keepalived with TTL(10)
# lease 694d6ed6e8fed562 keepalived with TTL(10)
# lease 694d6ed6e8fed562 keepalived with TTL(10)
# lease 694d6ed6e8fed562 keepalived with TTL(10)
# lease 694d6ed6e8fed562 keepalived with TTL(10)
...
etcd学习之安装与命令的更多相关文章
- 【分布式】ZooKeeper学习之一:安装及命令行使用
ZooKeeper学习之一:安装及命令行使用 一直都想着好好学一学分布式系统,但是这拖延症晚期也是没得治了,所以干脆强迫自己来写一个系列博客,从zk的安装使用.客户端调用.涉及到的分布式原理.选举过程 ...
- etcd学习记录
参考资料: etcd:从应用场景到实现原理的全方位解读 etcd:用于服务发现的键值存储系统 Etcd学习(一)安装和.NET客户端测试 Etcd学习(二)集群搭建Clustering
- Etcd学习(二)集群搭建Clustering
1.单个etcd节点(测试开发用) 之前我一直开发测试一直是用的一个Etcd节点,然后启动命令一直都是直接打一个etcd(我已经将etcd安装目录的bin目录加入到PATH环 境变量中),然后启动信息 ...
- TCP/IP协议学习之实例ping命令学习笔记
TCP/IP协议学习之实例ping命令学习笔记(一) 一. 目的为了让网络协议学习更有效果,在真实网络上进行ping命令前相关知识的学习,暂时不管DNS,在内网中,进行2台主机间的ping命令的整个详 ...
- MySQL 服务安装及命令使用
MySQL 服务安装及命令使用 课程来源说明 本节实验后续至第17节实验为本课程的进阶篇,都基于 MySQL 官方参考手册制作,并根据实验楼环境进行测试调整改编.在此感谢 MySQL 的开发者,官方文 ...
- Hadoop学习------Hadoop安装方式之(二):伪分布部署
要想发挥Hadoop分布式.并行处理的优势,还须以分布式模式来部署运行Hadoop.单机模式是指Hadoop在单个节点上以单个进程的方式运行,伪分布模式是指在单个节点上运行NameNode.DataN ...
- 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- ...
- 20165223 Linux安装及命令入门
预备作业3:Linux安装及命令入门 一.VirtualBox和Ubuntu的安装 通过学习实践基于VirtualBox虚拟机安装Ubuntu图文教程,我开始学习虚拟机的安装,根据教程一步步试着安装. ...
- 20165328 预备作业3 Linux安装及命令
Linux安装及学习 Linux安装遇到的问题: 问题:在我开始安装虚拟机的时候,在安装过程中总会出现初始界面,且无法跳过,陷入死循环. 解决方法:我在网上百度搜索该问题之后得到了答案,第一个界面是要 ...
随机推荐
- windows api多线程
windows api多线程 原文地址:https://www.cnblogs.com/flowingwind/p/8452693.html 线程是程序中一个单一的顺序控制流程.在单个程序中同时运行 ...
- D. Vasya and Triangle(思维, 三角形)
传送门 题意: 给你 n, m, k, 问你是否存在一个三角形, 满足三角形的面积等于 n * m / k: 若存在, 输出YES, 且输出满足条件的三角形的三个坐标(答案有多种,则输出任意一种) ...
- AtCoder Grand Contest 038 题解
传送门 这场表现的宛如一个\(zz\) \(A\) 先直接把前\(b\)行全写成\(1\),再把前\(a\)列取反就行 const int N=1005; char mp[N][N];int n,m, ...
- docker安装postgresql
1.在linux执行以下代码: docker run -p : -v /home/docker/postgresql/data:/var/lib/postgresql/data -e POSTGRES ...
- 浅谈python闭包及装饰器
1. 什么是闭包: 闭包 是指有权访问另一个函数作用域中变量的函数,创建闭包的最常见的方式就是在一个函数内创建另一个函数,通过另一个函数访问这个函数的局部变量,利用闭包可以突破作用链域,将函数内部的变 ...
- 中山纪中集训Day4双是测试(划沝) 九校联考-DL24凉心模拟Day2
A组T1 锻造 (forging) 1.1 题目背景 勇者虽然武力值很高,但在经历了多次战斗后,发现怪物越来越难打于是开始思考是不是自己平时锻炼没到位,于是苦练一个月后发现......自己连一个史莱姆 ...
- Linux远程传输文件免密码
首先为什么Linux远程传输要免密码?手动使用scp命令传输每次都要输密码太过麻烦了. 开发中有一句话,能复制粘贴尽量不要手打. 运维中有一句话,能脚本化实现尽量不要手动执行. 远程传输文件免密码的目 ...
- 作业要求2018092609-2 选题 Scrum立会报告+燃尽图 05
此作业要求参见:https://edu.cnblogs.com/campus/nenu/2019fall/homework/8678 一.小组情况组长:贺敬文组员:彭思雨 王志文 位军营 杨萍队名:胜 ...
- T-MAX组--项目冲刺(第七天)
THE SEVENTH DAY 项目相关 作业相关 具体描述 所属班级 2019秋福大软件工程实践Z班 作业要求 团队作业第五次-项目冲刺 作业正文 T-MAX组--项目冲刺(第七天) 团队名称 T- ...
- 用variant的数据来推导基因表达 | Imputation of Expression Using PrediXcan
一个工具的逻辑得足够完善.意义足够重大,才有资格发在NG上. A gene-based association method for mapping traits using reference tr ...