【保姆级教程】Windows11下go-zero的etcd安装与初步使用

本文介绍了在Windows11环境下安装和初步使用etcd,作为分布式键值存储,etcd常用于服务注册、发现和配置管理。作者详细步骤说明了安装过程,以及基本的键值对操作和etcdctl命令的使用,包括put、get、watch和del等。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

【Go-Zero】Windows11下etcd的安装与初步使用

大家好 我是寸铁👊
总结了一篇Windows11下etcd的安装与初步使用的文章✨
喜欢的小伙伴可以点点关注 💝

前言:
在使用etcd 前,我们需要了解一下etcd 是什么,为什么使用etcd 来进行微服务项目的开发。

etcd介绍

etcd(读作 et-see-dee)是一种开源的分布式统一键值存储,用于分布式系统或计算机集群共享配置、服务发现和调度协调etcd 有助于促进更加安全的自动更新协调向主机调度的工作,并帮助设置容器的覆盖网络

etcd 是许多其他项目的核心组件。最值得注意的是,它是Kubernetes首要数据存储,也是容器编排的实际标准系统。使用 etcd, 云原生应用可以保持更为一致的运行时间,而且在个别服务器发生故障时也能正常工作。应用从etcd读取数据并写入到其中;通过分散配置数据,为节点配置提供冗余和弹性

从简单的 Web 应用程序Kubernetes 集群,任何复杂的应用程序都可以从 etcd读取数据或将数据写入 etcd

etcd 采用Go语言编写,它具有出色的跨平台支持,很小二进制文件和强大的社区。 etcd 机器之间的通信通过 Raft 算法处理。


使用场景

etcd 比较多的应用场景是用于服务注册与发现,除此之外,也可以用于键值对存储,应用程序可以读取和写入 etcd 中的数据

一个简单的用例是将数据库连接详细信息或功能标志存储在 etcd 中作为键值对。 可以观察这些值,使我们的应用在更改时可以重新配置信息。高级用法是利用 etcd 的一致性保证来实施数据库 leader 选举或在一组 follower 之间执行分布式锁定


总结

etcd 是一个高度一致的分布式键值存储,它提供了一种可靠的方式来存储需要由分布式系统机器集群访问的数据。它可以优雅地处理网络分区期间leader 选举,以应对机器的故障,即使是在 leader 节点发生故障时

注意:这里的可靠性要比redis更加可靠,这也是我们选择使用etcd作为分布式键值存储的原因。此外,在更改配置文件时,如修改地址等等。需要重新启动项目,而etcd可以帮助我们自动更新。


初步认识etcd 后,下面来看一下怎么安装etcd ?


etcd安装

Windows安装etcd 非常简单,只需要下载安装

