etcd - 一个分布式一致性键值存储系统

etcd是一个分布式一致性键值存储系统,用于共享配置和服务发现,专注于:

  • 简单:良好定义的,面向用户的API (gRPC)

  • 安全: 带有可选客户端证书认证的自动TLS

  • 快速:测试验证,每秒10000写入

  • 可靠:使用Raft适当分布

etcd是Go编写,并使用Raft一致性算法来管理高可用复制日志,架构如下图所示:

下载安装

$ mkdir -p $GOPATH/src/github.com/coreos
$ cd !$
$ git clone https://github.com/coreos/etcd.git
$ cd etcd
$ ./build
$ ./bin/etcd

另外一种下载安装的方法:

直接下载etcd二进制 (包含etcd、etcdctl)
https://github.com/coreos/etcd/releases

测试

$ cd $GOPATH
$ ./bin/etcd$ cd $GOPATH
$ ETCDCTL_API=3 ./bin/etcdctl put foo bar# 输出结果显示OK,表示安装成功
OK

搭建本地集群

$ go get github.com/mattn/goreman$ cd $GOPATH/src/github.com/coreos/etcd
$ goreman -f Procfile start

查看本地集群的服务器列表

$ cd $GOPATH/src/github.com/coreos/etcd$ ./bin/etcdctl member list# 显示结果8211f1d0f64f3269: name=infra1 peerURLs=http://127.0.0.1:12380 clientURLs=http://127.0.0.1:2379 isLeader=false
91bc3c398fb3c146: name=infra2 peerURLs=http://127.0.0.1:22380 clientURLs=http://127.0.0.1:22379 isLeader=true
fd422379fda50e48: name=infra3 peerURLs=http://127.0.0.1:32380 clientURLs=http://127.0.0.1:32379 isLeader=false

存储数据

export ETCDCTL_API=3$ ./bin/etcdctl put foo "Hello World!"OK$ ./bin/etcdctl get foofoo
Hello World!$ ./bin/etcdctl  --write-out="json" get foo{"header":{"cluster_id":17237436991929493444,"member_id":9372538179322589801,"revision":2,"raft_term":2},"kvs":[{"key":"Zm9v","create_revision":2,"mod_revision":2,"version":1,"value":"SGVsbG8gV29ybGQh"}],"count":1}

根据前缀查询


$ ./bin/etcdctl put web1 value1
$ ./bin/etcdctl put web2 value2
$ ./bin/etcdctl put web3 value3$ ./bin/etcdctl get web --prefixweb1
value1
web2
value2
web3
value3

删除数据

$ ./bin/etcdctl put key myvalue
$ ./bin/etcdctl del key
1
$ ./bin/etcdctl get key
// 查询结果为空$ ./bin/etcdctl put k1 value1
$ ./bin/etcdctl put k2 value2
$ ./bin/etcdctl del k --prefix
2
$ ./bin/etcdctl get k --prefix
// 查询结果为空

事务写入

$ ./bin/etcdctl put user1 bad
OK
$ ./bin/etcdctl txn --interactivecompares:
// 输入以下内容,输入结束按 两次回车
value("user1") = "bad"      

//如果 user1 = bad,则执行 get user1
success requests (get, put, del):
get user1

//如果 user1 != bad,则执行 put user1 good
failure requests (get, put, del):
put user1 good

// 运行结果,执行 success
SUCCESSuser1
bad$ ./bin/etcdctl txn --interactive
compares:
value("user1") = "111"  

// 如果 user1 = 111,则执行 get user1
success requests (get, put, del):
get user1

//如果 user1 != 111,则执行 put user1 2222
failure requests (get, put, del):
put user1 2222

// 运行结果,执行 failure
FAILUREOK$ ./bin/etcdctl get user1
user1
2222

watch

// 当 stock1 的数值改变( put 方法)的时候,watch 会收到通知
$ ./bin/etcdctl watch stock1

// 新打开终端
$ export ETCDCTL_API=3
$ ./bin/etcdctl put stock1 1000

//在watch 终端显示
PUT
stock1
1000$ ./bin/etcdctl watch stock --prefix
$ ./bin/etcdctl put stock1 10
$ ./bin/etcdctl put stock2 20

lease

$ ./bin/etcdctl lease grant 300
# lease 326963a02758b527 granted with TTL(300s)$ ./bin/etcdctl put sample value --lease=326963a02758b527
OK$ ./bin/etcdctl get sample$ ./bin/etcdctl lease keep-alive 326963a02758b520
$ ./bin/etcdctl lease revoke 326963a02758b527
lease 326963a02758b527 revoked# or after 300 seconds
$ ./bin/etcdctl get sample

Distributed locks

//第一终端
$ ./bin/etcdctl lock mutex1
mutex1/326963a02758b52d# 第二终端
$ ./bin/etcdctl lock mutex1// 当第一个终端结束了,第二个终端会显示
mutex1/326963a02758b531

Elections

$ ./bin/etcdctl elect one p1one/326963a02758b539
p1# another client with the same name blocks
$ ./bin/etcdctl elect one p2

//结束第一终端,第二终端显示
one/326963a02758b53e
p2

Cluster status

集群状态

$ ./bin/etcdctl --write-out=table endpoint status$ ./bin/etcdctl endpoint health

Snapshot

./bin/etcdctl snapshot save my.dbSnapshot saved at my.db./bin/etcdctl --write-out=table snapshot status my.db

Member

./bin/etcdctl member list -w table

