千家信息网

Etcd集群是什么意思

发表于:2026-11-03 作者:千家信息网编辑
千家信息网最后更新 2026年11月03日,这篇文章主要介绍了Etcd集群是什么意思,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。Etcd简介Etcd是一个开源的、高度一致的分布
千家信息网最后更新 2026年11月03日Etcd集群是什么意思

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

Etcd简介

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

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


Etcd架构及工作原理

架构


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

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

工作原理



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



1、创建安装脚本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

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

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

etcd配置和systemd保活



1、 创建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

3、 启动etcd。

systemctl daemon-reload

systemctl enable etcd.service

systemctl start etcd.service


4、 查看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



5、 读写以及删除操作。

6、 watch监听操作。

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



Etcd选主在Go中的实践

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

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


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


2、添加常量。

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


3、编写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")

}

}

}


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

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


5、编写入口函数,创建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、 测试运行结果。
选主成功的节点输出:

选主失败的节点输出:

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

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

节点 集群 数据 存储 状态 配置 成功 客户 系统 选举 客户端 篇文章 支持 一致 任务 地址 文件 架构 角色 预警机 数据库的安全要保护哪些东西 数据库安全各自的含义是什么 生产安全数据库录入 数据库的安全性及管理 数据库安全策略包含哪些 海淀数据库安全审计系统 建立农村房屋安全信息数据库 易用的数据库客户端支持安全管理 连接数据库失败ssl安全错误 数据库的锁怎样保障安全 西安纸贵互联网科技有限公司 高科技互联网 互联网科技公司华为 科技股互联网 互联网金融 科技 互联网科技的发展 鑫亿盛互联网科技 融势互联网科技 火传媒上海互联网科技 互联网科技美容 剑昆互联网络科技有限公司临桂 移动互联网科技公司 晓花互联网科技有限公司网址 阿大互联网科技有限公司 佛山市拉法互联网科技有限公司 高科技互联网发展前景如何 西安左小互联网科技有限公司 互联网科技职业技能培训学校 盐城市攀科互联网科技有限公司 广东猫王互联网科技有限公司电话 咖啡 涨乐互联网科技 新华互联网科技学院 成都仁贤领冠互联网科技有限公司 深圳市罗太互联网科技有限公司 2021互联网科技公司排名 山东星卡互联网科技有限公司官网 河南商务圈互联网科技有限公司 广东猫王互联网科技有限公司电话 广州全民伙伴互联网科技有限公司
0