CloudNativeEra
  • Introduction
  • 名词解释
  • Computer Science
    • Computer Organization
      • CPU
      • 二进制、电路、加法器、乘法器
      • 编译、链接、装载
      • 存储器
      • IO
    • Operating System
      • 操作系统基础知识
      • 系统初始化
      • 进程管理
      • Everything about Memory
      • 文件系统
      • 并行编程
      • Linux
        • CPU
        • IO 多路复用
        • DMA IO and Linux Zero Copy
    • Computer Network
      • 网络相关命令
      • 评估系统的网络性能
      • 网络抓包
      • Linux 最多支撑的 TCP 连接
      • 网络虚拟化
      • DHCP 工作原理
    • Data Structure and Algorithm
      • 题目列表
      • Summarize
        • 方法总结
        • 二分思想
        • 树的演化
        • 算法思想总结
      • Data Structure
        • Data Struct - Array
        • Tree
        • Heap
        • Hash
        • 字符串
      • Algorithm
        • Sorting Algorithm
        • 查找
        • 贪心算法
        • 动态规划
        • 位运算
      • Practice Topics
        • Data Struct in SDK
        • Topic - Tree
        • Topic - Graph
        • Topic - 滑动窗口
        • 剑指 Offer 题解
    • 并发编程
      • 并发模式
      • 并发模型
  • 系统设计
    • 软件设计
      • 软件架构
      • 编程范式
      • 系统设计题
      • 设计原则
      • 计算机程序的构造和解释 SICP
    • 领域驱动设计
      • 应用:在线请假考勤管理
      • 应用: library
    • 微服务与云原生
      • Designing and deploying microservices
      • 容器技术
      • Docker
      • Etcd
      • Kubernetes
        • Kubernetes - Mapping External Services
      • Istio
      • 监控
    • 分布式系统
      • 分布式理论
      • 分布式事务
    • 后端存储设计
      • 缓存设计
      • 数据库架构设计
    • CI/CD
    • 设计最佳实践
    • 测试
    • 安全
    • 综合
      • 开发实践
      • 分布式锁
      • 分布式计数服务
      • 弹幕系统设计
      • 消息队列设计
      • 分布式ID生成算法
      • 限流设计
      • 网关设计
      • 通用的幂等设计
      • 分布式任务调度
        • Timer
        • ScheduledExecutorService
        • Spring Task
        • Quartz
      • 交易系统
      • 权限设计
  • 编程语言
    • 编程语言
    • C & C++
    • Java
      • JVM
        • JVM Bytecode
      • Java 核心技术
      • Java 8 新特性
      • Java 集合框架
      • Java NIO
      • 并发编程
        • 线程生命周期与线程中断
        • 三个线程交替打印
        • 两个线程交替打印奇偶
        • 优雅终止线程
        • 等待通知机制
        • 万能钥匙:管程
        • 限流器
        • 无锁方案 CAS
    • Java 源码阅读
      • Unsafe
      • 异步计算 Future
      • Java Queue
      • CoalescingRingBuffer 分析
      • Java Collections
        • PriorityQueue 分析
        • HashMap 分析
        • TreeMap
    • Golang
    • Python
  • 框架/组件/类库
    • Guava
      • Guava Cache
      • Guava EventBus
    • RxJava
    • Apache MINA
    • Netty
      • 网络 IO 模型
      • Netty 生产问题
    • Apache Tomcat
    • MyBatis
    • 限流框架
    • Spring Framework
      • Spring Core
      • Spring 事务管理
    • Spring Boot
    • Spring Cloud
      • Feign & OpenFeign
      • Ribbon
      • Eurake
      • Spring Cloud Config
    • FixJ
    • Metrics
    • Vert.x
  • 中间件
    • Redis
      • Redis 基础
        • Redis 数据结构设计与实现
        • Redis 高性能网络模型
      • Redis checklist
      • 应用案例 - Redis 数据结构
      • 应用案例 - Redis 缓存应用
      • 应用案例 - Redis 集群
      • Redis 客户端
      • Redis 生产案例
        • [译] 在 Redis 中存储数亿个简单键值对
    • MySQL
      • MySQL 基础
      • MySQL Index
      • MySQL Transaction
      • MySQL 优化
      • MySQL 内核
      • MySQL Command
      • MySQL Checklist
      • MySQL Analysis Tool
      • 实现 MySQL
    • State Machine
    • 数据库连接池
    • MQ
      • 高性能内存队列 Disruptor
      • Kafka
      • Pulsar
      • RocketMQ
        • Broker 的设计与实现
      • NSQ
  • 实际案例
    • 线上 Case
      • Request Aborted
      • MySQL - Specified key was too long
      • Java 应用 CPU 100% 排查优化
      • 频繁 GC 导致的 Java 服务不响应
      • 导出优化
  • 大数据
    • 流计算
    • Flink
  • 其他
    • 工具
    • 读书
      • 设计数据密集型应用
      • 实现领域驱动设计
      • 精通比特币
      • 提问的智慧
    • 论文
    • 工程博客
    • 阅读源码
    • 面试
      • 如何在最短的时间里对对方有个全面的了解
    • 分享
    • 软技能
    • Todo
  • Blog
    • #算法
      • 查找
      • 位运算
      • 树
    • #架构
      • 1- 通信
    • Design & Dev & Opt
      • High Performance Data structure Design
  • Tiny Project
    • A Simple WeChat-like Instant Messaging Platform
