博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
ETCD 安装及使用
阅读量:6535 次
发布时间:2019-06-24

本文共 5167 字,大约阅读时间需要 17 分钟。

hot3.png

安装etcd:

操作如下

$ export GOPATH=$HOME/go$ mkdir -p $GOPATH/src/go.etcd.io$ git clone https://gitee.com/who7708/etcd 或 git clone https://github.com/etcd-io/etcd$ cd etcd$ ./build$ ./bin/etcd验证:$ ./bin/etcdctl put mykey "this is awesome"$ ./bin/etcdctl get mykeymykeythis is awesome
  • 启动成功

  1. 更新 message,没有则增加
curl http://127.0.0.1:2379/v2/keys/message -XPUT -d value="Hello etcd" | jq .新增时:{  "node": {    "createdIndex": 4,    "modifiedIndex": 4,    "value": "Hello world",    "key": "/message"  },  "action": "set"}更新时:{  "prevNode": {    "createdIndex": 4,    "modifiedIndex": 4,    "value": "Hello world",    "key": "/message"  },  "node": {    "createdIndex": 5,    "modifiedIndex": 5,    "value": "Hello etcd",    "key": "/message"  },  "action": "set"}
  • action 请求的动作,因为是新建一个 key 并设置它的值,所以是 set
  • node.key key 的 HTTP 路径
  • node.value key 的值
  • node.createdIndex 每次有 key 被创建的时候增加
  • node.modifiedIndex 每次有 key 被修改的时候增加
  • prevNode 更新之前该 key 的信息
  1. 查询 message
curl http://127.0.0.1:2379/v2/keys/message | jq .{  "node": {    "createdIndex": 5,    "modifiedIndex": 5,    "value": "Hello etcd",    "key": "/message"  },  "action": "get"}
  1. 删除 message
curl http://127.0.0.1:2379/v2/keys/message -XDELETE | jq .{  "prevNode": {    "createdIndex": 5,    "modifiedIndex": 5,    "value": "Hello etcd",    "key": "/message"  },  "node": {    "createdIndex": 5,    "modifiedIndex": 7,    "key": "/message"  },  "action": "delete"}

其中: modifiedIndex 增加了,但是 createdIndex 没有变化,因为这是一个修改操作,不是新建操作

  1. 设置 key 存活时间(TTL, time to live)
curl http://127.0.0.1:2379/v2/keys/message-ttl -XPUT -d value="Hello etcd" -d ttl=5 | jq .{  "prevNode": {    "createdIndex": 11,    "modifiedIndex": 11,    "value": "Hello etcd",    "key": "/message-ttl"  },  "node": {    "createdIndex": 12,    "modifiedIndex": 12,    "ttl": 5,    "expiration": "2019-04-28T06:28:38.477817864Z",    "value": "Hello etcd",    "key": "/message-ttl"  },  "action": "set"}

多出的两个字段含义:

  • expiration:代表 key 过期被删除的时间
  • ttl:表示 key 剩余存活时间 如果需要取消 key 的过期,则重新更新下此 key 并将 ttl 参数设置为空,即 ttl=
  1. 更新存活时间 refresh=true
curl http://127.0.0.1:2379/v2/keys/message-ttl -XPUT -d ttl=10 -d refresh=true | jq .{  "prevNode": {    "createdIndex": 42,    "modifiedIndex": 42,    "ttl": 2,    "expiration": "2019-04-28T06:37:02.466721738Z",    "value": "Hello etcd",    "key": "/message-ttl"  },  "node": {    "createdIndex": 43,    "modifiedIndex": 43,    "ttl": 10,    "expiration": "2019-04-28T06:37:11.045243954Z",    "value": "Hello etcd",    "key": "/message-ttl"  },  "action": "set"}
  1. 监听某个 key 或某个目录下的 key 变化 wait=true [recursive=true]
curl 无法进行堵塞.可以使用 wgetwget http://127.0.0.1:2379/v2/keys/message-ttl?wait=true# curl -XGET http://127.0.0.1:2379/v2/keys/message-ttl -d wait=true | jq .{  "prevNode": {    "createdIndex": 45,    "modifiedIndex": 45,    "value": "hahaha",    "key": "/message-ttl"  },  "node": {    "createdIndex": 46,    "modifiedIndex": 46,    "value": "Hello etcdsssssssssssssssss",    "key": "/message-ttl"  },  "action": "set"}

