etcd介绍经典适用场景安装配置测试

悉达多      2022-02-14     283

关键词:

1.介绍

  很多人第一反应可能是一个键值存储仓库,却没有重视官方定义的后半句,用于配置共享和服务发现。

  实际上,etcd作为一个受到ZooKeeper与doozer启发而催生的项目,除了拥有与之类似的功能外,更专注于以下四点。

  • 简单:基于HTTP+JSON的API让你用curl就可以轻松使用。
  • 安全:可选SSL客户认证机制。
  • 快速:每个实例每秒支持一千次写操作。
  • 可信:使用Raft算法充分实现了分布式。

2.适用场景      

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

   场景一:服务发现(Service Discovery)

    服务发现:在同一个分布式集群中的进程或服务,要如何才能找到对方并建立连接。本质上来说,服务发现就是想要了解集群中是否有进程在监听udp或tcp端口,并且通过名字就可以查找和连接。要解决服务发现的问题,需要有下面三大支柱,缺一不可。

  1. 一个强一致性、高可用的服务存储目录。基于Raft算法的etcd天生就是这样一个强一致性高可用的服务存储目录。
  2. 一种注册服务和监控服务健康状态的机制。用户可以在etcd中注册服务,并且对注册的服务设置key TTL,定时保持服务的心跳以达到监控健康状态的效果。
  3. 一种查找和连接服务的机制。通过在etcd指定的主题下注册的服务也能在对应的主题下查找到。为了确保连接,我们可以在每个服务机器上都部署一个Proxy模式的etcd,这样就可以确保能访问etcd集群的服务都能互相连接。
  • 微服务协同工作架构中,服务动态添加。随着Docker容器的流行,多种微服务共同协作,构成一个相对功能强大的架构的案例越来越多。透明化的动态添加这些服务的需求也日益强烈。通过服务发现机制,在etcd中注册某个服务名字的目录,在该目录下存储可用的服务节点的IP。在使用服务的过程中,只要从服务目录下查找可用的服务节点去使用即可
  • PaaS平台中应用多实例与实例故障重启透明化。PaaS平台中的应用一般都有多个实例,通过域名,不仅可以透明的对这多个实例进行访问,而且还可以做到负载均衡。但是应用的某个实例随时都有可能故障重启,这时就需要动态的配置域名解析(路由)中的信息。通过etcd的服务发现功能就可以轻松解决这个动态配置的问题。

  场景二:消息发布与订阅

    消息发布订阅:在分布式系统中,最适用的一种组件间通信方式就是消息发布与订阅。即构建一个配置共享中心,数据提供者在这个配置中心发布消息,而消息使用者则订阅他们关心的主题,一旦主题有消息发布,就会实时通知订阅者。通过这种方式可以做到分布式系统配置的集中式管理与动态更新。

  • 应用中用到的一些配置信息放到etcd上进行集中管理。这类场景的使用方式通常是这样:应用在启动的时候主动从etcd获取一次配置信息,同时,在etcd节点上注册一个Watcher并等待,以后每次配置有更新的时候,etcd都会实时通知订阅者,以此达到获取最新配置信息的目的。
  • 分布式搜索服务中,索引的元信息和服务器集群机器的节点状态存放在etcd中,供各个客户端订阅使用。使用etcd的key TTL功能可以确保机器状态是实时更新的。
  • 分布式日志收集系统。这个系统的核心工作是收集分布在不同机器的日志。收集器通常是按照应用(或主题)来分配收集任务单元,因此可以在etcd上创建一个以应用(主题)命名的目录P,并将这个应用(主题相关)的所有机器ip,以子目录的形式存储到目录P上,然后设置一个etcd递归的Watcher,递归式的监控应用(主题)目录下所有信息的变动。这样就实现了机器IP(消息)变动的时候,能够实时通知到收集器调整任务分配。
  • 系统中信息需要动态自动获取与人工干预修改信息请求内容的情况。通常是暴露出接口,例如JMX接口,来获取一些运行时的信息。引入etcd之后,就不用自己实现一套方案了,只要将这些信息存放到指定的etcd目录中即可,etcd的这些目录就可以通过HTTP的接口在外部访问。

  场景三:负载均衡

   在场景一中也提到了负载均衡,本文所指的负载均衡均为软负载均衡。分布式系统中,为了保证服务的高可用以及数据的一致性,通常都会把数据和服务部署多份,以此达到对等服务,即使其中的某一个服务失效了,也不影响使用。由此带来的坏处是数据写入性能下降,而好处则是数据访问时的负载均衡。因为每个对等服务节点上都存有完整的数据,所以用户的访问流量就可以分流到不同的机器上。

  • etcd本身分布式架构存储的信息访问支持负载均衡。etcd集群化以后,每个etcd的核心节点都可以处理用户的请求。所以,把数据量小但是访问频繁的消息数据直接存储到etcd中也是个不错的选择,如业务系统中常用的二级代码表(在表中存储代码,在etcd中存储代码所代表的具体含义,业务系统调用查表的过程,就需要查找表中代码的含义)。
  • 利用etcd维护一个负载均衡节点表。etcd可以监控一个集群中多个节点的状态,当有一个请求发过来后,可以轮询式的把请求转发给存活着的多个状态。类似KafkaMQ,通过ZooKeeper来维护生产者和消费者的负载均衡。同样也可以用etcd来做ZooKeeper的工作。

 

