我的编程空间,编程开发者的网络收藏夹
学习永远不晚

Etcd集群是什么意思

短信预约 -IT技能 免费直播动态提醒
省份

北京

  • 北京
  • 上海
  • 天津
  • 重庆
  • 河北
  • 山东
  • 辽宁
  • 黑龙江
  • 吉林
  • 甘肃
  • 青海
  • 河南
  • 江苏
  • 湖北
  • 湖南
  • 江西
  • 浙江
  • 广东
  • 云南
  • 福建
  • 海南
  • 山西
  • 四川
  • 陕西
  • 贵州
  • 安徽
  • 广西
  • 内蒙
  • 西藏
  • 新疆
  • 宁夏
  • 兵团
手机号立即预约

请填写图片验证码后获取短信验证码

看不清楚,换张图片

免费获取短信验证码

Etcd集群是什么意思

这篇文章主要介绍了Etcd集群是什么意思,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。

Etcd简介

Etcd是一个开源的、高度一致的分布式key-value存储系统。由Go语言实现,具有很好的跨平台性。主要用于配置共享和服务发现。通过raft算法维护集群中各个节点的通信和数据一致性,节点之间是对等的关系,即使leader节点故障,会很快选举出新的leader,保证系统的正常运行。目前已广泛应用在kubernetes、ROOK、CoreDNS、M3、openstack等领域。

Etcd集群是什么意思
特性:
  1. 接口操作简单,提供了http+json和grpc接口。
  2. 可选的ssl客户端认证,支持https访问。
  3. 每个实例支持1000的QPS,适用于存储数据量小但更新和访问频繁的数据。
  4. 数据按照文件系统的方式,分层存储,数据持久化。
  5. 监视特定的键或目录的变化,并对值的更改做出响应,适用于消息的发布和订阅。

Etcd架构及工作原理

架构


Etcd的架构如下图所示,主要分为四部分。HTTP server、Store、Raft和WAL。

Etcd集群是什么意思
  • HTTP server:为用户提供的Api请求。
  • Store:用于处理 etcd 支持的各类功能的事务,包括数据索引、节点状态变更、监控与反馈、事件处理与执行等等。
  • Raft:利用raft算法,保证节点之间数据的强一致性。
  • WAL:数据存储方式。通过 WAL 进行数据持久化存储。Snapshot 存储数据的状态快照;Entry 表示存储的具体日志内容。

工作原理


Etcd集群是什么意思

ETCD集群是一个分布式系统,每个ETCD节点都维护了一个状态机,并且存储了完整的数据,任意时刻至多存在一个有效的主节点。主节点处理所有来自客户端的读写操作。其中状态机的状态转换规则如下:

Etcd集群是什么意思

ETCD中每个节点的状态集合为(Follower、Candidate、Leader),集群初始化时候,每个节点都是Follower角色,当Follower在一定时间内没有收到来自主节点的心跳,会将自己角色改变为Candidate,并发起一次选主投票;当收到包括自己在内超过半数节点赞成后,选举成功;当收到票数不足半数选举失败,或者选举超时。若本轮未选出主节点,将进行下一轮选举。当某个Candidate节点成为Leader后,Leader节点会通过心跳与其他节点同步数据,同时参与竞选的Candidate节点进入Follower角色。

Etcd集群搭建及基本应用

部署环境


三台系统为centos7的虚机,IP地址如下:
10.143.74.108
10.202.252.147
10.202.254.213
下来以10.143.74.108为例,介绍安装与配置步骤。

一键安装etcd


创建安装脚本build.sh。

ETCD_VER=v3.4.7# choose either URLGOOGLE_URL=https://storage.googleapis.com/etcdGITHUB_URL=https://github.com/etcd-io/etcd/releases/downloadDOWNLOAD_URL=${GITHUB_URL}rm -f /tmp/etcd-${ETCD_VER}-linux-amd64.tar.gzrm -rf /tmp/etcd-download-test && mkdir -p /tmp/etcd-download-testcurl -L ${DOWNLOAD_URL}/${ETCD_VER}/etcd-${ETCD_VER}-linux-amd64.tar.gz -o /tmp/etcd-${ETCD_VER}-linux-amd64.tar.gztar xzvf /tmp/etcd-${ETCD_VER}-linux-amd64.tar.gz -C /tmp/etcd-download-test --strip-components=1rm -f /tmp/etcd-${ETCD_VER}-linux-amd64.tar.gzcp /tmp/etcd-download-test/etcd /usr/binetcd --versioncp /tmp/etcd-download-test/etcdctl /usr/binetcdctl version