当 key 被修改时,则会获取到修改后的信息了. 除了监听 key 的变化, 还可以提供基于 index 的监听。如果通过 waitIndex 指定了 index,那么会返回从 index 开始出现的第一个事件,这包含了两种情况:

  • 给出的 index 小于等于当前 index ,即事件已经发生,那么监听会立即返回该事件
  • 给出的 index 大于当前 index,等待 index 之后的事件发生并返回
  1. 获取 etcd 服务的版本信息
curl http http://127.0.0.1:2379/version | jq .{  "etcdcluster": "3.3.0",  "etcdserver": "3.3.0+git"}
  1. 获取所有key信息
curl http://127.0.0.1:2379/v2/keys | jq .{  "node": {    "nodes": [      {        "createdIndex": 10,        "modifiedIndex": 10,        "value": "Hello etcd",        "key": "/message"      },      ...    ],    "dir": true  },  "action": "get"}
  1. 响应头
HTTP/1.1 200 OKAccess-Control-Allow-Headers: accept, content-type, authorizationAccess-Control-Allow-Methods: POST, GET, OPTIONS, PUT, DELETEAccess-Control-Allow-Origin: *Content-Type: application/jsonX-Etcd-Cluster-Id: cdf818194e3a8c32X-Etcd-Index: 10X-Raft-Index: 11X-Raft-Term: 2Date: Sun, 28 Apr 2019 06:20:43 GMTContent-Length: 354
  • X-Etcd-Index 当前 etcd 集群的 index
  • X-Raft-Index raft 集群的 index
  • X-Raft-Term raft 集群的任期,每次有 leader 选举的时候,这个值就会增加
  1. 获取集群数据信息 etcd 还保存了集群的数据信息,包括节点之间的网络信息,操作的统计信息。
  • /v2/stats/leader会返回集群中 leader 的信息,以及 followers 的基本信息
  • /v2/stats/self 会返回当前节点的信息
  • /v2/state/store:会返回各种命令的统计信息

常用配置的参数和它们的解释

./etcd --name=node1 \    --listen-client-urls "http://127.0.0.1:2379" \    --advertise-client-urls "http://127.0.0.1:2379" \    --listen-peer-urls "http://127.0.0.1:2380"
  • --name 方便理解的节点名称,默认为 default,在集群中应该保持唯一,可以使用 hostname
  • --data-dir 服务运行数据保存的路径,默认为 ${name}.etcd
  • --snapshot-count 指定有多少事务(transaction)被提交时,触发截取快照保存到磁盘
  • --heartbeat-interval leader 多久发送一次心跳到 followers。默认值是 100ms
  • --eletion-timeout 重新投票的超时时间,如果 follow 在该时间间隔没有收到心跳包,会触发重新投票,默认为 1000 ms
  • --listen-peer-urls 和同伴通信的地址,比如 localhost!
  • --listen-client-urls 对外提供服务的地址 比如 etcd 交互
  • --advertise-client-urls 对外公告的该节点客户端监听地址,这个值会告诉集群中其他节点
  • --initial-advertise-peer-urls 该节点同伴监听地址,这个值会告诉集群中其他节点
  • --initial-cluster 集群中所有节点的信息,格式为 node1= 这里的 node1 是节点的 --name 指定的名字;后面的 ip1:2380 是 --initial-advertise-peer-urls 指定的值
  • --initial-cluster-state 新建集群的时候,这个值为 new;假如已经存在的集群,这个值为 existing
  • --initial-cluster-token 创建集群的 token,这个值每个集群保持唯一。这样的话,如果你要重新创建集群,即使配置和之前一样,也会再次生成新的集群和节点 uuid;否则会导致多个集群之间的冲突,造成未知的错误

其他

  • 更多启动参数,请使用 ./etcd --help 查看
  • 其他 API 使用请

转载于:https://my.oschina.net/who7708/blog/3043468

你可能感兴趣的文章
博客版权问题
查看>>
学习PrintWriter类
查看>>
emacs学习中
查看>>
Java中OOP对象和引用
查看>>
微信小程序 事件
查看>>
Eclipse自动补全设置
查看>>
lizbaka的周记
查看>>
面向对象实验四(输入输出流)
查看>>
Android 快捷小工具
查看>>
Android tabHost 刷新Activity
查看>>
《常微分方程教程》习题2.4.1,(4)
查看>>
GraphGL教程
查看>>
组件化和模块化
查看>>
维护keepalived与mysql漂移脚本
查看>>
C++ sort使用两个参数来排序
查看>>
ios导航栏自定义返回按钮后,多出蓝点bug
查看>>
修改linux的最大文件句柄数限制
查看>>
LeetCode:19. Remove Nth Node From End of List(Medium)
查看>>
从零开始学习cocoStudio(1)--cocoStudio是什么?
查看>>
convertFromUIImageToStruct
查看>>