一、概述

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. Failed to unregister the JMX name: org.apache.commons.dbcp2:name=xxx,type=BasicDataSource

    把datesource的bean的class由 org.apache.commons.dbcp2.BasicDataSource 改成 org.apache.tomcat.dbcp.dbcp.Basi ...

  2. Spring Security(一)

    Spring Security(一) 基本原理 前言 Spring Security核心功能 认证(你是谁) 授权(你能干什么) 攻击防护(防止伪造身份) Srping Security基本原理 项目 ...

  3. javascript:类数组 -- 对象

    在javascript中,对象与数组都是这门语言的原生规范中的基本数据类型,处于并列的位置. 类数组:本质是一个对象,只是这个 对象  的属性有点特殊,模拟出数组的一些特性. 一般来说,如果我们有一个 ...

  4. 【java】一些零碎的知识点

    java注释文档 一些常用的javadoc标签 常用javadoc标签 @see: other-class 引用other-class 生成的html文档会有一个See Alse 作为超链接的只是条目 ...

  5. ConcurrentDictionary的用法

    private static ConcurrentDictionary<Guid, string> dictDbNames = new ConcurrentDictionary<Gu ...

  6. NodeJS配置TaoBao源

    npm install -g cnpm --registry=https://registry.npm.taobao.org

  7. MySql 利用mysql&mysqldum导入导出数据

    MySql 利用mysql&mysqldum导入导出数据 by:授客 QQ:1033553122   测试环境 Linux下测试,数据库MySql 工具 mysqldump,该命令位于mysq ...

  8. Android热修复之 - 阿里开源的热补丁

    1.1 基本介绍 我们先去github上面了解它https://github.com/alibaba/AndFix 这里就有一个概念那就AndFix.apatch补丁用来修复方法,接下来我们看看到底是 ...

  9. 常用的第三方模块 psutil url

    psutil 用Python来编写脚本简化日常的运维工作是Python的一个重要用途.在Linux下,有许多系统命令可以让我们时刻监控系统运行的状态,如ps,top,free等等.要获取这些系统信息, ...

  10. [WPF 知识总结系列] —— 基本控件的简单样式集合

    一.ScrollBar <ResourceDictionary xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presenta ...