Happy Coding
etcd 小结

简介

取名有意思。Linux下的/etc目录放的是配置文件。etcd,etc代表配置,d代表distributed,代表分布式配置。

特点:

  1. designed to reliably store infrequently updated data and provide reliable watch queries https://etcd.io/docs/v3.4.0/learning/data_model/
  2. KV 核心用户接口
  3. MVCC Multi-version Concurrency Control 也确实能读历史版本
  4. Raft consensus algorithms 共识算法
  5. Watch 配置更新能及时"通知"应用
  6. RBAC 用户、角色、权限

基于 etcd 可以做哪些事情:

  1. 配置中心。元数据存储。应用的配置集中存储在配置中心。
  2. 服务发现。配置中心的一个特例。相比起来,consul的服务发现是开箱即用的。
  3. 分布式锁。分布式系统协调。选主。像是Hadoop使用Zookeeper做Namenode的选主。

vs. Consul。Consul 官方(https://www.consul.io/)定义的usecase是 service discovery和 service mesh。

etcd and Consul solve different problems. If looking for a distributed consistent key value store, etcd is a better choice over Consul. If looking for end-to-end cluster service discovery, etcd will not have enough features; choose Kubernetes, Consul, or SmartStack. https://github.com/etcd-io/etcd/blob/master/Documentation/learning/why.md#consul

如果是分布式配置中心,etcd是更好的选择。

参考

  1. etcd versus other key-value stores https://github.com/etcd-io/etcd/blob/master/Documentation/learning/why.md

etcd集群安装

https://github.com/XUJiahua/linux_scripts/tree/master/etcd

常用操作

etcdctl的命令主要是kv操作,以及集群管理,和RBAC用户权限管理。

参考 https://etcd.io/docs/v3.4.0/demo/

KV相关

  1. put foo "Hello World" KV写
  2. get foo KV读,还可以读历史版本的值
  3. get web --prefix KV前缀读,适用于服务发现
  4. del key KV删除
  5. del k --prefix KV前缀删除
  6. txn --interactive KV事务
  7. watch stock1 KV关注value变化,适用于服务发现,服务发生变动
  8. watch stock --prefix watch也支持前缀匹配

Lease

  1. lease grant 300 创建300s的lease
  2. put sample value --lease=2be7547fbc6a5afa 有效期300s的key。不设置 lease的put操作,值是永久存储的。
  3. keep-alive 刷新TTL, list, revoke。

分布式锁

  1. lock mutex1 获取锁后,其他请求被block

集群管理

  1. member list list etcd member,member命令还可以增加新node,node也包含不投票的。
  2. endpoint status 集群状态,能看到leader server
  3. endpoint health 健康检查
  4. snapshot save my.db 数据快照存储到本地

用户权限(role based access control)

  1. role add root 创建role
  2. role grant-permission root readwrite foo role上赋予权限,这里赋予foo的读写权限
  3. user add root 创建用户,并指定密码
  4. user grant-role root root 赋予用户role
  5. auth enable 开启认证,disable 即关闭auth。
  6. --user=root:root put foo bar 操作时指定用户密码

Last modified on 2020-04-20