安装etcd集群版

更新时间:
复制 MD 格式

资源编排服务 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 实例组

ALIYUN::ECS::InstanceGroup

1

etcd Master 节点(初始 Leader),绑定公网 IP。

2

弹性伸缩组

ALIYUN::ESS::ScalingGroup

1

管理 etcd 成员节点,根据需求自动增减实例。

3

RAM 角色

ALIYUN::RAM::Role

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

前提条件

在使用本模板前,请确认已满足以下条件:

  • 账号权限:阿里云账号具有 ECS、VPC、弹性伸缩 ESS、访问控制 RAM 产品的创建权限。

  • 已有网络资源:已提前创建好专有网络、交换机和安全组。关于如何创建,请参见专有网络与交换机。

  • 安全组端口开放:请提前在安全组中放开2379端口(客户端)和2380端口(对等通信)。关于规则的创建,请参见使用安全组。

操作步骤

部署参数

本模板复用已有专有网络的网络资源,相关约束参见“基于已有 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:高效云盘

  • cloud_ssd:SSD 云盘

  • cloud_essd:ESSD 云盘

  • cloud:普通云盘

  • ephemeral_ssd:本地 SSD 盘

更多信息,请参见块存储概述。

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 公共模板部署(推荐)

  1. 登录资源编排控制台。

  2. 在左侧导航栏,选择模板 > 公共模板 > 解决方案模板。

  3. 在搜索框输入 etcd 进行搜索,找到模板 Etcd 集群版(已有VPC)。

  4. 单击创建资源栈。

  5. 在配置参数页面,输入资源栈名称,并按照说明设置部署参数。

  6. 单击下一步:检查并确认,确认配置无误后单击创建。

  7. 在左侧导航栏,选择资源栈,在资源栈列表页面单击目标资源栈ID,在资源栈信息页签查看资源栈状态,等待状态变为CREATE_COMPLETE。

  8. 单击输出页签,记录 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 命令报错连接失败

排查步骤:

  1. 检查 etcd 进程:

    ps -ef | grep etcd
    systemctl status etcd
  2. 检查端口监听:

    netstat -tlnp | grep 2379    # 客户端端口
    netstat -tlnp | grep 2380    # 对等通信端口
  3. 确认连接地址:使用资源栈输出中的 EtcdMasterServerConnectionAddress。

  4. 查看 etcd 日志:执行 journalctl -u etcd -n 50。

成员节点未加入集群

排查步骤:

  1. 连接Master 节点执行 etcdctl member list 查看已注册成员。

  2. 连接成员节点,检查 etcd 进程是否运行。

  3. 检查成员节点与 Master 节点之间的网络连通性(2380 端口)。

  4. 查看成员节点 etcd 日志中是否有连接错误。

更多资源部署问题,参见常见问题合集。

相关文档