阿里巴巴云原生 etcd 服务集群管控优化实践

头图.png

做者 | 陈星宇(宇慕) 来源 | 阿里巴巴云原生公众号docker

背景

Kubernetes 采用 etcd 存储其内部核心元数据信息。通过这些年的发展,尤为是伴随着这两年云原生的快速发展,Kubernetes被人们普遍认同并大规模被使用。伴随阿里内部容器平台 ASI 及公有云 ACK 集群数飞速增加,底层存储 etcd 集群得到井喷式地增加,etcd 集群数从原来的十几个发展到了目前达到几千个,它们分布在世界各地,为上层 Kubernetes 集群以及其余产品服务,服务用户超万个。shell

这些年,阿里云原生 etcd 服务发生了翻天覆地的变化,这篇文章主要分享一下 etcd 服务在面对业务量大规模增加下遇到的问题以及咱们是如何解决的,但愿对读者了解 etcd 的使用和管控运维提供经验分享。安全

具体将分三个部分进行介绍:架构

  • etcd 集群成本优化,利用率提高
  • etcd 管控运维效率提高
  • etcd 内核架构升级

etcd 集群运行成本优化、利用率提高

近些年,etcd 集群数井喷式增加。它的运行形态经历了从 1.0 到 2.0 到 3.0 的变化,具体以下图:运维

1.jpg

1.0 物理机时代

在一开始,咱们管控的 etcd 集群数比较少,咱们在宿主机上使用 docker 直接运行 etcd 容器。即图中的 1.0 模式。性能

2.0 云上时代

1.0 模式运行 etcd 很是简单,但也存在使用物理机运行软件低效等常见问题,随着阿里巴巴全面上云的步伐,etcd 也全面将运行环境切到了云上 ecs,存储也换成了云盘 ssd 或 essd。大数据

全面上云优点明显,利用阿里云底层 Iaas 的 ecs 弹性和存储云盘,etcd 集群可快速完成垂直水平伸缩,故障迁移也比 1.0 时容易的多。以集群升配操做为例,整个升级时间从最初的半小时下降到如今的 10 分钟,能够兼顾业务使用峰值和平常普通压力,稳定承载阿里内部双十一业务高峰以及外部多个公有云客户春节大促活动。优化

2.jpg

3.0 大规模云上时代

随着 etcd 集群数大量增加,运行这些集群须要的 ecs 与云盘成本愈来愈高,etcd 已成为容器服务花费资金最多的部分之一,etcd 运行的成本成为咱们必须面对并解决优化的问题。阿里云

2.0 模式下使用独占 ecs 和云盘咱们发现 etcd 资源利用率比较低,存在较多的资源浪费,咱们将 2.0 模式进行了进一步升级:将集群进行混部,降级运行成本。但混部以后咱们遇到计算资源争抢和集群稳定性等风险,时常发生 etcd 集群切主,致使上层依赖 etcd 软件功能异常,例如 Kubernetes controller 切主影响用户服务。url

针对这些问题,咱们首先将不一样的 etcd 集群根据不一样的服务质量和 SLO 拆分红多种类型,相似 Kubernetes 中 Best effort、Burstable 和 Guaranteed 3 种类型,把不一样类型的集群放在不一样的资源池中运行管理。混合部署因为采用了高度打散, 随机的模式, 再加上咱们的集群用户不少,对 etcd 的热点请求被分割的很散,没有汇集,稳定性问题例如集群切主次数大量下降。在保证稳定性的前提下提高了资源利用率的目的,成本降低明显。

管控运维效率提高

早期咱们运维管理 etcd 集群的方式比较简单,采用 shell 脚本基本能够涵盖 etcd 集群生命周期全过程,例如集群建立、删除,迁移都利用脚本完成。之前的这种小做坊模式随着集群数的井喷式增加愈来愈不适用,咱们遇到 etcd 集群生产速度慢,适配底层 IaaS 变化难度大等问题,运行时集群管理效率也很低。

针对这些运维管控效率低的问题,咱们拥抱云原生生态,用 Kubernetes 做为运行 etcd 的底座,并基于开源的 etcd-operator,通过几年的研发,适配阿里云底层 IaaS,修改了不少开源的 bug, 将 etcd 管控运维动做标准化,功能覆盖 etcd 管控全生命周期,推出了新的 etcd 运维管控后台 alpha, 咱们利用 alpha 统一了阿里巴巴内部的 etcd 集群及公有云 ACK 上的 etcd 集群管控,极大地提升了咱们管控运维 etcd 集群的效率。目前咱们投入 0.5 人力就能够管理近万集群,人效比显著。下图展现了他的控制界面。

3.jpg

下面咱们详细介绍一下 alpha 的具体功能,首先咱们看一下下面这幅图,它描绘了一个 etcd 集群从建立-》运行-》故障-》再运行-》中止-》销毁的典型生命周期大图。

4.jpg

alpha 作的事情就是覆盖图上的方方面面,具体分为如下两部分:

1. etcd 集群生命周期管理

  • etcd 集群建立,销毁,中止,升级,故障恢复等。
  • etcd 集群状态监控,包括集群健康状态、member 健康状态,访问量,存储数据量等。
  • etcd 异常诊断、预案、黑盒探测,配置巡检等。

2. etcd 数据管理

