本文档提供了跨不同版本安全升级 etcd 实例和集群的指南。它解释了版本兼容性注意事项、推荐的升级路径、升级前后的程序以及您需要了解的版本特定详细信息。有关特定的部署配置,请参阅 部署与配置。
etcd 遵循语义版本控制 (主版本.次版本.补丁版本),并提供以下兼容性保证:
生产环境最低推荐的 etcd 版本为:
| 版本 | 最低推荐 |
|---|---|
| 3.4.x | v3.4.22+ |
| 3.5.x | v3.5.6+ |
这些建议反映了已获得重要错误修复和稳定性改进的版本。
警告:为避免生产环境中因高负载导致数据损坏问题,请避免运行 etcd v3.5.0、v3.5.1 和 v3.5.2。
来源:CHANGELOG/CHANGELOG-3.5.md424-439 CHANGELOG/CHANGELOG-3.6.md74-79
在升级 etcd 之前,请完成以下步骤:
备份您的数据
etcdctl snapshot save 命令创建 etcd 数据快照查阅变更日志
检查集群健康状况
etcdctl endpoint health --clusteretcdctl alarm list计划停机时间
来源:CHANGELOG/CHANGELOG-3.5.md401-402 CHANGELOG/CHANGELOG-3.4.md652-654
来源:CHANGELOG/CHANGELOG-3.5.md401-402 CHANGELOG/CHANGELOG-3.4.md385-388
对于 etcd 集群,请使用滚动升级策略以最大程度地减少停机时间。
对于成员数量多于三名的集群,请一次升级一个成员,始终先升级非 leader 成员,最后升级 leader。
来源:CHANGELOG/CHANGELOG-3.5.md590-597 CHANGELOG/CHANGELOG-3.4.md542-546
go.etcd.io/etcd → go.etcd.io/etcd/{api,pkg,raft,client,etcdctl,server,raft,tests}/v3clientv3/snapshot 包已移动到 clientv3/etcdctlgo.etcd.io/client 包已迁移到 go.etcd.io/client/v2MemberList 的行为已更改/v3 端点 (已弃用 /v3beta)--pre-vote 标志现在默认启用来源:CHANGELOG/CHANGELOG-3.5.md438-493
破坏性变更
etcdutl migrate 命令来降级/升级 etcd 数据目录etcdctl defrag --data-diretcdctl snapshot statusetcdctl snapshot restoreGo 版本要求更新至 Go 1.23+。
来源:CHANGELOG/CHANGELOG-3.6.md74-169
降级 etcd 比升级更复杂,应作为最后的手段。从 v3.6.0 开始,etcd 提供了用于降级的数据迁移工具。
etcdutl migrate 命令为旧版本准备数据目录etcdutl migrate --data-dir=/var/lib/etcd --target-version="3.5"
对于 3.6.0 之前的版本,降级可能不受官方支持,您可能需要从备份进行恢复。
来源:CHANGELOG/CHANGELOG-3.6.md78-79 CHANGELOG/CHANGELOG-3.6.md106-107
升级后,验证升级是否成功
检查版本
etcdctl version
验证服务器健康状况
etcdctl endpoint health
对于集群,请检查所有成员
etcdctl endpoint health --cluster
etcdctl endpoint status --cluster
验证没有处于活动状态的告警
etcdctl alarm list
执行简单的读写测试
etcdctl put test-key test-value
etcdctl get test-key
来源:CHANGELOG/CHANGELOG-3.5.md598-605 CHANGELOG/CHANGELOG-3.4.md651-665
版本 3.5.0、3.5.1 和 3.5.2 在高负载下存在已知的版本数据损坏问题。如果 etcd 进程被终止,已提交的事务可能不会反映在所有成员上。
使用以下指标监控升级过程
| 指标 | 描述 |
|---|---|
etcd_server_version | 当前服务器版本 |
etcd_cluster_version | 当前集群版本 |
etcd_server_is_leader | 指示该成员是否是 leader |
etcd_server_health_failures | 健康检查失败次数 |
这些指标可以帮助识别升级期间或升级后出现的问题。
来源:CHANGELOG/CHANGELOG-3.5.md512-522 CHANGELOG/CHANGELOG-3.4.md669-673
| 问题 | 解决方案 |
|---|---|
| 成员升级后无法重新加入集群 | 检查日志中的错误,确保版本兼容性,验证网络连接 |
| 成员之间版本不匹配 | 完成所有成员的滚动升级过程 |
| 升级后性能下降 | 检查是否有新的推荐配置选项,根据新版本调整参数 |
| 升级后认证失败 | 检查认证机制的变化,查看令牌 TTL 设置 |
来源:CHANGELOG/CHANGELOG-3.5.md590-604 CHANGELOG/CHANGELOG-3.4.md334-337