精华内容
下载资源
问答
  • ETCD

    2020-12-25 21:56:52
    1.什么是etcd etcd 是一个分布式键值对存储,设计用来可靠而快速的保存关键数据并提供访问。通过分布式锁,leader 选举和写屏障(write barriers)来实现可靠的分布式协作。etcd集群是为高可用,持久性数据存储和...

     

    1.什么是etcd

    etcd is a distributed reliable key-value store for the most critical data of a distributed 
    system, with a focus on
    being:
    Simple: well-defined, user-facing API (gRPC)
    Secure: automatic TLS with optional client cert authentication
    Fast: benchmarked 10,000 writes/sec
    Reliable: properly distributed using Raft
    etcd is written in Go and uses the Raft consensus algorithm to manage a highly-available replicated log.
    etcd is used in production by many companies, and the development team stands behind it in critical
    deployment scenarios, where etcd is frequently teamed with applications such
    as Kubernetes, locksmith, vulcand, Doorman, and many others. Reliability is further ensured by rigorous testing.
    See etcdctl for a simple command line client.
    
    
    etcd 是一个分布式键值对存储,设计用来可靠而快速的保存关键数据并提供访问,通过分布式锁,
    leader选举和写屏障(write barriers)来实现可靠的分布式协作.etcd集群是为高可用,持久性数据存储
    和检索而准备.
    
    "etcd"这个名字源于两个想法,即unix中的"/etc" 文件夹和分布式系统"d"istibuted.
    etc --存储文件配置存储
    d   --distribute
    etcd--存储大规模分布式系统的配置信息
    
    
    
    etcd以一致和容错的方式存储元数据,分布式系统使用etcd作为一致性键值存储,用于配置管理,服务
    发现和协调分布式工作.使用etcd的通用分布式模式包括领导选举,分布式锁和监控机器活动.
    
    

    2.使用案例


    2.1 CoreOS 的容器

    Linux: 在Container Linux上运行的应用程序获得自动的不宕机 Linux 内核更新。 容器 Linux 使用
    locksmith来协调更新。locksmith 在 etcd 上实现分布式信号量,确保在任何给定时间只有集群的一个子
    集重新启动。

    2.2 Kubernetes

    将配置数据存储到etcd中,用于服务发现和集群管理; etcd 的一致性对于正确安排和运行服务至关重要。
    Kubernetes API 服务器将群集状态持久化在 etcd 中。它使用etcd的 watch API监视集群,并发布关键
    的配置更改

    3.优点

    etcd作为一个受到ZooKeeper与doozer启发而催生的项目,除了拥有与之类似的功能外,更专注于以下四点
    1.简单:基于HTTP+JSON的API让你用curl就可以轻松使用;
    2.安全:可选SSL客户认证机制;
    3.快速:每个实例每秒支持一千次写操作;
    4.可信:使用Raft算法充分实现了分布式.

    4.应用场景

    场景一:服务发现(Service Discovery)
    场景二:消息发布与订阅
    场景三:负载均衡
    场景四:分布式通知与协调
    场景五:分布式锁、分布式队列
    场景六:集群监控与Leader竞选

    5.相关概念

    Raft:etcd所采用的保证分布式系统强一致性的算法。
    Node:一个Raft状态机实例。
    Member: 一个etcd实例。它管理着一个Node,并且可以为客户端请求提供服务。
    Cluster:由多个Member构成可以协同工作的etcd集群。
    Peer:对同一个etcd集群中另外一个Member的称呼。
    Client: 向etcd集群发送HTTP请求的客户端。
    WAL:预写式日志,etcd用于持久化存储的日志格式。
    snapshot:etcd防止WAL文件过多而设置的快照,存储etcd数据状态。
    Proxy:etcd的一种模式,为etcd集群提供反向代理服务。
    Leader:Raft算法中通过竞选而产生的处理所有数据提交的节点。
    Follower:竞选失败的节点作为Raft中的从属节点,为算法提供强一致性保证。
    Candidate:当Follower超过一定时间接收不到Leader的心跳时转变为Candidate开始竞选。
    Term:某个节点成为Leader到下一次竞选时间,称为一个Term。
    Index:数据项编号。Raft中通过Term和Index来定位数据

    6.ETCD部署

    ETCD集群部署手册

    展开全文
  • etcd

    2020-12-19 11:53:16
    etcd简介 etcd是使用Go语言开发的一个开源的、高可用的分布式key-value存储系统,可以用于配置共享和服务的注册和发现。 类似项目有zookeeper和consul。 etcd具有以下特点: 完全复制:集群中的每个节点都可以使用...

    etcd简介

    etcd是使用Go语言开发的一个开源的、高可用的分布式key-value存储系统,可以用于配置共享和服务的注册和发现。

    类似项目有zookeeper和consul。

    etcd具有以下特点:

    • 完全复制:集群中的每个节点都可以使用完整的存档
    • 高可用性:Etcd可用于避免硬件的单点故障或网络问题
    • 一致性:每次读取都会返回跨多主机的最新写入
    • 简单:包括一个定义良好、面向用户的API(gRPC)
    • 安全:实现了带有可选的客户端证书身份验证的自动化TLS
    • 快速:每秒10000次写入的基准速度
    • 可靠:使用Raft算法实现了强一致、高可用的服务存储目录

    etcd应用场景

    1. 服务发现

    服务发现要解决的也是分布式系统中最常见的问题之一,即在同一个分布式集群中的进程或服务,要如何才能找到对方并建立连接。本质上来说,服务发现就是想要了解集群中是否有进程在监听 udp 或 tcp 端口,并且通过名字就可以查找和连接。

    在这里插入图片描述

    1. 配置中心

    将一些配置信息放到 etcd 上进行集中管理。

    这类场景的使用方式通常是这样:应用在启动的时候主动从 etcd 获取一次配置信息,同时,在 etcd 节点上注册一个 Watcher 并等待,以后每次配置有更新的时候,etcd 都会实时通知订阅者,以此达到获取最新配置信息的目的。

    1. 分布式锁

    因为 etcd 使用 Raft 算法保持了数据的强一致性,某次操作存储到集群中的值必然是全局一致的,所以很容易实现分布式锁。锁服务有两种使用方式,一是保持独占,二是控制时序。

    • 保持独占即所有获取锁的用户最终只有一个可以得到。etcd 为此提供了一套实现分布式锁原子操作 CAS(CompareAndSwap)的 API。通过设置prevExist值,可以保证在多个节点同时去创建某个目录时,只有一个成功。而创建成功的用户就可以认为是获得了锁。

    • 控制时序,即所有想要获得锁的用户都会被安排执行,但是获得锁的顺序也是全局唯一的,同时决定了执行顺序。etcd 为此也提供了一套 API(自动创建有序键),对一个目录建值时指定为POST动作,这样 etcd 会自动在目录下生成一个当前最大的值为键,存储这个新的值(客户端编号)。同时还可以使用 API 按顺序列出所有当前目录下的键值。此时这些键的值就是客户端的时序,而这些键中存储的值可以是代表客户端的编号。

    在这里插入图片描述

    etcd的特点

    • 简单。使用 Go 语言编写部署简单;支持HTTP/JSON API,使用简单;使用 Raft 算法保证强一致性让用户易于理解。
    • etcd 默认数据一更新就进行持久化。
    • etcd 支持 SSL 客户端安全认证。
    • 最后,etcd 作为一个年轻的项目,正在高速迭代和开发中,这既是一个优点,也是一个缺点。优点是它的未来具有无限的可能性,缺点是无法得到大项目长时间使用的检验。然而,目前 CoreOS、Kubernetes和CloudFoundry等知名项目均在生产环境中使用了etcd。

    在这里插入图片描述

    • HTTP Server: 用于处理用户发送的API请求以及其它etcd节点的同步与心跳信息请求。
    • Store:这个模块顾名思义,就像一个商店把etcd已经准备好的各项底层支持加工起来,为用户提供五花八门的API支持,处理用户的各项请求。用于处理etcd支持的各类功能的事务,包括数据索引、节点状态变更、监控与反馈、事件处理与执行等,是etcd对用户提供的大多数API功能的具体实现。
    • Raft: raft 状态机,raft强一致性算法的具体实现,是etcd的核心。
    • WAL:Write Ahead Log(预写式日志),是etcd的数据存储方式。除了在内存中存有所有数据的状态以及节点的索引以外,etcd就通过WAL进行持久化存储。WAL中,所有的数据提交前都会事先记录日志。Entry表示存储的具体日志内容。

    etcd集群

    etcd 作为一个高可用键值存储系统,天生就是为集群化而设计的。由于 Raft 算法在做决策时需要多数节点的投票,所以 etcd 一般部署集群推荐奇数个节点,推荐的数量为 3、5 或者 7 个节点构成一个集群。

    安装etcd

    github安装 https://github.com/etcd-io/etcd/releases

    国内安装 https://www.newbe.pro/Mirrors/Mirrors-Etcd/

    在这里插入图片描述
    其中etcd.exe是服务端,etcdctl.exe是客户端

    (1)查看版本号
    在这里插入图片描述

    (2)设置版本set ETCDCTL_API=3

    (3)启动etcd服务端

    在这里插入图片描述

    (4)通过put和get设置值和取值

    在这里插入图片描述

    Go语言操作etcd

    使用官方的etcd/clientv3包来连接etcd并进行相关操作。

    安装

    go get go.etcd.io/etcd/clientv3

    问题:go sdk版本在go1.13和go1.14版本使用go mod管理依赖包中有etcd时会出现异常,无法正常拉取etcd包

    go.etcd.io/etcd/clientv3 tested by
            go.etcd.io/etcd/clientv3.test imports
            github.com/coreos/etcd/auth imports
            github.com/coreos/etcd/mvcc/backend imports
            github.com/coreos/bbolt: github.com/coreos/bbolt@v1.3.5: parsing go.mod:
            module declares its path as: go.etcd.io/bbolt
                    but was required as: github.com/coreos/bbolt
    

    引起以上的原因主要是etcd中使用的bbolt和grpc版本冲突引起

    解决方法

    删除原来已生成得go.mod和go.sum

    go mod init
    go mod edit -replace github.com/coreos/bbolt@v1.3.4=go.etcd.io/bbolt@v1.3.4
    go mod edit -replace google.golang.org/grpc@v1.29.1=google.golang.org/grpc@v1.26.0 
    go mod tidy
    

    在这里插入图片描述

    put和get操作
    package main
    
    import (
    	"context"
    	"fmt"
    	"go.etcd.io/etcd/clientv3"
    	"time"
    )
    
    func main() {
    	cli, err := clientv3.New(clientv3.Config{
    		Endpoints:   []string{"127.0.0.1:2379"},   // Endpoints是一个节点
    		DialTimeout: 5 * time.Second,  // 超时时间
    	})
    	if err != nil {
    		fmt.Printf("connect to etcd failed, err:%v\n", err)
    		return
    	}
    	fmt.Println("connect to etcd success")
    	defer cli.Close()
    	// put
    	ctx, cancel := context.WithTimeout(context.Background(), time.Second)
    	_, err = cli.Put(ctx, "name", "crown")
    	cancel()
    	if err != nil {
    		fmt.Printf("put to etcd failed, err:%v\n", err)
    		return
    	}
    	// get
    	ctx, cancel = context.WithTimeout(context.Background(), time.Second)
    	resp, err := cli.Get(ctx, "name")
    	cancel()
    	if err != nil {
    		fmt.Printf("get from etcd failed, err:%v\n", err)
    		return
    	}
    	for _, ev := range resp.Kvs {
    		fmt.Printf("%s:%s\n", ev.Key, ev.Value)
    	}
    }
    
    watch操作
    package main
    
    import (
    	"context"
    	"fmt"
    	"time"
    
    	"go.etcd.io/etcd/clientv3"
    )
    
    func main() {
    	cli, err := clientv3.New(clientv3.Config{
    		Endpoints:   []string{"127.0.0.1:2379"},
    		DialTimeout: 5 * time.Second,
    	})
    	if err != nil {
    		fmt.Printf("connect to etcd failed, err:%v\n", err)
    		return
    	}
    	fmt.Println("connect to etcd success")
    	defer cli.Close()
    	// 监测key的变化(新增、修改、删除),返回值是一个只读通道
    	rch := cli.Watch(context.Background(), "name") // type WatchChan <-chan WatchResponse
    	for wresp := range rch {
    		for _, ev := range wresp.Events {
    			fmt.Printf("Type: %s Key:%s Value:%s\n", ev.Type, ev.Kv.Key, ev.Kv.Value)
    		}
    	}
    }
    
    展开全文
  • Etcd

    2018-10-08 18:18:00
    默认使用2379端口为客户端提供通讯,并使用端口2380来进行服务器间通讯。 ...用户可以在etcd中注册服务,并且对注册的服务设置key TTL,定时保持服务的心跳以达到监控健康...为了让 etcdctl 使用 v3 API 来和etcd通...

     

     

     

    默认使用2379端口为客户端提供通讯,并使用端口2380来进行服务器间通讯。

    服务发现:一种注册服务和监控服务健康状态的机制。用户可以在etcd中注册服务,并且对注册的服务设置key TTL,定时保持服务的心跳以达到监控健康状态的效果

    默认,为了向后兼容 etcdctl 使用 v2 API 来和 etcd 服务器通讯。为了让 etcdctl 使用 v3 API 来和etcd通讯,API 版本必须通过环境变量 ETCDCTL_API 设置为版本3。
    export ETCDCTL_API=3

    目前,etcd 保证支持不超过 1MB 数据的 RPC 请求。将来,大小限制可能会松动或可配

     

    ===============参考资料:http://www.sel.zju.edu.cn/?p=523  etcd:从应用场景到实现原理的全方位解读

    2.3 etcd概念词汇表

    • Raft:etcd所采用的保证分布式系统强一致性的算法。
    • Node:一个Raft状态机实例。
    • Member: 一个etcd实例。它管理着一个Node,并且可以为客户端请求提供服务。
    • Cluster:由多个Member构成可以协同工作的etcd集群。
    • Peer:对同一个etcd集群中另外一个Member的称呼。
    • Client: 向etcd集群发送HTTP请求的客户端。
    • WAL:预写式日志,etcd用于持久化存储的日志格式。
    • snapshot:etcd防止WAL文件过多而设置的快照,存储etcd数据状态。
    • Proxy:etcd的一种模式,为etcd集群提供反向代理服务。
    • Leader:Raft算法中通过竞选而产生的处理所有数据提交的节点。
    • Follower:竞选失败的节点作为Raft中的从属节点,为算法提供强一致性保证。
    • Candidate:当Follower超过一定时间接收不到Leader的心跳时转变为Candidate开始Leader竞选。
    • Term:某个节点成为Leader到下一次竞选开始的时间周期,称为一个Term。
    • Index:数据项编号。Raft中通过Term和Index来定位数据。

    etcd一般部署集群推荐奇数个节点,推荐的数量为3、5或者7个节点构成一个集群

    initial-advertise-peer-urls参数表示节点监听其他节点同步信号的地址

    如果你所在的网络环境配置了多个etcd集群,为了避免意外发生,最好使用-initial-cluster-token参数为每个集群单独配置一个token认证。这样就可以确保每个集群和集群的成员都拥有独特的ID。

    etcd有三种集群化启动的配置方案,分别为静态配置启动、etcd自身服务发现、通过DNS进行服务发现

     etcd 的demo

    https://coreos.com/etcd/docs/latest/demo.html

    ================

    etcd常用操作:https://www.cnblogs.com/guxiaobei/p/8003792.html

    =====================================参考资料 http://www.dockerinfo.net/etcd%E9%A1%B9%E7%9B%AE%E4%BB%8B%E7%BB%8D

     

     

     

    转载于:https://www.cnblogs.com/testzcy/p/9756038.html

    展开全文
  • etcdetcd容器-源码

    2021-02-11 10:16:40
    注意:对于etcd 3.4.2及更低版本,您需要在运行时将ETCD_VERSION设置为空字符串(或取消设置),否则etcd将在启动时退出: : 如何使用 该容器符合官方映像规范,并运行etcd作为其默认入口点。 对于多成员etcd集群...
  • etcd访问器 etcd访问器。
  • perl-net-etcd:Net :: Etcd etcd v3 gRPC网关Perl客户端
  • <div><p>/etcd/etcd-live*: deprecate etcd2 and etcd Ref: https://github.com/coreos/bugs/issues/1877</p><p>该提问来源于开源项目:coreos/docs</p></div>
  • etcd运算符 项目状态:已归档 该项目不再被积极开发或维护。 该项目存在此处供历史参考。 如果您对项目的未来以及接管工作感兴趣,请联系 。 总览 etcd操作员管理部署到etcd集群,并自动执行与操作etcd集群相关的...
  • etcd基础理论

    2019-10-19 08:48:33
    etcd

    etcd

     

     

     

    展开全文
  • etcd Note: The master branch may be in an unstable or even broken state during development. Please use releases instead of the master branch in order to get stable binaries. etcd is a ...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 20,922
精华内容 8,368
关键字:

etcd