etcd概念介绍

etcd内部采用raft协议作为一致性算法,go语言实现。特点:简单:安装配置简单,而且提供了HTTP API进行交互,使用也很简单安全:支持SSL证书验证快速:根据官方提供的benchmark数据,单实例支持每秒2k+读操作可靠:采用raft算... 查看详情

kong网关怎么获取etcd端口

...kong数据库,请问我该怎么做呢?参考技术Aetcd简介与应用场景etcd是一个分布式一致性k-v存储系统,可用于服务注册发现与...2.单机模式运行默认在centos7的yum源里已集成了etcd包,可以通过yum进行安装...3.集群模式说明这里的集群模式... 查看详情

kubernetes学习一:kubernetes集群搭建之etcd安装部署(代码片段)

目录1、软件版本和环境介绍2、服务器信息介绍(以下称主机名)3、etcd安装部署3.1、cfssl安装3.2、创建etcd证书3.3、etcdca配置3.4、etcdca证书3.5、etcdserver证书3.6、生成etcdca证书和私钥初始化ca3.7、生成server证书3.8、下发证书... 查看详情

使用docker运行etcd单实例/集群(代码片段)

目录一.介绍二.etcd单实例1.准备a.创建本机数据存储目录b.关闭本机etcd服务c.编写etcdconfig2.下载etcdimage3.使用docker-compose启动etcda.编写docker-composeb.参数介绍c.运行容器d.管理容器e.如何使用我们刚启动的etcd4.使用dockerrun启动etcda.运行... 查看详情

kubernetes之核心组件etcd介绍

目录Kubernetes之核心组件ETCD介绍ETCD的主要功能ETCD实用注意事项1、ETCDcluster初始化的问题2、ETCD读请求的机制3、ETCD的compact机制ETCD的问题Kubernetes之核心组件ETCD介绍Etcd是CoreOS基于Raft开发的分布式key-value存储,可用于服务发现、共... 查看详情

kubernetes集群之二进制安装部署(单master节点)(代码片段)

...照部署方式二、安装部署分析三、首先部署ETCD集群3.1ETCD介绍3.2准备CFSSL证书签发环境3.3环境部署3.3.1搭建ETCD步骤3.3.2下载准备CFSSL证书制作工具3.3.3上传etcd-cert.sh和etcd.sh到/opt/k8s/目录中3.3.4安装ETCD服务3.3.5配置ETCD集群3.3.6在Master01... 查看详情

etcd-cpp-apiv3使用示例介绍(代码片段)

