Etcd
概述
etcd 是一个高可用的分布式键值存储系统,由 CoreOS 团队于 2013 年发起,采用 Go 语言实现。它主要用于配置管理、服务发现和分布式协调,广泛应用于 Kubernetes 等云原生系统中。
特点
• 简单:安装配置简单,提供 HTTP API 进行交互。
• 安全:支持 SSL 证书验证。
• 快速:单实例支持每秒 2k+ 读操作。
• 可靠:基于 Raft 算法,保证数据的一致性和高可用性。
• 高可用:支持多节点集群,容错能力强。
核心概念
• Raft 协议:etcd 使用 Raft 算法保证数据一致性,包含 Leader、Follower 和 Candidate 三种角色。Raft 算法
• Node:一个 Raft 状态机实例。
• Member:一个 etcd 实例,管理一个 Node 并为客户端提供服务。
• Cluster:由多个 Member 组成的协同工作集群。
• WAL:预写式日志,用于持久化存储。
• Snapshot:快照,防止 WAL 文件过多。
数据读写
• 读写顺序:所有数据流向从 Leader 流向 Follower,保证强一致性。
• Leader 选举:通过 Raft 协议选举 Leader,Leader 处理所有数据提交。
• 数据写入:写入请求被 Leader 处理并分发给多数节点后,视为成功写入。
应用场景
• 服务注册与发现:用于分布式系统中的服务注册与发现。
• 消息发布与订阅:支持消息的发布与订阅机制。
• 分布式锁:基于 Raft 算法实现分布式锁。
• 配置管理:存储和管理分布式系统的配置信息。
安装与部署
• 单机部署:适用于开发和测试环境。
• 集群部署:推荐至少 3 个节点,保证高可用性和容错能力。
运维与监控
• 备份与恢复:使用 etcdctl snapshot 命令进行备份和恢复。
• 健康检查:定期检查集群健康状态,确保高可用性。
• 性能优化:针对环境情况调整选举超时时间,使用高性能磁盘。