核心服务器是etcd的核心组件,实现了用于处理客户端请求、共识、存储和集群管理的服务器端功能。本页重点介绍etcd服务器的内部架构和操作,包括请求处理、Raft共识集成和生命周期管理。
有关存储引擎的具体信息,请参阅存储引擎。有关Raft共识实现的详细信息,请参阅Raft共识。
etcd服务器围绕EtcdServer类型构建,该类型协调系统的所有主要组件。从高层次来看,服务器将面向客户端的API与底层的Raft共识实现和持久化存储连接起来。
来源:server/etcdserver/server.go208-300 server/etcdserver/raft.go80-104
etcd代码库中的EtcdServer结构包含以下关键元素
raftNode组件管理共识mvcc.WatchableKV提供MVCC存储RaftCluster跟踪成员lease.Lessor处理生存时间(TTL)键auth.AuthStore管理访问控制EtcdServer结构包含代表服务器状态的核心字段
来源:server/etcdserver/server.go208-300 EtcdServer结构包含许多字段和方法,用于管理服务器的操作、状态以及与其他组件的交互。
服务器引导过程涉及几个关键步骤来初始化etcd服务器
来源:server/etcdserver/bootstrap.go54-117 server/etcdserver/server.go303-453 server/etcdserver/server.go537-608
引导过程有以下主要阶段
服务器的引导过程在NewServer()中启动,该函数调用bootstrap()来准备环境和组件初始化。
当通过NewServer()创建新服务器时,会初始化几个关键组件
来源:server/etcdserver/server.go303-453 server/etcdserver/server.go537-608
实际的服务器启动发生在调用Start()时,它会启动几个goroutine来处理
主服务器循环处理Raft条目并管理服务器状态
来源:server/etcdserver/server.go766-866
主服务器循环处理几种类型的事件
etcd中的请求在执行前会经过几个层
来源:server/etcdserver/v3_server.go104-246 server/etcdserver/server.go1497-1588
读写请求的处理方式不同
读取操作:
写入操作:
写入请求通过Raft共识进行处理
来源:server/etcdserver/server.go1531-1588 server/etcdserver/v3_server.go144-201
Raft请求处理的关键步骤
InternalRaftRequestNode.Propose()将请求提交给Raft一旦Raft提交了条目,就需要将它们应用于状态机
来源:server/etcdserver/server.go766-997 server/etcdserver/raft.go176-340 server/etcdserver/apply/uber_applier.go
应用机制确保
etcd服务器通过RaftCluster类型管理集群成员
来源:server/etcdserver/api/membership/cluster.go42-62 server/etcdserver/api/membership/cluster.go404-484
集群成员通过以下操作进行管理
AddMember:向集群添加新成员RemoveMember:从集群中移除成员UpdateAttributes:更新成员的属性PromoteMember:将学习者成员提升为投票成员这些操作通过Raft执行以确保共识。
Etcd跟踪集群版本以确保成员之间的兼容性
来源:server/etcdserver/api/membership/cluster.go596-633 server/etcdserver/server.go2081-2123
版本管理的关键方面
etcd 服务器包含监控和确保数据完整性的机制
来源:server/etcdserver/corrupt.go87-178 server/etcdserver/corrupt.go179-295
损坏检查的工作方式是
etcd 核心服务器负责 etcd 实例的生命周期管理,通过 Raft 共识处理客户端请求,一致地应用状态机更改,并维护集群成员。它为所有 etcd 操作提供中心协调点,确保分布式环境中的数据一致性、持久性和可用性。
通过将 Raft 共识与持久化存储引擎集成,etcd 服务器提供了一个可靠的分布式键值存储,可以在节点故障时保持一致性。