Etcd 集群&&主备切换(1)

540 阅读2分钟

携手创作,共同成长!这是我参与「掘金日新计划 · 8 月更文挑战」的第4天,点击查看活动详情

最近在处理一个很久之前就已经提出来的一个需求:手上的这个模块主要负责的就是帮助组里监控各个模块下的功能的信息,一旦有问题能够快速定位。但之前的时候,只支持单个 etcd 地址的,现在希望能够支持 etcd 集群。

什么是 Etcd?

Etcd 是一个开源的,高度一致的分布式 key-value 存储系统。提供了配置共享和服务发现等众多功能。通过 Raft 算法维护集群中各个节点的通信和数据一致性,节点之间是对等的关系,即使 leader 节点故障,会很快选举出新的 leader,保证系统的正常运行。

在我使用的过程中,接触到的就是类似服务注册中心,我从 etcd 中获取到 C++ 注册到其中的服务,然后将该服务下的监控、模块等信息展现出来。

什么是 Etcd 集群?

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

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

我理解的就是,为什么要搞 Etcd 集群?因为单独一个 Etcd 地址,把服务注册上去了,万一这个 Etcd 崩了,就没有接替了,整个服务也发现不到了,就运行不下去了;但如果有一个 Etcd 集群,就可以保证当一个 Etcd 挂掉后,另一个 Etcd 能够立马顶上来,“接替”崩掉的 Etcd 位置继续工作,保证程序正常运行。这也就牵扯到热备、冷备等主备切换相关内容。后者之后会补充,今天主要先介绍 Etcd。

以上就是一些自己对于 Etcd 以及 Etcd 集群的一些拙见,如果有错误,望指正。
我向你敬礼啊,Salute!