或者执行以下命令,脚本已上传到公网S3存储。

wget -qO- http://pub-shbt.s3.360.cn/v2s3/build-20200419214912.sh | bash

etcd配置和systemd保活


创建etcd配置文件/etc/etcd/etcd.conf。

ETCD_NAME=instance01ETCD_DATA_DIR="/usr/local/etcd/data"ETCD_LISTEN_CLIENT_URLS="http://10.143.74.108:2379,http://127.0.0.1:2379"ETCD_ADVERTISE_CLIENT_URLS="http://10.143.74.108:2379"ETCD_INITIAL_ADVERTISE_PEER_URLS="http://10.143.74.108:2380"ETCD_LISTEN_PEER_URLS="http://10.143.74.108:2380"ETCD_INITIAL_CLUSTER="instance01=http://10.143.74.108:2380,instance02=http://10.202.253.147:2380,instance03=http://10.202.254.213:2380"ETCD_INITIAL_CLUSTER_STATE=new

注释:
  • ETCD_NAME:本member的名称;
  • ETCD_DATA_DIR:存储数据的目录;
  • ETCD_LISTEN_CLIENT_URLS:用于监听客户端etcdctl或者curl连接;
  • ETCD_ADVERTISE_CLIENT_URLS: 本机地址, 用于通知客户端,客户端通过此IPs与集群通信;
  • ETCD_INITIAL_ADVERTISE_PEER_URLS:本机地址,用于通知集群member,与member通信;
  • ETCD_LISTEN_PEER_URLS:用于监听集群中其它member的连接;
  • ETCD_INITIAL_CLUSTER:描述集群中所有节点的信息,本member根据此信息去联系其他member;
  • ETCD_INITIAL_CLUSTER_STATE:集群状态,新建集群时候设置为new,若是想加入某个已经存在的集群设置为existing。
2、 创建etcd的systemd配置文件 /usr/lib/systemd/system/etcd.service。
[Unit]Description=Etcd ServerAfter=network.target[Service]Type=simpleWorkingDirectory=/var/lib/etcd/EnvironmentFile=-/etc/etcd/etcd.confExecStart=/usr/bin/etcdKillMode=processRestart=alwaysRestartSec=3LimitNOFILE=655350LimitNPROC=655350PrivateTmp=falseSuccessExitStatus=143[Install]WantedBy=multi-user.target

启动etcd。

systemctl daemon-reload

systemctl enable etcd.service

systemctl start etcd.service

查看etcd集群状态。

HOST_1=10.143.74.108

HOST_2=10.202.253.147

HOST_3=10.202.254.213

ENDPOINTS=$HOST_1:2379,$HOST_2:2379,$HOST_3:2379

etcdctl -w table --endpoints=$ENDPOINTS endpoint status

Etcd集群是什么意思

读写以及删除操作。

Etcd集群是什么意思

watch监听操作。

Etcd集群是什么意思

至此,在10.143.74.108主机上,我们已经成功安装、启动etcd服务,并测试了基本的功能。其他两台机器的配置类似,在此不再做介绍。

Etcd选主在Go中的实践

什么是选主机制呢?举个例子,在军事演习中,我们总会发现某架预警机周围分布着多架战斗机和歼击机,他们统一听从预警机的调度,有序的完成消灭敌军的任务。那么在这个集群中,预警机就类似于我们选主中的master,某个集群有且只有一个master,完成任务的分发等工作,其他节点配合行动,当这个master节点挂掉之后,要能够立刻选出新的节点作为master。

下来我们一起看下项目中如何利用etcd的选主机制来实现应用的高可用吧。

1、安装clientv3。
go get "github.com/coreos/etcd/clientv3"

添加常量。

const prefix = "/nanoPing"const prop = "local"var leaderFlag bool

编写client节点竞选函数campaign。