...下简单记录。本系列总共3篇:《搭建etcd集群》:介绍搭建etcd集群方式、遇到的问题及处理方式;《编译安装etcd-cpp-apiv3》:介绍etcd-cpp-apiv3编译安装方式、常见问题及处理方式;《etcd-cpp-apiv3使用实例介绍》&#... 查看详情

技术分享|etcd如何实现分布式负载均衡及分布式通知与协调

消息发布与订阅在分布式系统中,最适用的一种组件间通信方式就是消息发布与订阅。即构建一个配置共享中心,数据提供者在这个配置中心发布消息,而消息使用者则订阅他们关心的主题,一旦主题有消息发布,就会实时通知... 查看详情

使用etcd提升系统健壮性(代码片段)

介绍采用微服务架构的系统里包含许多服务,这些服务之间会互相调用。每个服务一般都有多个节点来提供服务,这些节点是动态变化的。当有节点新增或失效时,需要及时通知到服务调用方,否则调用方可能访... 查看详情

kubernetes集群之二进制安装部署(单master节点)(代码片段)

...照部署方式二、安装部署分析三、首先部署ETCD集群3.1ETCD介绍3.2准备CFSSL证书签发环境3.3环境部署3.3.1搭建ETCD步骤3.3.2下载准备CFSSL证书制作工具3.3.3上传etcd-cert.sh和etcd.sh到/opt/k8s/目录中3.3.4安装ETCD服务3.3.5配置ETCD集群3.3.6在Master01... 查看详情

jmeter安装与介绍

什么是JmeterApacheJMeter是Apache组织开发的基于Java的压力测试工具。适用的测试领域●用于对软件做压力测试,它最初被设计用于Web应用测试,但后来扩展到其他测试领域。它可以用于测试静态和动态资源,例如静态文件、Java小服... 查看详情

loadrunner中有基于目标和手动两种场景设计方式,它们分别适用于啥情况?

参考技术A如果测试计划是要达到某个性能指标,比如:每秒多少点击,每秒多少transactions,能到达多少Vuser,某个Transaction在某个范围Vuser(500-1000)内的反应时间等等,那么就可以使用面向目标的场景。在这种运行场景中,用... 查看详情

云原生k8s精选的分布式可靠的键值存储etcd原理和实践(代码片段)

...和日志复制的原理,最后完整部署单示例和多实例集群和介绍一些常见命令。@目录概述定义应用场景特性为何使用etcd术语架构原理读操作写操作日志复制部署单示例快速部署多实例集群部署静态etcd动态发现常见命令概述定义etc... 查看详情

etcd的简单使用

 etcd的简单使用ETCD安装配置安装去https://github.com/coreos/etcd/releases/下载想要的版本解压etcd包解压后进入目录,增加x权限chmod+xetcdchmod+xetcdctl 并将etcd和etcdctl复制到/bin配置启动简单启动./bin/etcd这样就可以启动使用集群配置... 查看详情

etcd-cpp-apiv3使用示例介绍(代码片段)

...下简单记录。本系列总共3篇:《搭建etcd集群》:介绍搭建etcd集群方式、遇到的问题及处理方式;《编译安装etcd-cpp-apiv3》:介绍etcd-cpp-api 查看详情

promethus概览(代码片段)

这里写自定义目录标题一、概述1介绍2特征3什么是指标4组件二、架构适用场景不适用的场景三部署1下载1.1二进制方式[点击官方下载链接](https://prometheus.io/download/)1.2docker容器方式2启动参数3配置文件3.1示例配置文件3.2配置文件详... 查看详情

promethus概览(代码片段)

这里写自定义目录标题一、概述1介绍2特征3什么是指标4组件二、架构适用场景不适用的场景三部署1下载1.1二进制方式[点击官方下载链接](https://prometheus.io/download/)1.2docker容器方式2启动参数3配置文件3.1示例配置文件3.2配置文件详... 查看详情

mockito各场景使用介绍

...1-使用ReflectionTestUtils解决依赖注入Mock对象实现方式2-官方介绍的@mo 查看详情