<think>我们之前已经讨论过在Windows11上生成仅开启认证的ETCD服务端Token的方法。现在,用户要求一个“保姆教程”,即非常详细、步骤明确的教程。我们将根据之前的回答,结合用户提供的引用(虽然引用内容ETCD不直接相关,但我们可以忽略这些引用,因为用户说“上述引用仅供参考”),来构建一个完整的Windows11ETCD配置和Token生成教程。注意:用户特别指出引用内容不是真正的需求,因此我们主要参考上一次的问题和回答。教程将包括以下步骤:1.下载ETCDforWindows2.配置ETCD,仅开启认证(不开启TLS)3.启动ETCD服务4.创建用户5.生成Token6.验证Token7.将ETCD设置为Windows服务(可选)由于是保姆教程,我们将详细说明每个步骤。注意:在Windows操作,我们将使用PowerShell。开始教程:###📥步骤1:下载ETCD访问ETCD的GitHub发布页面:https://github.com/etcd-io/etcd/releases下载适用于Windows的二进制文件(例如:`etcd-v3.5.0-windows-amd64.zip`)。解压到某个目录,例如:`C:\etcd`###⚙步骤2:配置ETCD(仅开启认证)我们将在没有TLS的情况下运行ETCD,仅开启认证。创建一个配置文件(可选)或直接使用命令行参数启动。为了方便,我们使用命令行参数。打开PowerShell(管理员权限),进入ETCD目录:```powershellcdC:\etcd```启动ETCD服务(仅开启认证):```powershell.\etcd.exe--auth-enabled=true`--listen-client-urls=http://0.0.0.0:2379`--advertise-client-urls=http://localhost:2379```注意:-`--auth-enabled=true`:开启认证。-`--listen-client-urls`:监听客户端连接的URL,这里使用HTTP。-`--advertise-client-urls`:告知客户端的URL。此时,ETCD服务已经启动,并开启了认证。###👤步骤3:创建用户在开启认证后,我们需要先创建一个用户(在开启认证的情况下,需要先创建一个有权限的用户才能进行其他操作)。但是,在开启认证的情况下,我们无法直接创建用户(因为需要认证)。因此,我们需要先暂时关闭认证或者使用初始没有认证的状态创建用户。有两种方法:方法一:先不开启认证启动ETCD,创建用户和角色并赋予权限,然后开启认证重启。方法二:在开启认证的情况下,使用root用户(但ETCD没有默认root用户,所以需要先创建一个用户并赋予root角色)。我们采用方法一,因为更简单清晰:步骤3.1:先关闭ETCD服务(按Ctrl+C停止刚才启动的ETCD)。步骤3.2:不开启认证启动ETCD:```powershell.\etcd.exe--listen-client-urls=http://0.0.0.0:2379--advertise-client-urls=http://localhost:2379```步骤3.3:创建用户(例如:admin):```powershell.\etcdctl.exe--endpoints=http://localhost:2379useraddadmin```按提示输入密码,例如:`vulhub`步骤3.4:创建root角色(ETCD内置的root角色拥有所有权限):```powershell.\etcdctl.exe--endpoints=http://localhost:2379roleaddroot```步骤3.5:将用户admin赋予root角色:```powershell.\etcdctl.exe--endpoints=http://localhost:2379usergrant-roleadminroot```步骤3.6:开启认证:```powershell#先停止ETCD(Ctrl+C),然后重新启动ETCD,这次开启认证:.\etcd.exe--auth-enabled=true`--listen-client-urls=http://0.0.0.0:2379`--advertise-client-urls=http://localhost:2379```###🔑步骤4:生成Token现在,ETCD已经开启认证,并且我们有一个admin用户。接下来,我们通过HTTPAPI来生成Token。使用PowerShell发送认证请求:```powershell$etcdUrl="http://localhost:2379/v3/auth/authenticate"$credentials=@{name="admin"password="vulhub"}|ConvertTo-Json$response=Invoke-RestMethod-Uri$etcdUrl-MethodPOST-ContentType"application/json"-Body$credentials$token=$response.tokenWrite-Host"生成的Token:$token"```注意:如果成功,会输出Token字符串。###✅步骤5:验证Token我们可以使用这个Token来访问ETCD的KV存储。例如,写入一个键值对:```powershell$headers=@{Authorization="Bearer$token"}$putBody=@{key=[System.Convert]::ToBase64String([System.Text.Encoding]::UTF8.GetBytes("test_key"))value=[System.Convert]::ToBase64String([System.Text.Encoding]::UTF8.GetBytes("test_value"))}|ConvertTo-Json$putResponse=Invoke-RestMethod-Uri"http://localhost:2379/v3/kv/put"-MethodPOST-Headers$headers-Body$putBody-ContentType"application/json"$putResponse|ConvertTo-Json```读取这个键:```powershell$rangeBody=@{key=[System.Convert]::ToBase64String([System.Text.Encoding]::UTF8.GetBytes("test_key"))}|ConvertTo-Json$rangeResponse=Invoke-RestMethod-Uri"http://localhost:2379/v3/kv/range"-MethodPOST-Headers$headers-Body$rangeBody-ContentType"application/json"$rangeResponse|ConvertTo-Json```如果能够成功读写,说明Token有效。###⚙步骤6(可选):将ETCD设置为Windows服务我们可以创建一个批处理文件来启动ETCD,然后将其注册为Windows服务。6.1创建启动脚本`etcd-service.bat`(在ETCD目录下):```batch@echooffcd/d%~dp0etcd.exe--name=etcd-win--data-dir=data--auth-enabled=true--listen-client-urls=http://0.0.0.0:2379--advertise-client-urls=http://localhost:2379```6.2使用Windows服务工具(如NSSM)来安装服务:-下载NSSM:https://nssm.cc/download-解压后,使用管理员权限打开PowerShell,进入nssm目录-安装服务:```powershell.\nssm.exeinstalletcd-service```在弹出窗口中:Path:选择刚才创建的`etcd-service.bat`Startupdirectory:选择ETCD目录Servicename:etcd-service-启动服务:```powershellnetstartetcd-service```###⚠安全警告由于我们使用的是HTTP而不是HTTPS,所以Token和密码在传输过程中是不加密的。在生产环境中,强烈建议启用TLS。###相关问题1.如何为ETCD启用TLS加密?2.在Windows上如何监控ETCD服务的运行状态?3.ETCD的日志文件在哪里查看?4.如何备份和恢复ETCD数据?5.如何修改ETCD用户的密码?希望这个保姆教程对您有帮助!</think>### 🔒 Windows 11 ETCD 服务端配置(仅开启认证) Token 生成保姆教程 #### 📥 前置准备 1. **下载 ETCD for Windows** - 访问 [ETCD 官方发布页](https://github.com/etcd-io/etcd/releases) - 下载最新版 Windows 二进制文件(如 `etcd-v3.5.0-windows-amd64.zip`) - 解压到 `C:\etcd` 目录 2. **配置环境变量**(管理员 PowerShell): ```powershell [Environment]::SetEnvironmentVariable("Path", "$env:Path;C:\etcd", "Machine") $env:Path += ";C:\etcd" # 立即生效 ``` --- ### ⚙ 步骤1:配置 ETCD 服务端(仅开启认证) 1. **创建数据目录**: ```powershell New-Item -Path "C:\etcd-data" -ItemType Directory ``` 2. **启动 ETCD 服务**(仅开启认证): ```powershell cd C:\etcd .\etcd.exe ` --name etcd-win11 ` --data-dir C:\etcd-data ` --listen-client-urls http://0.0.0.0:2379 ` --advertise-client-urls http://localhost:2379 ` --auth-enabled=true # 关键:开启认证但不启用 TLS ``` 3. **验证服务状态**: ```powershell netstat -ano | findstr ":2379" # 应显示 LISTENING ``` --- ### 👤 步骤2:创建认证用户 1. **创建管理员用户**: ```powershell # 使用初始无认证状态创建用户 .\etcdctl.exe --endpoints=http://localhost:2379 user add admin ``` > 按提示设置密码(如 `MySecurePass123!`) 2. **授予 root 角色**: ```powershell .\etcdctl.exe --endpoints=http://localhost:2379 user grant-role admin root ``` 3. **开启认证后验证**: ```powershell # 尝试未授权访问(应失败) .\etcdctl.exe --endpoints=http://localhost:2379 get foo # 输出:Error: etcdserver: authentication is not enabled ``` --- ### 🔑 步骤3:生成 Token(PowerShell 脚本) 1. **创建脚本 `Get-EtcdToken.ps1`**: ```powershell param( [string]$User = "admin", [string]$Password = "MySecurePass123!", [string]$Endpoint = "http://localhost:2379" ) $url = "$Endpoint/v3/auth/authenticate" $body = @{ name = $User; password = $Password } | ConvertTo-Json try { $response = Invoke-RestMethod -Uri $url -Method Post -ContentType "application/json" -Body $body $token = $response.token Write-Host "✅ 生成的 ETCD Token: $token" return $token } catch { Write-Error "❌ 认证失败: $($_.Exception.Message)" exit 1 } ``` 2. **运行脚本获取 Token**: ```powershell # 执行脚本(替换实际密码) $token = .\Get-EtcdToken.ps1 -Password "MySecurePass123!" ``` --- ### ✅ 步骤4:验证 Token 有效性 ```powershell $headers = @{ Authorization = "Bearer $token" } $kvRequest = @{ key = [Convert]::ToBase64String([Text.Encoding]::UTF8.GetBytes("test_key")) value = [Convert]::ToBase64String([Text.Encoding]::UTF8.GetBytes("test_value")) } # 写入数据 Invoke-RestMethod -Uri "http://localhost:2379/v3/kv/put" ` -Method POST -Headers $headers ` -Body ($kvRequest | ConvertTo-Json) ` -ContentType "application/json" # 读取数据 $readRequest = @{ key = $kvRequest.key } | ConvertTo-Json Invoke-RestMethod -Uri "http://localhost:2379/v3/kv/range" ` -Method POST -Headers $headers ` -Body $readRequest ` -ContentType "application/json" ``` > 成功返回包含 `test_value` 的响应即验证通过 --- ### ⚠ 关键安全警告 ```mermaid graph LR A[HTTP明文传输] --> B[Token泄露风险] B --> C[中间人攻击] C --> D[数据泄露] ``` > **生产环境必须启用 TLS**!参考 TLS 配置[^4]: > ```bash > etcd --cert-file=server.crt --key-file=server.key --client-cert-auth --trusted-ca-file=ca.crt > ``` --- ### 🛠 进阶配置:设为 Windows 服务 1. **创建启动脚本 `etcd-service.bat`**: ```batch @echo off cd /d C:\etcd etcd.exe ^ --name etcd-win-service ^ --data-dir C:\etcd-data ^ --auth-enabled=true ^ --listen-client-urls http://0.0.0.0:2379 ``` 2. **使用 NSSM 注册服务**: ```powershell # 下载 nssm.exe Invoke-WebRequest -Uri https://nssm.cc/ci/nssm-2.24-101-g897c7ad.zip -OutFile nssm.zip Expand-Archive -Path nssm.zip -DestinationPath C:\nssm # 安装服务 C:\nssm\nssm-2.24-101-g897c7ad\win64\nssm.exe install etcd-service "C:\etcd\etcd-service.bat" Start-Service etcd-service ``` --- ### 📝 故障排查 | 问题现象 | 解决方案 | |---------|---------| | `etcdserver: authentication is not enabled` | 确保启动参数包含 `--auth-enabled=true` | | `invalid auth token` | 检查 Token 是否过期(默认24小时) | | 连接拒绝 | 检查防火墙:`New-NetFirewallRule -DisplayName "ETCD" -Direction Inbound -LocalPort 2379 -Protocol TCP -Action Allow` | | 认证失败 | 确认用户名密码:`etcdctl user list` | --- ### 🌟 自动化脚本 保存为 `Setup-Etcd.ps1`: ```powershell # 自动下载/配置/启动 $etcdVer = "v3.5.0" $etcdUrl = "https://github.com/etcd-io/etcd/releases/download/$etcdVer/etcd-$etcdVer-windows-amd64.zip" Invoke-WebRequest -Uri $etcdUrl -OutFile etcd.zip Expand-Archive -Path etcd.zip -DestinationPath C:\etcd -Force # ...(包含上述所有步骤的自动化逻辑) ``` --- ### ❓ 相关问题 1. 如何在 Windows 11 上为 ETCD 配置 TLS 证书加密通信?[^4] 2. ETCD 开启认证后如何实现基于角色的权限控制(RBAC)? 3. 如何监控 WindowsETCD 服务的运行状态和性能指标? 4. ETCD Token 过期后如何自动续期? 5. 在 Kubernetes 中如何安全使用仅开启认证的 ETCD
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

寸 铁

感谢您的支持!

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值