概述etcd是CoreOS基于Raft开发的分布式key-value存储,可用于服务发现、共享配置、一致性保证(如数据库master选择、分布式锁等)。在分布式系统中,如何管理节点之间的状态一直是一个难题。etcd似乎是专门为集群环境下的服务发现和注册而设计的。提供数据TTL失效、数据变化监控、多值、目录监控、分布类型锁原子操作等功能,可以方便地跟踪和管理集群节点的状态。键值存储:将数据存储在分层组织的目录中,就像在标准文件系统中一样监视更改:监视特定键或目录的更改,并对值的更改做出反应简单:可通过curl访问的用户API(HTTP+JSON)安全性:可选SSL客户端证书认证Fast:单实例每秒1000次写操作,2000+次读操作Reliable:使用Raft算法保证一致性主要功能Basickey-valuestoragemonitoringMechanismKeyexpirationandrenewalmechanismformonitoringandservicediscoveryAtomicCompareAndSwap和CompareAndDelete用于分布式锁和leader选举使用场景键值对存储etcd是key-value存储的一个组件,其他应用都是基于它的key-value存储的功能。使用kv类型的数据存储一般比关系型数据库更快。支持动态存储(内存)和静态存储(磁盘)。分布式存储可以集成到多节点集群中。存储方式采用类似的目录结构。(B+tree)?只有叶子节点才能真正存储数据,相当于文件。?叶子节点的父节点必须是目录,目录不能存储数据。服务注册与发现强一致、高可用的服务存储目录etcd基于Raft算法诞生就是为了这样一个强一致、高可用的服务存储目录。注册服务和服务健康状态的机制。用户可以在etcd中注册服务,并为注册的服务配置keyTTL,定时保持服务的心跳,达到监控健康状态的效果。消息发布和订阅在分布式系统中,最适合组件间通信的一种形式是消息发布和订阅。即搭建一个配置共享中心,数据提供者发布消息,消息消费者订阅自己关心的话题。一旦主题有消息要发布,订阅者将得到实时通知。这样就可以实现分布式系统配置的集中管理和动态更新。应用中用到的一些配置信息放在etcd上进行集中管理。应用启动时,会主动从etcd获取配置信息。同时在etcd节点上注册一个Watcher并等待。之后每次更新配置时,etcd都会实时通知订阅者,以达到获取最新配置信息的目的。.ETCD部署#下载ETCD的二进制包,官方Github地址:https://github.com/etcd-io/etcd/releases,下载如下文件:wgethttps://github.com/etcd-io/etcd/releases/download/v3.4.13/etcd-v3.4.13-linux-amd64.tar.gz$tarxfetcd-v3.4.13-linux-amd64.tar.gz$lsetcd-v3.4.13-linux-amd64/documentationetcdetcdctlREADME-etcdctl.mdREADME.mdREADMEv2-etcdctl.md#将二进制包移动到bin目录:$mkdir-p/opt/etcd/bin/$mvetcd-v3.4.13-linux-amd64/{etcd,etcdctl}/opt/etcd/bin/#SystemdManagement#创建ETCD的Systemd服务文件:$cat/usr/lib/systemd/system/etcd.service[Unit]Description=EtcdServerAfter=network.targetAfter=network-online.targetWants=network-online.target[Service]Type=notifyExecStart=/opt/etcd/bin/etcdRestart=on-failureLimitNOFILE=65535[Install]WantedBy=multi-user.target#启动Etcd$systemctldaemon-reload$systemctlstartetcd$systemctlenableetcdEtcddailycommand#查看集群成员状态$etcdctlmemberlist--write-out=table+----------------+--------+--------+------------------------+----------------------+------------+|编号|状态|姓名|同行地址|客户地址|----+------------+--------+--------------------+-----------------------+------------+|8e9e05c52164694d|开始|默认|http://localhost:2380|http://localhost:2379|假|+----------------+--------+--------+----------------------+------------------------+------------+#写数据$etcdctl--endpoints=localhost:2379put/kubesre123OK#读数据$etcdctl--endpoints=localhost:2379get/kubesre/kubesre123#按键前缀查询数据$etcdctl--endpoints=localhost:2379get--prefix//kubesre123#只显示键值etcdctl--endpoints=localhost:2379get--prefix/--keys-only--debugETCDCTL_CACERT=ETCDCTL_CERT=ETCDCTL_COMMAND_TIMEOUT=5sETCDCTL_DEBUG=trueETCDCTL_DIAL_TIMEOUT=2sETCDCTL_DISCOVERY_SRVSCOVERNAME=2sETCDCTL_DISCOVERY_SRVSCOVERNAME=ETCDCTL_ENDPOINTS=[localhost:2379]ETCDCTL_HEX=falseETCDCTL_INSECURE_DISCOVERY=trueETCDRECTLRIFY=falseETCDCTL_INSECURE_TRANSPORT=trueETCDCTL_KEEPALIVE_TIME=2sETCDCTL_KEEPALIVE_TIMEOUT=6sETCDCTL_KEY=ETCDCTL_PASSWORD=ETCDCTL_USER=ETCDCTL_WRITE_OUT=simpleWARNING:2021/12/2220:32:52Adjustingkeepalivepingintervaltominimumperiodof10sWARNING:2021/12/2220:32:52Adjustingkeepaliveping间隔到最小周期10sINFO:2021/12/2220:32:52解析方案:“endpoint”INFO:2021/12/2220:32:52ccResolverWrapper:向cc发送新地址:[{localhost:2379
