资源编排服务 ROS(Resource Orchestration Service)支持在已有专有网络 VPC 的基础上,通过创建资源栈部署 etcd 集群版,自动完成多台 ECS 实例的创建与 etcd 集群的安装组网。
方案概述
本方案使用阿里云资源编排服务(ROS)的公共模板,在已有VPC网络基础上一键创建多台ECS实例并自动安装etcd集群,快速搭建高可用分布式键值存储服务。适用于Kubernetes元数据存储、微服务注册发现、分布式配置管理等需要高可用保障的生产级场景。
什么是 etcd 集群
etcd 是一个开源的分布式键值对存储系统,通过 Raft 共识算法实现数据的强一致性。etcd 集群由多个节点组成,通过选举产生 Leader 节点:
节点角色 | 说明 |
Leader | 由 Raft 算法选举产生,负责处理所有写请求并将数据同步到 Follower 节点。 |
Follower | 接收 Leader 同步的数据,处理读请求。当 Leader 故障时,Follower 自动发起选举产生新的 Leader。 |
集群版与单机版的区别
对比维度 | 单机版 | 集群版(本方案) |
节点数量 | 1 台 ECS 实例。 | 1 台 Master 节点 + 多台成员节点,节点总数为 3~10 台(由“集群主机数”参数控制)。 |
可用性 | 单点故障即服务中断。 | 存活节点数超过半数即可保障服务,例如 3 节点集群可容忍 1 台故障,5 节点集群可容忍 2 台故障。 |
数据安全 | 单副本,磁盘故障时数据丢失。 | 多副本自动同步,任一节点故障数据不丢失。 |
弹性能力 | 无。 | 成员节点由弹性伸缩组管理,可动态扩缩。 |
适用场景 | 开发测试、学习验证。 | 生产级服务发现、Kubernetes 集群、配置中心。 |
基于已有 VPC 部署
本模板要求使用已有的专有网络、交换机和安全组,不会新建网络资源。这种设计适用于以下场景:
已有标准化网络环境,需要向现有专有网络添加 etcd 集群。
多个项目共享一个专有网络,避免重复创建网络资源。
创建的资源
本模板创建的资源如下:
序号 | 资源名称 | ROS 资源类型 | 数量 | 用途说明 |
1 | ECS 实例组 |
| 1 | etcd Master 节点(初始 Leader),绑定公网 IP。 |
2 | 弹性伸缩组 |
| 1 | 管理 etcd 成员节点,根据需求自动增减实例。 |
3 | RAM 角色 |
| 1 | 颁发短时有效的 STS 访问令牌,安全授权弹性伸缩操作。 |
部署完成后获得的结果
模板成功执行后,您将获得:
Master 实例已分配公网 IP,可通过远程连接登录管理。
成员节点默认为 2 台,由弹性伸缩组管理。
所有节点已安装 etcd 并自动完成集群组网配置,Raft 共识协议自动完成 Leader 选举。
资源栈输出中提供
EtcdMasterServerConnectionAddress(etcd Master 连接地址)。
架构图
客户端(etcdctl / 应用程序)
↓
┌───────────── 已有专有网络 VPC(交换机、安全组均为存量资源) ─────────────┐
│ │
│ ┌─────────────────────────┐ │
│ │ etcd 集群(Raft 协议) │ │
│ │ │ │
│ │ Master ECS(初始 Leader)│ ← 公网 IP │
│ │ etcd + 数据副本 │ │
│ │ │ │
│ │ 成员节点 ECS × N │ ← 弹性伸缩组管理 │
│ │ Follower-1 + 数据副本 │ │
│ │ Follower-2 + 数据副本 │ │
│ │ ... │ │
│ └─────────────────────────┘ │
└────────────────────────────────────────────────────────────────────────┘
数据通过 Raft 协议自动同步,任一节点可升为新 Leader前提条件
在使用本模板前,请确认已满足以下条件:
操作步骤
部署参数
本模板复用已有专有网络的网络资源,相关约束参见“基于已有 VPC 部署”小节。下表参数需在部署时按实际环境配置;创建资源栈时还需填写资源栈名称。
参数 | 类型 | 说明 | 示例 |
交换机可用区 | String | 专有网络下的交换机可用区 ID。 | 华北 1 可用区 C |
现有 VPC 的实例 ID | String | VPC 实例 ID。关于如何创建和查询 VPC 实例,请参见专有网络与交换机。 | vpc-bp1m6fww66xbntjyc**** |
网络交换机 ID | String | 专有网络下的交换机 ID。关于如何创建和查询交换机,请参见专有网络与交换机。 | vsw-bp183p93qs667muql**** |
业务安全组 ID | String | ECS 安全组 ID,请参见使用安全组。 | sg-bp15ed6xe1yxeycg7o**** |
实例规格 | String | ECS 实例规格(所有节点共用)。etcd 对 CPU 和内存要求不高,1 核 2 GB 即可满足基本需求。更多信息,请参见实例规格族。 | ecs.c5.large |
镜像 | String | ECS 实例的操作系统镜像 ID。 | centos_7_04_64_20G_alibase_201701015.vhd |
系统盘类型 | String | 取值:
更多信息,请参见块存储概述。 | cloud_efficiency |
系统盘空间 | Number | 系统盘大小。取值范围:40~500。单位:GB。 | 40 |
集群主机数 | Number | etcd 集群节点总数量,包含 Master 节点与成员节点。取值范围:3~10。推荐配置为奇数(3 或 5)。 | 3 |
实例密码 | String | ECS 实例登录密码。长度为 8~30 个字符,需同时包含大小写字母、数字和特殊字符。 | Test_12**** |
创建资源栈
本方案提供两种部署方式:方式一在 ROS 控制台基于公共模板创建资源栈(推荐);方式二使用 IaC Code 生成并部署等价模板。根据实际情况任选其一。
方式一:通过 ROS 公共模板部署(推荐)
-
登录资源编排控制台。
在左侧导航栏,选择模板 > 公共模板 > 解决方案模板。
在搜索框输入 etcd 进行搜索,找到模板 Etcd 集群版(已有VPC)。
单击创建资源栈。
在配置参数页面,输入资源栈名称,并按照说明设置部署参数。
单击下一步:检查并确认,确认配置无误后单击创建。
在左侧导航栏,选择,在资源栈列表页面单击目标资源栈ID,在资源栈信息页签查看资源栈状态,等待状态变为
CREATE_COMPLETE。单击输出页签,记录
EtcdMasterServerConnectionAddress。
方式二:通过 ROS IaC Code 部署
IaC Code 是面向云基础设施的 AI 基础设施即代码助手,可根据自然语言描述生成 ROS 模板并部署,使用方式参见IaC Code快速入门。
# Prompt
帮我在已有VPC中部署etcd高可用集群。
要求:
1. 使用已有的VPC、VSwitch和安全组(不新建网络资源)。
2. 创建1台Master ECS节点,分配公网IP。
3. 创建弹性伸缩组管理成员节点,初始2台成员。
4. 所有节点使用CentOS 7镜像。
5. 通过UserData脚本自动安装etcd。
6. 各节点自动完成集群组网配置(initial-cluster参数)。
7. 安全组开放入方向2379端口(客户端)和2380端口(对等通信)。
8. 资源栈输出EtcdMasterServerConnectionAddress。部署后操作
验证 etcd 集群
连接 Master 节点后,使用 etcdctl 命令验证集群状态:
# 查看集群成员列表(确认所有节点已加入)
etcdctl member list
# 查看集群健康状态
etcdctl endpoint health --cluster常见问题
部署失败,报错“The specified InstanceType is not available”
原因:所选 ECS 实例规格在指定可用区没有库存。
解决方案:
更换交换机所在的可用区后重新部署。
在云服务器ECS定价确认目标可用区的可用规格。
etcd对CPU、内存要求不高,1核2GB规格即可满足基本需求
部署成功但 etcdctl 命令报错连接失败
排查步骤:
检查 etcd 进程:
ps -ef | grep etcd systemctl status etcd检查端口监听:
netstat -tlnp | grep 2379 # 客户端端口 netstat -tlnp | grep 2380 # 对等通信端口确认连接地址:使用资源栈输出中的
EtcdMasterServerConnectionAddress。查看 etcd 日志:执行
journalctl -u etcd -n 50。
成员节点未加入集群
排查步骤:
更多资源部署问题,参见常见问题合集。