ARTICLE DETAIL

资讯详情

深耕郑州网站建设与运营推广的一线实战洞察。

如何快速搭建etcd本地3节点集群:goreman+Procfile完整实践,直观理解Raft复制

如何快速搭建etcd本地3节点集群:goreman+Procfile完整实践,直观理解Raft复制 如何快速搭建etcd本地3节点集群goremanProcfile完整实践直观理解Raft复制【免费下载链接】etcdDistributed reliable key-value store for the most critical data of a distributed system项目地址: https://gitcode.com/GitHub_Trending/et/etcdetcd 是 Kubernetes 等分布式系统背后的分布式可靠键值存储。本文教你用goreman Procfile在本地一键拉起 etcd 3 节点集群并通过停/启节点亲手观察 Raft 复制与故障容忍的全过程无需任何云平台配置。搭建前先了解etcd 3 节点集群的端口规划etcd 官方仓库根部自带一个现成的 Procfile它把 3 个节点的全部启动参数写好了。每个节点都有两组端口节点名称客户端端口读写数据对等端口节点间通信节点 1infra1237912380节点 2infra22237922380节点 3infra33237932380三个关键启动参数值得认识详见 Procfile--initial-cluster声明集群的全部 3 个成员及其对等地址是集群自我介绍的名册--initial-cluster-state new表示首次组建全新集群扩展现有集群时改为existing--initial-cluster-token etcd-cluster-1集群令牌防止误连到其他同名集群 etcd 为什么常用 3 或 5 个节点因为 Raft 协议要求过半数节点存活才能提交数据3 节点容忍 1 台故障1 节点则完全无容错能力。第一步获取 etcd 源码并构建二进制在具备 Go 环境版本要求见 server/go.mod的机器上执行# 克隆 etcd 仓库 git clone https://gitcode.com/GitHub_Trending/et/etcd.git cd etcd # 使用官方构建脚本产物输出到 bin/ 目录 make build构建成功后bin/etcd服务端和bin/etcdctl命令行客户端会出现在仓库的bin/目录中。Procfile 里使用的正是bin/etcd这个相对路径所以必须在仓库根目录下运行后续命令。第二步安装 goreman 进程管理器goreman 是专为 Procfile 设计的进程管理器类似 Heroku 的本地版它会按 Procfile 中的定义并行拉起所有进程并为每个进程分配独立、可检索的输出流。在仓库根目录执行一条go install命令即可安装完整命令写在 Procfile 首行注释中。安装后请确认goreman在你的PATH中可用goreman version第三步一键启动 etcd 3 节点集群goreman -f Procfile start执行后你会看到三组节点日志交织输出分别标记为etcd1、etcd2、etcd3。其中包含两条关键信息选举完成某节点日志出现raft: ... became leader at term 2说明 Raft 已选出 Leader成员就绪三个节点互相发现集群形成第四步验证集群状态与读写数据另开一个终端使用 etcdctl 验证# 查看成员列表应显示 3 个 started 状态的节点 bin/etcdctl --write-outtable --endpointslocalhost:2379 member list # 写入并读取一个键值对 bin/etcdctl put foo bar bin/etcdctl get foo # 输出: barmember list返回的表格中应出现 infra1、infra2、infra3 三个成员——这就是你亲手搭好的 etcd 3 节点集群。第五步亲手观察 Raft 复制与故障容忍这是整个实践最有价值的部分。在 goreman 所在终端按CtrlC暂停然后单独停止节点 2# 停止 infra2 节点 goreman run stop etcd2 # 集群仍然可用写入与读取照常成功 bin/etcdctl put key hello bin/etcdctl get key # 尝试直连已停止的节点会得到连接超时错误 bin/etcdctl --endpointslocalhost:22379 get key # 恢复节点数据自动追平 goreman run restart etcd2 bin/etcdctl --endpointslocalhost:22379 get key # 输出: hello你刚刚亲眼验证了三个核心特性多数派存活即可写3 节点挂 1剩余 2 个仍是多数派写入不中断Leader 自动切换若挂掉的是 LeaderRaft 会在秒级选出新 Leader可在日志中观察 term 变化数据最终追平重新加入的节点通过拉取 Raft 日志补齐缺失条目这套验证故障容忍的完整流程官方也收录在 local_cluster.md 中。原理一图看懂一次写入如何完成 Raft 复制结合 Procfile 启动的 3 节点集群下面这张图展示了客户端请求恰好落在 Leader 上时的写入流程流程拆解对照图中编号客户端 gRPC 请求到达 Leader被转发给 Raft 子系统Leader 把该写入作为日志条目先持久化到自己的 WALWrite-Ahead LogLeader 通过对等端口如 12380向两个 Follower 复制日志每个 Follower 落盘后回确认一旦过半数3 节点中 2 个确认Leader 将该条目标记为 committed此时才向客户端返回成功——这就是可靠的含义你收到 OK 时数据已在至少 2 个节点落盘etcd 对 WAL 与内存态还有一套异步同步优化每 100ms 同步一次 BoltDB 文件不阻塞写路径这正是高写入吞吐的来源。想深入源码时可以按这条路径阅读Raft 与 etcd 服务集成server/etcdserver/raft.goWAL 的持久化实现server/etcdserver/zap_raft.go节点间 Raft 消息传输HTTP p2pserver/etcdserver/api/rafthttp/常见问题快速排查现象原因与解决goreman: command not found安装目录不在 PATH 中通常为$HOME/go/bin将其加入 PATH节点反复重启、日志报端口冲突2379 等端口被占用检查是否已有 etcd 进程在运行集群建不起来日志报 cluster token 冲突残留的default.etcd*数据目录导致状态冲突清理后再以--initial-cluster-state new重建误把新节点加进已有集群新节点应使用--initial-cluster-state existingProcfile 末行注释给出了完整示例 进阶玩法如果想模拟更复杂的节点故障网络分区、磁盘满等官方还提供了带故障注入脚本的 tools/local-tester/ 工具集它同样基于 Procfile 工作。小结3 行 Procfile定义了 etcd 3 节点集群的全部启动参数端口规划一目了然goreman 一键编排goreman -f Procfile start即启goreman run stop/restart 节点名即做故障演练停/启节点实验让你直观看到多数派提交、Leader 切换与日志追平——这正是 Raft 复制的价值遇到配置疑问随时回看 Procfile 注释与 local_cluster.md 官方文档现在你的本地已经跑着一个和 Kubernetes 生产环境同构的 etcd 集群。试着再put几个键然后关掉 Leader看看新 Leader 是如何接棒的吧。【免费下载链接】etcdDistributed reliable key-value store for the most critical data of a distributed system项目地址: https://gitcode.com/GitHub_Trending/et/etcd创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表