一、概述

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. Java - Thread 和 Runnable实现多线程

    Java多线程系列--“基础篇”02之 常用的实现多线程的两种方式 概要 本章,我们学习“常用的实现多线程的2种方式”:Thread 和 Runnable.之所以说是常用的,是因为通过还可以通过jav ...

  2. 微信小程序点击图片放大预览

    微信小程序点击图片放大预览使用到 wx.previewImage 接口,可以放大.上/下一张 上代码 wxml代码 <view class='content-img' wx:if="{ ...

  3. JavaScript 事件处理机制

    DOM 事件流 DOM 是一个树型结构,当一个HTML元素产生一个事件时,该事件会在该元素结点与根节点之间按特定的顺序传播,路径所经过的节点都会收到该事件,这个传播过程可称为DOM事件流.而事件传播的 ...

  4. 【代码笔记】iOS-增加右侧按钮

    一,工程图. 二,代码. ViewController.m - (void)viewDidLoad { [super viewDidLoad]; // Do any additional setup ...

  5. 百度自动推送js

    <!DOCTYPE html> <!-- saved from url=(0014)about:internet --> <html> <head> & ...

  6. Windows10设置

    按下Win+R键,输入gpedit.msc,打开组策略窗口

  7. chrome浏览器使用chrome://inspect调试app 网页,打开空白的问题

    使用chrome浏览器,输入chrome://inspect可以调试android app里面的网页,如果inspect的时候,是空白, 问题截图: 那就在C:\Windows\System32\dr ...

  8. android:首页点击返回键,两秒内再次点击退出系统

    //记录用户首次点击返回键的时间 private long firstTime = 0; /** * 通过监听keyUp 实现双击返回键退出程序 * @param keyCode * @param e ...

  9. [Android] 锁定屏幕

    最近玩的比较欢脱,欠了好多东西没写.今天先简单地补一篇简单的内容.就是最近涉及到一个锁定Android设备屏幕的设计,大概就是通过一个按钮或者服务消息,来控制设备界面完全锁定,不能点击任何东西.感觉上 ...

  10. PHP多进程编之pcntl_fork

    其实PHP是支持并发的,只是平时很少使用而已.平时使用最多的应该是使用PHP-FMP调度php进程了吧. 但是,PHP的使用并不局限于做Web,我们完全也可以使用PHP来进行系统工具类的编程,做监控或 ...