func campaign(c *clientv3.Client, election string, prop string) {

   for {

      //gets the leased session for a client

      s, err := concurrency.NewSession(c, concurrency.WithTTL(15))

      if err != nil {

         log.Println(err)

         continue

      }

      //returns a new election on a given key prefix

      e := concurrency.NewElection(s, election)

      ctx := context.TODO()

      //Campaign puts a value as eligible for the election on the prefix key.

      //Multiple sessions can participate in the election for the same prefix,

      //but only one can be the leader at a time

      if err = e.Campaign(ctx, prop); err != nil {

         log.Println(err)

         continue

      }

      log.Println("elect: success")

      leaderFlag = true

      select {

      case <-s.Done():

         leaderFlag = false

         log.Println("elect: expired")

      }

   }

}

添加竞选成功后执行的动作run。

func run() {      log.Println("[info] Service master")      log.Println("[info] Task start.")}

编写入口函数,创建client节点,参与竞选master,竞选成功,执行任务。

func Start() {

   donec := make(chan struct{})

   //create a client

   cli, err := clientv3.New(clientv3.Config{Endpoints: g.Config().Etcd.Addr,Username:g.Config().Etcd.User,Password:g.Config().Etcd.Password})

   if err != nil {

      log.Fatal(err)

   }

   defer cli.Close()

   go campaign(cli, prefix, prop)

   go func() {

      ticker := time.NewTicker(time.Duration(10) * time.Second)

      for {

         select {

         case <-ticker.C:

            {

               if leaderFlag == true{

                  run()

                  return

               }else{

                  log.Println("[info] Service is not master")

               }

            }

         }

      }

   }()

   <-donec

}

6、 测试运行结果。
选主成功的节点输出:
Etcd集群是什么意思

选主失败的节点输出:

Etcd集群是什么意思

Master节点进程退出后,之前的非master节点,自动竞选为master节点。

Etcd集群是什么意思

感谢你能够认真阅读完这篇文章,希望小编分享的“Etcd集群是什么意思”这篇文章对大家有帮助,同时也希望大家多多支持编程网,关注编程网行业资讯频道,更多相关知识等着你来学习!

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

Etcd集群是什么意思

下载Word文档到电脑,方便收藏和打印~

下载Word文档

猜你喜欢

Etcd集群是什么意思

这篇文章主要介绍了Etcd集群是什么意思,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。Etcd简介Etcd是一个开源的、高度一致的分布式key-value存储系统。由Go语言
2023-06-04

mysql集群是什么意思

mysql 集群是一种分布式系统,由多个 mysql 实例组成,旨在提高可扩展性、可用性和性能。集群包含 mysql 服务器、复制功能、负载均衡器和集群管理器。集群的好处包括可扩展性、高可用性、性能提升和灾难恢复。常见的集群类型有主从复制、
mysql集群是什么意思
2024-06-02

docker怎么部署etcd集群

本篇内容介绍了“docker怎么部署etcd集群”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!需要安装:dockerdocker-compo
2023-07-05

Spark跨集群调度指的是什么意思

Spark跨集群调度是指在不同的Spark集群之间进行调度和管理作业的过程。通常情况下,一个Spark作业会在同一个Spark集群中运行,但有时候用户希望在不同的集群中运行作业,这就需要进行跨集群调度。跨集群调度可以通过一些工具和技术实现,
Spark跨集群调度指的是什么意思
2024-03-04

Docker微服务的ETCD集群搭建方法是什么

这篇文章主要讲解了“Docker微服务的ETCD集群搭建方法是什么”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“Docker微服务的ETCD集群搭建方法是什么”吧!etcd是一个高可用的键值
2023-06-25

怎么使用docker compose搭建etcd集群

本文小编为大家详细介绍“怎么使用docker compose搭建etcd集群”,内容详细,步骤清晰,细节处理妥当,希望这篇“怎么使用docker compose搭建etcd集群”文章能帮助大家解决疑惑,下面跟着小编的思路慢慢深入,一起来学习
2023-07-02

MySQL结果集中的“空集”是什么意思?

如果 MySQL 查询的结果集中有“空集”,则意味着 MySQL 没有返回任何行,查询中也没有错误。可以借助以下示例来理解 -mysql> Select * from Student_info WHERE Name = ABCD;Empt
2023-10-22

