etcd是一个高可用的键值存储系统,主要用于共享配置和服务发现etcd是由CoreOS开发并维护的,灵感来自于ZooKeeperDoozer,它使用Go语言编写,并通过Raft一致性算法处理日志复制以保证强一致性。Raft是一个来自Stanford的新的一致性算法,适用于分布式系统的日志复制,Raft通过选举的方式来实现一致性,在Raft中,任何一个节点都可能成为Leader

分布式系统中的数据分为控制数据和应用数据。
使用etcd的场景默认处理的数据都是控制数据,对于应用数据,只推荐数据量很小,但是更新访问频繁的情况。

1.etcd的特性如下:
  • 简单: curl可访问的用户的API(HTTP+JSON)
  • 安全: 可选的SSL客户端证书认证
  • 快速: 单实例每秒 1000 次写操作
  • 可靠: 使用Raft保证一致性

2.源码编译

# go is required
$ go version
go version go1.6.2 linux/amd64
# GOPATH should be set correctly
$ echo $GOPATH
/home/chenjianhua/gocode:/home/chenjianhua/myGolang
$ cd /home/chenjianhua/myGolang/src
$ git clone git@github.com:coreos/etcd.git
$ cd etcd
$ ./build
3.运行服务和简单Key Value操作
$ ./bin/etcd

#etcdctl
#etcdctl最新版本是v3.设置环境变量ETCDCTL_API=3
$export ETCDCTL_API=3
$etcdctl version
etcdctl version: 3.2.18
API vetsion: 3.2

# Set a key
$ ./bin/etcdctl put msg "hello"
$ OK
# Get a key
$ ./bin/etcdctl get msg
$ msg
$ hello
# Delete a key
$ ./bin/etcdctl del msg
# 1

4.watch监听

watchetcdctl阻塞,当另一个终端监听的值改变时,watch触发

$ etcdctl watch event1
# PUT
# event1
# hello

5.lease租约

etcd也能为key设置超时时间,但与redis不同,需要先创建lease,然后使用put命令加上参数`–lease=来设置

# 创建lease
$ etcdctl lease grant 1000
$ lease 694d6280d047720f granted with TTL(1000s)

# 设置key value 存活时间
$ etcdctl put name "fang" --lease=694d6280d047720f
$ OK

# 查询lease剩余时间
$ etcdctl lease timetolive 694d6280d047720f
$ lease 694d6275d93d3e0c granted with TTL(100s), remaining(968s)

# 查询lease剩余时间和关联的keys
$ etcdctl lease timetolive  694d6280d047720f --keys
$ lease 694d6280d047720f granted with TTL(1000s), remaining(755s), attached keys([name])

# 刷新lease存活时间
$ etcdctl lease keep-alive 694d6280d047720f
$ lease 694d6280d047720f keepalived with TTL(1000)

# 删除lease,并删除所有关联的key 
$ etcdctl lease revoke 694d6280d047720f
$ lease 694d6280d047720f revoked

参考:etcd:从应用场景到实现原理的全方位解读
Logo

权威|前沿|技术|干货|国内首个API全生命周期开发者社区

更多推荐