ETCD分布式缓存

一、ETCD简介

ETCD是一个高度可用的分布式键值存储系统,主要用于共享配置和服务发现。它基于Go语言实现,内部使用Raft一致性算法处理日志复制,保证多节点数据的强一致性。

ETCD的目标是构建一个高可用的分布式键值数据库,用于存储配置信息和服务发现。在分布式系统中,各种服务配置信息的管理共享和服务发现是一个基本且重要的问题。ETCD可以集中管理这些配置信息,服务端将配置信息存储于ETCD,客户端通过ETCD获取服务配置信息。此外,ETCD还提供了监听机制,客户端可以监听某个key或某些key的变更,当配置信息发生改变时,ETCD会通知客户端。

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

二、ETCD节点的角色

  1. Leader(领导者):Leader节点在集群中有且仅能有一个,负责向所有的Follower节点同步日志数据。同时,Leader节点还负责处理客户端的写请求,并在与Follower节点之间定期发送心跳包以检测节点的存活状态。
  2. Follower(跟随者):Follower节点从Leader节点获取日志,提供数据查询功能,并将所有修改请求转发给Leader节点。Follower节点在集群初始化时处于此状态,并等待Leader发送心跳。如果一定时间内未收到心跳,Follower会转变为Candidate状态并发起选举请求。
  3. Candidate(候选人):当Leader节点不存在或失联时,Follower节点会转变为Candidate状态,开始新的Leader节点选举。Candidate节点会向其他节点发送选举请求,并等待其他节点的回复。如果收到包括自己在内超过半数节点的赞成,选举成功,该Candidate节点会成为新的Leader;否则,选举失败,Candidate节点会等待一段时间后再次发起选举或转为Follower状态。

三、ETCD选主

在ETCD集群中,节点(或称为成员)的数量对于其选主(leader election)过程和集群的可用性有着重要的影响。

ETCD集群的选主过程基于Raft一致性算法,该算法要求集群中至少有一半加一(N/2 + 1)的节点是可用的,以便能够达成共识并进行正常的操作。

假设你有一个由5个节点组成的ETCD集群,并且挂了3个节点,那么集群中剩余的节点数量是2。由于2小于5/2 + 1(即3),这意味着集群中的可用节点数量不足以进行正常的选主和达成共识。因此,在这种情况下,集群将无法选出新的主节点,并且可能会进入不可用状态。

为了恢复集群的正常功能,你需要修复或替换挂掉的节点,使集群中的可用节点数量至少达到3个。这样,集群才能重新进行选主并恢复服务。

总之,如果一个由5个节点组成的ETCD集群中挂了3个节点,那么集群将无法选出新的主节点,并且可能会变得不可用。为了解决这个问题,你需要确保集群中至少有3个节点是可用的。

相关推荐

  1. ETCD分布式缓存

    2024-03-11 07:46:03       37 阅读
  2. 分布式缓存

    2024-03-11 07:46:03       32 阅读

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-03-11 07:46:03       94 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-03-11 07:46:03       101 阅读
  3. 在Django里面运行非项目文件

    2024-03-11 07:46:03       82 阅读
  4. Python语言-面向对象

    2024-03-11 07:46:03       91 阅读

热门阅读

  1. 安卓 Kotlin 面试题 21-30

    2024-03-11 07:46:03       43 阅读
  2. Git-安装与使用(快速上手图文教程)

    2024-03-11 07:46:03       48 阅读
  3. SpringBoot中实现API速率限制的令牌桶算法项目

    2024-03-11 07:46:03       39 阅读
  4. 【py】加载sdk文件夹中的dll

    2024-03-11 07:46:03       35 阅读
  5. 【spring】-多模块构建

    2024-03-11 07:46:03       37 阅读
  6. 3488.最短路径floyd、并查集

    2024-03-11 07:46:03       36 阅读
  7. Lua 函数前的冒号和点号,你知道他们的区别吗?

    2024-03-11 07:46:03       44 阅读
  8. [2023年]-hadoop面试真题(一)

    2024-03-11 07:46:03       47 阅读
  9. C/C++关键字详解-----`const`的使用

    2024-03-11 07:46:03       46 阅读
  10. Spring Boot(六十六):集成Alibaba Druid 连接池

    2024-03-11 07:46:03       46 阅读