一、概述

etcd是一个高可用的键值存储系统,主要用于共享配置和服务发现。etcd是由CoreOS开发并维护的,灵感来自于 ZooKeeper 和 Doozer,它使用Go语言编写,并通过Raft一致性算法处理日志复制以保证强一致性。Raft是一个新的一致性算法,适用于分布式系统的日志复制,Raft通过选举的方式来实现一致性。Google的容器集群管理系统Kubernetes、开源PaaS平台Cloud Foundry和CoreOS的Fleet都广泛使用了etcd。在分布式系统中,如何管理节点间的状态一直是一个难题,etcd像是专门为集群环境的服务发现和注册而设计,它提供了数据TTL失效、数据改变监视、多值、目录监听、分布式锁原子操作等功能,可以方便的跟踪并管理集群节点的状态。

etcd的特性如下:

简单: 支持curl方式的用户API(HTTP+JSON)
安全: 可选的SSL客户端证书认证
快速: 单实例每秒 1000 次写操作
可靠: 使用Raft保证一致性

二、安装和使用
1.安装

etcd的安装非常简单,可以直接下载编译后的可执行文件,下载地址:https://github.com/coreos/etcd/releases

curl -L https://github.com/coreos/etcd/releases/download/v3.0.6/etcd-v3.0.6-linux-amd64.tar.gz -o etcd-v3.0.6-linux-amd64.tar.gz

tar xzvf etcd-v3.0.6-linux-amd64.tar.gz && cd etcd-v3.0.6-linux-amd64

./etcd --version

2.使用

etcd命令行接口使用

(1)设置一个key的value
curl -s http://127.0.0.1:2379/v2/keys/message -X PUT -d value="Hello world" |jq .

可能会出现这样的信息导致命令执行失败:
The program 'jq' is currently not installed. You can install it by typing:
apt install jq

执行 apt install jq 即可解决这个问题

控制台输出:

{
  "action": "set",
  "node": {
    "key": "/message",
    "value": "Hello world",
    "modifiedIndex": 7,
    "createdIndex": 7
  },
  "prevNode": {
    "key": "/message",
    "value": "Hello world",
    "modifiedIndex": 6,
    "createdIndex": 6
  }
}

(2)获取一个key的value
curl -s http://127.0.0.1:2379/v2/keys/message |jq .

控制台输出:
{
  "action": "get",
  "node": {
    "key": "/message",
    "value": "Hello world",
    "modifiedIndex": 7,
    "createdIndex": 7
  }
}

(3)改变一个key的value
curl -s http://127.0.0.1:2379/v2/keys/message -X PUT -d value="Hello etcd" |jq .

控制台输出:

(4)删除一个key节点
curl -s http://127.0.0.1:2379/v2/keys/message -X DELETE |jq .

控制台输出:
{
  "action": "delete",
  "node": {
    "key": "/message",
    "modifiedIndex": 9,
    "createdIndex": 8
  },
  "prevNode": {
    "key": "/message",
    "value": "Hello etcd",
    "modifiedIndex": 8,
    "createdIndex": 8
  }
}

(5)使用ttl(即设置一个key的值并给这个key加一个生命周期,当超过这个时间该值没有被访问则自动被删除)
 curl -s http://127.0.0.1:2379/v2/keys/foo -X PUT -d value=bar -d ttl=5 |jq .

控制台输出:
{
  "action": "set",
  "node": {
    "key": "/foo",
    "value": "bar",
    "expiration": "2018-12-27T07:57:39.165083953Z",
    "ttl": 5,
    "modifiedIndex": 10,
    "createdIndex": 10
  }
}

(6)watch一个值的变化
curl -s http://127.0.0.1:2379/v2/keys/foo?wait=true

(7)创建一个目录
curl -s http://127.0.0.1:2379/v2/keys/dir -XPUT -d dir=true |jq .

控制台输出:

{
  "action": "set",
  "node": {
    "key": "/dir",
    "dir": true,
    "modifiedIndex": 12,
    "createdIndex": 12
  }
}

(8)列举一个目录
curl -s http://127.0.0.1:2379/v2/keys/dir

(9)递归列举一个目录
curl -s http://127.0.0.1:2379/v2/keys/dir?recursive=true

(10)监控一个目录下的所有key的变化,包括子目录的。可以使用命令
curl -s http://127.0.0.1:2379/v2/keys/dir?recursive=true&wait=true

(11)删除一个目录
curl -s http://127.0.0.1:2379/v2/keys/dir?dir=true -XDELETE

参考地址:https://www.cnblogs.com/xigang8068/p/5786027.html

