携手创作,共同成长!这是我参与「掘金日新计划 · 8 月更文挑战」的第5天,点击查看活动详情
昨天简单总结了一下在生产中是如何使用 Etcd 的,以及要实现的 Etcd 集群是干什么的。简单讲 Etcd 就是类似一个服务注册中心,可以将服务节点以 key-value 的形式注册上去,这样其他人可以直接通过 Etcd 地址发现服务。而 Etcd 的集群就是若干个 Etcd 地址,虽然地址不同,但是其中注册的服务都是一样的。集群只是为了保证当其中某一个 Etcd 意外挂掉,另一个 Etcd 能够立马顶上去,促使程序正常运行下去。
提到上述的切换,就让我想到“主备切换”这个词,今天就来简单介绍一下。
Etcd 集群中的选举机制
Etcd 中每个节点的状态集合为(Follower、Candidate、Leader),结群初始化的时候,每个节点都是 Follower 角色,当 Follower 在一定时间内没有收到来自主节点的心跳,会将自己角色改为 Candidate,并发起一次选主投票;当收到包括自己在内超过半数节点赞成后,选举成功;如果收到的票数不足半成,则选举失败,或者选举超时。若本轮为选出主节点,将进行下一轮选举。当某个 Candidate 节点成为 Leader 后,Leader 节点会通过其他节点同步数据,同时参与竞选的 Candidate 节点进入 Follower 角色。
Etcd 集群的选主机制
一个 Etcd 集群有且只有一个 master,完成任务的分发等工作,其他节点配合行动,如果这个 master 系欸但挂掉了,立刻选出新的节点作为 master。
通过 Etcd 中的选主机制,实现了服务的高可用。同时为了对 Etcd 进行保活,还可以利用 systemd,这样的话只要 Etcd 服务所在机器没有宕机,进程就具有了容灾性。
简单总结了一下 Etcd 中的选举、选主。其实都是一些概念,真正应用到实际中,在代码中如何编写还是要好好思考一下。如有错误,望指正。
我向你敬礼啊,Salute!