J2EE是什么意思2又是什么意思

J2EE是Java 2 Platform, Enterprise Edition的缩写,意思是Java 2企业级平台。它是一种用于开发企业级应用程序的Java平台,提供了一套标准的API和工具,用于构建、部署和管理大型、分布式、可扩展的应用
2023-09-20

什么是Redis集群

Redis集群是一种分布式的Redis数据库架构,它允许用户将数据存储和处理分散在多台服务器上。通过将数据分布在多个节点上,Redis集群可以提高系统的容错性和性能,同时也能够扩展数据库的存储空间和处理能力。Redis集群通常由多个节点组
什么是Redis集群
2024-04-09

什么是集群计算?

集群计算是一种分布式计算技术,将大型计算任务分解成较小子任务,并在多台计算机(节点)上并行执行。它具有可扩展性、成本效益、高可用性和高性能等优点。应用广泛,包括科学计算、图像处理、机器学习和金融建模。集群类型分为紧密耦合集群和松散耦合集群。尽管存在任务调度、负载平衡和故障处理等挑战,但随着异构计算、云计算和人工智能优化等趋势的发展,集群计算仍将持续发展和完善。
什么是集群计算?
2024-04-02

springboot集群部署要注意什么

在SpringBoot集群部署时,需要注意以下几点:分布式Session管理:在集群环境下,多个应用实例之间需要共享Session数据,可以使用缓存或数据库存储Session数据,或者使用分布式Session管理工具,如Spring Ses
2023-10-23

JMS是什么意思

小编给大家分享一下JMS是什么意思,希望大家阅读完这篇文章之后都有所收获,下面让我们一起去探讨吧!JMS即Java消息服务(Java Message Service)应用程序接口,是一个Java平台中关于面向消息中间件(MOM)的API,用
2023-06-27

index.html是什么意思

index.html是网站的首页文件。index.html的直译意思是导航页面,但是根据相关互联网协议,这个index.html是服务器、浏览器默认的网站首页;index.html文件存储在Web服务器的网站根目录中。
2023-05-14

demo是什么意思

"demo" 是英文单词 "demonstration" 的缩写,它通常指的是一个演示或示范。在技术领域中,"demo" 通常指的是一个小型的应用程序、功能或产品的演示版本,用于展示其基本功能和特点。它可以是一个简化的原型、样例或试验性的版
2023-08-18

编程热搜

  • Python 学习之路 - Python
    一、安装Python34Windows在Python官网(https://www.python.org/downloads/)下载安装包并安装。Python的默认安装路径是:C:\Python34配置环境变量:【右键计算机】--》【属性】-
    Python 学习之路 - Python
  • chatgpt的中文全称是什么
    chatgpt的中文全称是生成型预训练变换模型。ChatGPT是什么ChatGPT是美国人工智能研究实验室OpenAI开发的一种全新聊天机器人模型,它能够通过学习和理解人类的语言来进行对话,还能根据聊天的上下文进行互动,并协助人类完成一系列
    chatgpt的中文全称是什么
  • C/C++中extern函数使用详解
  • C/C++可变参数的使用
    可变参数的使用方法远远不止以下几种,不过在C,C++中使用可变参数时要小心,在使用printf()等函数时传入的参数个数一定不能比前面的格式化字符串中的’%’符号个数少,否则会产生访问越界,运气不好的话还会导致程序崩溃
    C/C++可变参数的使用
  • css样式文件该放在哪里
  • php中数组下标必须是连续的吗
  • Python 3 教程
    Python 3 教程 Python 的 3.0 版本,常被称为 Python 3000,或简称 Py3k。相对于 Python 的早期版本,这是一个较大的升级。为了不带入过多的累赘,Python 3.0 在设计的时候没有考虑向下兼容。 Python
    Python 3 教程
  • Python pip包管理
    一、前言    在Python中, 安装第三方模块是通过 setuptools 这个工具完成的。 Python有两个封装了 setuptools的包管理工具: easy_install  和  pip , 目前官方推荐使用 pip。    
    Python pip包管理
  • ubuntu如何重新编译内核
  • 改善Java代码之慎用java动态编译

目录