服务发现系统etcd之安装和使用的更多相关文章

  1. 服务发现之 Etcd VS Consul

    抄自这里 *********************************************************************************************** ...

  2. etcd:用于服务发现的键值存储系统

    etcd是一个高可用的键值存储系统,主要用于共享配置和服务发现.etcd是由CoreOS开发并维护的,灵感来自于 ZooKeeper 和 Doozer,它使用Go语言编写,并通过Raft一致性算法处理 ...

  3. 服务发现:Zookeeper vs etcd vs Consul

    [编者的话]本文对比了Zookeeper.etcd和Consul三种服务发现工具,探讨了最佳的服务发现解决方案,仅供参考. 如果使用预定义的端口,服务越多,发生冲突的可能性越大,毕竟,不可能有两个服务 ...

  4. 服务发现:Zookeeper vs etcd vs Consul 参考自http://dockone.io/article/667

    服务发现:Zookeeper vs etcd vs Consul [编者的话]本文对比了Zookeeper.etcd和Consul三种服务发现工具,探讨了最佳的服务发现解决方案,仅供参考. 如果使用预 ...

  5. 服务发现:Zookeeper vs etcd vs Consul_转

    转自:https://mp.weixin.qq.com/s?__biz=MzA5OTAyNzQ2OA==&mid=208173179&idx=1&sn=392c17b136c2 ...

  6. 服务发现对比:Zookeeper vs etcd vs Consul

    我们拥有的服务越多,如果我们使用预定义的端口,就会发生冲突的可能性越大.毕竟,在同一端口上不能监听两个服务.管理一百个服务所使用的所有端口的紧密列表本身就是一项挑战.将那些服务所需的数据库添加到该列表 ...

  7. 简单聊聊服务发现(redis, zk,etcd, consul)

    什么是服务发现? 服务发现并没有怎样的高深莫测,它的原理再简单不过.只是市面上太多文章将服务发现的难度妖魔化,读者被绕的云里雾里,顿觉自己智商低下不敢高攀. 服务提供者是什么,简单点说就是一个HTTP ...

  8. 简单聊聊服务发现(redis, zk,etcd, consul)(转载)

    服务发现并没有怎样的高深莫测,它的原理再简单不过.只是市面上太多文章将服务发现的难度妖魔化,读者被绕的云里雾里,顿觉自己智商低下不敢高攀. 服务提供者是什么,简单点说就是一个HTTP服务器,提供了AP ...

  9. etcd实现服务发现

    前言 etcd环境安装与使用文章中介绍了etcd的安装及v3 API使用,本篇将介绍如何使用etcd实现服务发现功能. 服务发现介绍 服务发现要解决的也是分布式系统中最常见的问题之一,即在同一个分布式 ...

随机推荐

  1. Oracle问题之ORA-12560TNS:协议适配器错误-转载

    作者:@haimishasha本文为作者原创,转载请注明出处:https://www.cnblogs.com/haimishasha/p/5394963.html 目录 Oracle问题之ORA-12 ...

  2. Java基础——GUI编程(一)

    一.定义 GUI全称是Graphical User Interface,即图形用户界面.JDK中提供了AWT 和 Swing 两个包,用于GUI程序的设计和开发. 1.java .awt  abstr ...

  3. Java读取excel(兼容03和07格式)

    读取excel,首先需要下载POI的jar,可以去官网下,也可以在这里下载 一.简单说明 excel2003和excel2007区别比较大,最直观的感受就是扩展名不一样,哈哈 不过,使用POI的API ...

  4. Java虚拟机 - 结构原理与运行时数据区域

    http://liuwangshu.cn/java/jvm/1-runtime-data-area.html 前言 本来计划要写Android内存优化的,觉得有必要在此之前介绍一下Java虚拟机的相关 ...

  5. 应用rbac组件 动态生成一级菜单

    动态生成一级菜单 改表结构 需要知道是否是菜单\icon\名称权限表 +字段: is_menu = models.BooleanField(max_length=32,verbose_name='是否 ...

  6. 正则表达式 ?P<name>

    import re # 将匹配的数字乘以 2 def double(matched): value = int(matched.group('value')) return str(value * 2 ...

  7. django-csrf攻击

    一.原理 csrf(Cross Site Request Forgery, 跨站域请求伪造:CSRF 攻击允许恶意用户在另一个用户不知情或者未同意的情况下,以他的身份执 行操作. CSRF 攻击是黑客 ...

  8. 一些css属性的理解和运用。

    1,弹性容器通过设置 display 属性的值为 flex 或 inline-flex将其定义为弹性容器 常用flex来编写盒子横向分布; 一: flex-direction flex-directi ...

  9. 企业如何选择合适的BI工具?

    在没认清现状前,企业当然不能一言不合就上BI. BI不同于一般的企业管理软件,不能简单归类为类似用于提高管理的ERP和WMS,或用于提高企业效率的OA.BPM.BI的本质应该是通过展现数据,用于加强企 ...

  10. php对文件的操作

    如何让自己磁盘中的文件夹和目录显示在网页上?那就来看一下,用php是怎么来操作他们的吧 php中文件,一般包含两块内容,文件和目录先来一句一句的看代码,及他的作用 运行后看一下结果 file 指的是文 ...