etcd 数据管理包括数据迁移、备份管理以及恢复,脏数据清理,热点数据识别等。这块是 alpha 的特点,咱们发现开源或其余产品这方面作得工做不多。咱们作的功能具体以下。

1)etcd 数据备份及恢复

两种方式以下:

  • 传统模式冷备:支持从 etcdserver 将 snapshot 数据备份至阿里云 OSS 或本地,故障时能够根据这个 snapshot 备份文件恢复。

  • raft learner 热备:对于新版本的使用了 raft learner 特性的 etcd 集群,咱们可使用 learner 做为热备节点,当故障发生时,咱们强制将 learner 转换为正常节点,并将客户端访问切到这个新节点上,相比于传统方式故障恢复时间更快,而且 learner 能够部署在不一样的地域,实现异地多活的能力。

2)脏数据清理

咱们能够根据指定 etcd key 前缀删除垃圾 kv 的能力,下降 etcd server 存储压力。

3)热点数据识别

咱们开发了按照 etcd key 前缀进行聚合分析热点 key 的能力,另外还能够分析不一样 key 前缀的 db 存储使用量。利用这个能力,咱们屡次帮助客户排查分析 etcd 热点 key,解决 etcd 滥用问题,这个在大规模 etcd 集群上是一个必备的能力。

4)数据迁移能力,两种方式

  • snapshot 方式:经过 etcdsnapshot 备份,再恢复进行迁移方式。
  • raft learner 模式:咱们使用 raft learner 特性能够快速从原集群分裂衍生出新的集群实现集群迁移。

5)数据水平拆分

当集群数据存储数据量超大时,咱们支持使用水平拆分将不一样客户数据拆分存储到不一样的 etcd 集群中。咱们在阿里内部 ASI 集群就用了这个功能,使其支持超万规模节点。

总结一下,咱们采用 Kubernetes 做为 etcd 集群的运行底座,基于开源 operator 改良适配研发了新的 etcd 管控软件 alpha,覆盖 etcd 全生命周期管控工做,一套软件管理全部 etcd 集群,显著提高了 etcd 管控效率。

etcd 内核架构升级更新

etcd 是云原生社区中很是重要的一款软件,几年的演进发展,解决了不少 bug, 提高了内核的性能和存储容量。但开源软件就像是一个毛坯房,真正在生产环境使用问题仍是有的,阿里内部有更大数据存储规模和性能方面的要求,另外 etcd 自身多租户共享使用 QoS 控制能力很弱,不适用于咱们的使用场景。

咱们早期使用开源的 etcd 3.2/3.3 版本, 针对一些咱们的使用场景需求,后续咱们加入了一些稳定性和安全加强,造成了如今咱们使用阿里内部版本,以下展现了重要的几个不一样:

1. 自适应历史数据清理 compact 技术

etcd 会存储用户数据的历史值,可是它不能长久的存储全部历史值,不然存储空间会不足。所以 etcd 内部会利用 Compact 机制周期性地清理历史值数据。当咱们的集群超大,数据量超大时,每次清理对运行时性能影响很大,能够类比一次 full gc。本技术能够根据业务请求量调整 Compact 时机,避开业务使用高峰期, 减小干扰。

2. 基于 raft learner 的只读节点水平扩展能力

raft learner 是 raft 协议中的一种特殊的角色,他不参与 leader 选举, 可是能够从 leader 处得到集群中最新的数据,所以他能够做为集群的只读节点进行水平扩展,提高集群处理读请求的能力。

3. 基于 raft learner 的热备节点

除了上面说的 raft learner 能够做为只读节点,咱们也能够将其使能用于做为集群的热备节点,目前咱们普遍使用热备节点作异地双活,保证集群高可用。

4. etcd 集群 QoS 能力

公有云上,咱们有大量的用户采用共享 etcd 集群的方式使用 etcd, 在这种多租户使用场景下咱们即须要保证租户公平使用 etcd 存储资源,也要保证稳定性即不会由于某一租户的滥用将集群总体搞挂,影响其余租户使用。为此咱们自研了相应的QoS限流功能,能够实现不一样租户运行时读写数据流量限制以及静态存储数据空间限制。

总结

阿里云采用 etcd 服务化作容器服务的核心数据存储系统已经有了将近 4 年的历史,咱们积累了大量的运维管控 etcd 的经验和使用 etcd 的最佳实践,这篇文章分享了咱们在降本提效,内核优化方面的一些实践。

近年来随着云原生的浪潮,etcd 也得到史无前例地急速发展,etcd 去年已从 cncf 正式毕业。阿里云为 etcd 社区贡献了重要的 feature 和 bug fix,积极参与社区,汲取社区养分,反哺贡献社区,能够预见将来 etcd 集群还会继续保持高速的增加,咱们将继续在降本增效,保证稳定性和可靠性上持续投入努力。咱们很是欢迎有兴趣的同窗加入咱们,联系 xingyu.chenxingyu@alibaba-inc.com。

KubeMeet 杭州站开放报名!

5.png

4 月 17 日,云原生基金会 CNCF 和阿里巴巴联合主办的「KubeMeet 开发者沙龙·云原生应用管理专场」来到杭州啦!这里有 Kubernetes 生态开发者都在关注的开源项目,以及阿里巴巴、携程、第四范式的一线云原生落地实践。点击此处赶忙报名吧

相关文章
相关标签/搜索