etcd - 一个分布式一致性键值存储系统相关推荐

  1. 分布式键值存储系统ETCD调研

    分布式键值存储系统ETCD调研 分布式键值存储系统ETCD调研 简介 etcd是一个开源的分布式键值存储工具--为CoreOS集群提供配置服务.发现服务和协同调度.Etcd运行在集群的每个coreos ...

  2. 分布式键值存储系统ETCD介绍

    前文介绍了分布式服务框架Zookeeper的一些概念,本文继续介绍ETCD相关概念.ETCD作为分布式键值存储系统,使用场景上和Zookeeper有很多相似之处,但在设计理念以及架构稳定性和性能上有了 ...

  3. Docker基础26--6.1 Etcd—高可用的键值数据库

    6.1 Etcd-高可用的键值数据库 6.1.1 etcd概述 Etcd是CoreOS团队于2013年6月发起的开源项目,它的目标是构建一个高可用的分布式键值(key-value)仓库,遵循Apach ...

  4. 分布式事务键值数据库 TiKV 加入 CNCF 沙箱孵化器

    百度智能云 云生态狂欢季 热门云产品1折起>>>   云原生计算基金会 CNCF 昨日宣布接纳 TiKV 开源分布式事务键值数据库作为 CNCF 沙箱的早期发展云原生项目. TiKV ...

  5. python 取出字典的键或者值/如何删除一个字典的键值对/如何遍历字典

    先定义一个字典并直接进行初始化赋值 my_dict = dict(name="lowman", age=45, money=998, hourse=None) 1.取出该字典所有的 ...

  6. [单片机框架] [kv_sys] 实现一个简易KV键值系统(最终版)

    [单片机框架] [kv_sys] 实现一个简易KV键值系统 [单片机框架] [kv_sys] 实现一个简易KV键值系统(升级版) 本版本改为数据任意长度,灵活性更高. 版本 Code byte RO ...

  7. [单片机框架] [kv_sys] 实现一个简易KV键值系统(升级版)

    [单片机框架] [kv_sys] 实现一个简易KV键值系统 Env 小型KV数据库,支持 写平衡(磨损平衡) 及掉电保护模式 让Flash变为NoSQL(非关系型数据库)模型的小型键值(Key-Val ...

  8. python取出字典的某个键_python 取出字典的键或者值/如何删除一个字典的键值对/如何遍历字典...

    先定义一个字典并直接进行初始化赋值 my_dict = dict(name="lowman", age=45, money=998, hourse=None) 1.取出该字典所有的 ...

  9. etcd 笔记(03)— etcd 客户端使用(键值的增、删、改、查)、watch监测键、lease使用(创建租约、撤销租约、刷新租期、查询租期)

    1. etcd 客户端 etcdctl 是一个命令行客户端,便于我们进行服务测试或手动修改数据库内容,etcdctl 在两个不同的 etcd 版本(v2 和 v3)下的功能和使用方式也完全不同. 一般 ...

最新文章

  1. java缓存技术选型,重难点整理
  2. Qt quick 编程
  3. java内存模型 原子性_Java内存模型JMM 高并发原子性可见性有序性简介 多线程中篇(十)...
  4. C++ 面向对象(数据封装)
  5. 逆波兰计算器android源码简书,计算器的核心算法-JavaScript实现(逆波兰表达式)...
  6. linux 软件 名称 更新,linux软件版本管理命令update-alternatives使用详解
  7. linux文件系统扩容操作步骤,仅供参考
  8. python列表去括号_python的常用序列
  9. 小时光扫地机器人圆圆_小时光:圆圆录像功能已开启,无死角录制林一霸道总裁一面,超甜...
  10. 信息抽取——关系抽取
  11. bzoj1010: [HNOI2008]玩具装箱toy
  12. vue中npm run dev运行项目不能自动打开浏览器! 以及 webstorm跑vue项目jshint一直提示错误问题的解决方法!...
  13. 上传文件与下载文件不一致的怪事
  14. [转]c++中RTTI的观念和使用
  15. C#:重启后,AssemblyInfo中AssemblyTitle的描述内容显示正常.........
  16. 配置sdk的环境变量
  17. 双非本科地信前端面试题目
  18. 123456789中间任意加+或-结果等于100
  19. VS 由于找不到ucrtbased.dll,无法继续执行代码。
  20. python中 d是什么意思_python里d是什么意思

热门文章

  1. ajax无刷新留言板远吗,基于jquery实现ajax无刷新评论
  2. echart x轴 倾斜_1次加工28个零件,这就是为什么5轴机床这么牛:
  3. mysql 打印_故障分析 | MySQL:5.6大事务show engine innodb status故障一例
  4. 成功解决 “this version of pandas is incompatible with numpy < 1.15.4\n“ImportError: this version of pand
  5. ML:机器学习中与模型相关的一些常见的判断逻辑(根据自调整阈值计算阳性率)
  6. 成功解决label_error >= 0 label_error < static_cast<int>(nclass) MultiClassEvaluation: label must be i
  7. 成功解决 .Quit() File COMObject InternetExplorer.Application, line 2, in Quit pywintypes.com_error
  8. EL之DTRFGBT:基于三种算法(DT、RF、GBT)对泰坦尼克号乘客数据集进行二分类(是否获救)预测并对比各自性能
  9. 洛谷 P4127 [AHOI2009]同类分布
  10. (转)Oracle与DB2在数据库高可用技术上的相同与差异探讨