由 GitBook 提供支持
在本页
  • raft 协议简单介绍
  • Watch 机制

这有帮助吗?

  1. 系统设计
  2. 微服务与云原生

Etcd

上一页Docker下一页Kubernetes

最后更新于4年前

这有帮助吗?

etcd 是一个高度一致的分布式键值存储,它提供了一种可靠的方式来存储需要由分布式系统或机器集群访问的数据。它可以优雅地处理网络分区期间的领导者选举,即使在领导者节点中也可以容忍机器故障。(etcd is a strongly consistent, distributed key-value store that provides a reliable way to store data that needs to be accessed by a distributed system or cluster of machines. It gracefully handles leader elections during network partitions and can tolerate machine failure, even in the leader node.)

  1. 集群搭建和使用

  2. Raft 协议

  3. watch 机制

  4. 应用场景:选主,服务发现,kv 存储

raft 协议简单介绍

数据一致性问题是分布式系统的难题,在过去的 10 年里,Paxos 算法统治着一致性算法这一领域:绝大多数的实现都是基于 Paxos 或者受其影响。但尽管有很多工作都在尝试降低它的复杂性,但是 Paxos 算法依然十分难以理解。而 Raft 算法是一个为可理解性而设计的一致性算法。

当我们只有一个节点服务(比如是一个数据库服务)和一个客户端时,我们向服务发送一个数据变更,单节点上的数据很容易达成共识和一致性。但是当有多个节点,又该如何做到一致性共识呢?这个就是分布式共识问题,Raft 就是一个用来实现分布式共识的协议。

Raft 协议将节点分为三类:Leader, Candidate and Follower,而所有节点的初始状态都是 Follower,如果一个节点没有收到来自 Leader 的心跳,就会自动变成 Candidate,Candidate 会向其他节点请求投票,其他节点会返回它们的投票结果,如果 Candidate 获得了半数以上的票,就会成为 Leader,这个过程就叫 Leader 选举。此后所有的数据变更都会发给 Leader,Leader 收到的每个变更都会作为一个条目加入到节点的日志中,但是现在的条目处于未提交的状态,所以还不能更新节点的值;在提交之前,还需要把日志发给其他的 Followers,然后 Leader 等待半数以上的节点成功写入日志中,此时 Leader 会提交这个变更修改节点的值,Leader 然后将提交的通知发送给 Followers,这个时候,整个集群的状态就达成了共识。整个过程可以叫 日志复制。

可见,Raft 结合了 Leader 选举和日志复制来完成。先来详细看下 Leader 选举

  1. Leader 选举有两个控制选举的超时配置:选举超时时间和心跳超时时间;选举超时时间是 Follwer 变为 Candidate 的等待时间,一般是 150ms 到 300ms 的一个随机值,一旦超时,Follower 就会变成 Candidate 进入一个新的选举周期,先投给自己一票,然后向其他节点发送一个投票请求,如果接收到投票请求的节点还没有投票,就会投票给请求的节点,该节点则会充置自己的超时时间,一旦 Candidate 获得了半数以上的票,就会变成 Leader;接着 Leader 就会发送追加消息给其他的 Follower;这些消息以心跳超时指定的时间间隔发送,Follwoer 会响应每一个追加的消息;此选举任期将持续到 Follower 停止接收心跳并成为 Candidate 为止,然后就会进入重新选举的流程。半数机制保证了每轮的选举都最多有一个 Leader 被选出。

  2. 一旦我们有一个 Leader,需要把所有的系统变化复制到所有节点上,通过使用与心跳相同的“添加条目”消息来完成此操作。

Raft 是一种基于消息传递通信模型、用来管理日志复制的一致性协议,它允许一组机器像一个整体一样工作,即使其中的一些机器出现错误也能正常提供服务。在 Raft 被提出来之前,Paxos 协议是第一个被证明的一致性算法,但是 Paxos 的原理理解与工程实现都很困难。Raft 是 Paxos 的一种实现方式,目标是提供更好理解的算法,并被证明可以提供与 Paxos 相同的容错性以及性能。

Etcd使用的是raft一致性算法来实现的,是一款分布式的一致性KV存储,主要用于共享配置和服务发现。

Watch 机制

Raft 的论文:,

Raft 的 Website:

via:

via1:

分布式键值存储 etcd 原理与实现 · Analyze
raft 协议动画演示
https://etcd.io/
https://kubernetes.io/docs/tasks/administer-cluster/configure-upgrade-etcd/
etcd labs
In Search of an Understandable Consensus Algorithm
raft 协议论文 - 中文版
https://raft.github.io/
分布式一致性协议 Raft 原理
Etcd 架构和实现解析
https://segmentfault.com/a/1190000021787055
https://xiaoz.co/2020/08/10/etcd-intro/