
etcd 本地 3 成员集群怎么加一个 Learner 节点并启动它【免费下载链接】etcdDistributed reliable key-value store for the most critical data of a distributed system项目地址: https://gitcode.com/GitHub_Trending/et/etcd在测试与开发环境下etcd 仓库自带的 Procfile 可以一键拉起一个本地 3 成员集群。仓库 README 明确指向这份 Procfile 的注释说明如何给这个集群追加一个 Learner学习者节点先用etcdctl member add --learnertrue把节点注册为不投票的 Learner再启动该节点进程最后可选地把它提升promote为投票成员。本文按这条流程走完一遍在一个已运行的本地 3 成员 etcd 集群中加入并启动第四个节点infra4。开始前需要满足三个前提已克隆 etcd 源码树并且bin/目录下有编译好的etcd二进制Procfile 注释写明如果 etcd 二进制在别处需修改命令中的bin/etcd路径已安装管理 Procfile 应用的工具goreman可以使用etcdctl客户端。启动本地 3 成员集群按照 本地集群文档先安装 goreman$ go install github.com/mattn/goremanlatest可执行文件会放在$GOPATH/bin如果$GOPATH未设置则安装到$HOME/go/bin。文档提醒要确保$PATH已正确配置。然后在 etcd 源码树根目录启动集群$ goreman -f Procfile start启动后3 个成员分别监听localhost:2379、localhost:22379和localhost:32379的客户端请求Procfile 中三个进程名分别是etcd1、etcd2、etcd3。用下面的命令确认集群已就绪$ etcdctl --write-outtable --endpointslocalhost:2379 member list文档给出的示例输出如下成员 ID 只是示例值实际会不同----------------------------------------------------------------------------------- | ID | STATUS | NAME | PEER ADDRS | CLIENT ADDRS | ----------------------------------------------------------------------------------- | 8211f1d0f64f3269 | started | infra1 | http://127.0.0.1:2380 | http://127.0.0.1:2379 | | 91bc3c398fb3c146 | started | infra2 | http://127.0.0.1:22380 | http://127.0.0.1:22379 | | fd422379fda50e48 | started | infra3 | http://127.0.0.1:32380 | http://127.0.0.1:32379 | -----------------------------------------------------------------------------------如果此时看不到 infra1、infra2、infra3 三个成员说明集群还没起来先回到上一步检查 goreman 的输出再进行下面的操作。把 Learner 节点注册进集群Procfile 注释中给出的注册命令是$ etcdctl member add infra4 --peer-urlshttp://127.0.0.1:42380 --learnertrueinfra4是新成员的名字沿用 Procfile 示例的命名--peer-urls是新成员的 peer URL 列表命令源码中该标志的描述为 comma separated peer URLs for the new member见 member_command.go--learnertrue表示新成员是 Raft Learner即加入集群但尚不投票的成员。etcdctl 使用文档 对member add的说明是打印新成员的 member ID 和 cluster ID。文档中的示例输出如下数值为示例实际 ID 不同Member ced000fda4d05edf added to cluster 8c4281cc65c7b112 ETCD_NAMEnewMember ETCD_INITIAL_CLUSTERnewMemberhttps://127.0.0.1:12345,defaulthttp://10.0.0.30:2380 ETCD_INITIAL_CLUSTER_STATEexisting记下输出中的 member ID后面如果要把 Learner 提升为投票成员需要用到它。启动 Learner 节点Procfile 注释写明Learner 节点对应 Procfile 中的etcd4一行取消注释后由 goreman 启动。该行就是启动命令本身如果etcd二进制不在bin/下需按 Procfile 顶部注释修改路径bin/etcd --name infra4 --listen-client-urls http://127.0.0.1:42379 --advertise-client-urls http://127.0.0.1:42379 --listen-peer-urls http://127.0.0.1:42380 --initial-advertise-peer-urls http://127.0.0.1:42380 --initial-cluster-token etcd-cluster-1 --initial-cluster infra4http://127.0.0.1:42380,infra1http://127.0.0.1:12380,infra2http://127.0.0.1:22380,infra3http://127.0.0.1:32380 --initial-cluster-state existing --enable-pprof --loggerzap --log-outputsstderr对照前三个成员Procfile 中的etcd1etcd3行这里有两个关键差异--initial-cluster-state existing前三个成员用的是new创建全新集群而 infra4 是加入已存在的集群--initial-cluster中除 infra4 自身外还列出了 infra1、infra2、infra3 的 peer URL。端口约定与注册命令一致infra4 的 peer 端口是42380与member add的--peer-urls对应客户端端口是42379。验证 Learner 节点已加入节点进程启动后再次执行$ etcdctl --write-outtable --endpointslocalhost:2379 member listmember list会列出集群中所有成员注册并启动成功后列表中应出现名为infra4、peer 地址为http://127.0.0.1:42380的新成员上面表格是 3 成员阶段的文档示例输出此时应比它多一行。如果列表中一直没有 infra4先回到注册一步确认member add是否执行成功再确认 infra4 进程是否已启动。可选把 Learner 提升为投票成员Procfile 注释的最后一步给出了提升命令$ etcdctl member promote memberid把memberid替换为前面member add输出或member list中显示的 infra4 的成员 ID。命令的定义是Promotes a non-voting learner member to a voting one in the cluster把一个不投票的 Learner 成员提升为投票成员执行成功后会打印包含成员 ID 和 cluster ID 的提升信息。如果 infra4 只是作为只读副本使用这一步可以不做。边界与收尾local_cluster.md 明确本地集群方式适用于测试与开发部署For testing and development deployments生产部署应参考其链接的 clustering 章节。etcd 3.4 起提供etcd --experimental-max-learners标志用于设置 Learner 成员的最大数量见 CHANGELOG-3.4.md。练习结束时停止进程local_cluster.md 给出的方式是goreman run stop 进程名例如停止成员etcd2的示例命令为goreman run stop etcd2对 Learner 进程名etcd4同理。该命令会终止对应进程请确认没有其它任务依赖它。完整操作序列即 Procfile 注释中列出的四步启动集群 →etcdctl member add infra4 --peer-urls... --learnertrue→ 启动etcd4行 → 可选etcdctl member promote memberid每一步都有对应的文档出处Procfile、本地集群文档 与 etcdctl 使用文档。【免费下载链接】etcdDistributed reliable key-value store for the most critical data of a distributed system项目地址: https://gitcode.com/GitHub_Trending/et/etcd创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考