Skip to main content

etcd的介绍与常用命令

etcd介绍

etcd官网:https://etcd.io
etcd是一个分布式键值存储系统,常用做在分布式系统中存储关键数据,它是由coreos团队开发并开源的分布式键值存储系统,具备以下特点:

  • 简单:基于http+json的API可以轻松使用
  • 安全:支持SSL证书验证
  • 快速:每个实例每秒支持一千次写操作
  • 可靠:使用Raft协议保证分布式系统数据的可靠性和一致性

etcd常用使用场景:

  • 配置管理
  • 服务发现
  • 分布式锁
  • 消息订阅发不
  • 分布式队列

etcd常用命令

查看集群成员

ETCDCTL_API=3 etcdctl  --write-out=table \
--endpoints=172.16.41.17:2379 \
--cacert=/etc/kubernetes/ssl/ca.pem \
--cert=/etc/kubernetes/ssl/etcd.pem \
--key=/etc/kubernetes/ssl/etcd-key.pem member list

查看集群成员健康状态

ETCDCTL_API=3 export NODE_IPS="172.16.41.17 172.16.41.18 172.16.41.19"	#指定etcd节点地址
for ip in ${NODE_IPS};do etcdctl --write-out=table \
--endpoints=https://${ip}:2379 \
--cacert=/etc/kubernetes/ssl/ca.pem \
--cert=/etc/kubernetes/ssl/etcd.pem \
--key=/etc/kubernetes/ssl/etcd-key.pem endpoint health ;done

查看集群成员详细状态

ETCDCTL_API=3 export NODE_IPS="172.16.41.17 172.16.41.18 172.16.41.19"
for ip in ${NODE_IPS};do etcdctl --write-out=table \
--endpoints=https://${ip}:2379 \
--cacert=/etc/kubernetes/ssl/ca.pem \
--cert=/etc/kubernetes/ssl/etcd.pem \
--key=/etc/kubernetes/ssl/etcd-key.pem endpoint status ;done

碎片整理

ETCDCTL_API=3 export NODE_IPS="172.16.41.17 172.16.41.18 172.16.41.19"
for ip in ${NODE_IPS};do etcdctl --write-out=table \
--endpoints=https://${ip}:2379 \
--cacert=/etc/kubernetes/ssl/ca.pem \
--cert=/etc/kubernetes/ssl/etcd.pem \
--key=/etc/kubernetes/ssl/etcd-key.pem defrag ;done

查看集群所有的key

ETCDCTL_API=3 etcdctl get / --keys-only --prefix

获取key对应的值

ETCDCTL_API=3 etcdctl get /registry/pods/default/sleep-6c94bff6c-sftq

插入数据

#插入一条数据,key是/node,value是172.16.41.20
ETCDCTL_API=3 etcdctl put /node 172.16.41.20

删除数据

#删除key为/node的数据
ETCDCTL_API=3 etcdctl delete /node

watch数据
etcd的数据watch机制基于不断监视数据,数据发生变化时就主动通知客户端,Etcd V3的watch机制支持watch某个固定的key,也支持watch一个范围

#watch /node这个key,即使key不存在也可以watch,后期再创建
ETCDCTL_API=3 etcdctl watch /node

备份数据

#备份etcd的数据到snapshot.db这个文件
ETCDCTL_API=3 etcdctl snapshot save snapshot.db

恢复数据

#恢复备份数据到当前目录下的etcd-data目录,目录下不能有内容
etcdctl snapshot restore --data-dir=./etcd-data snapshot.db