共计 3808 个字符,预计需要花费 10 分钟才能阅读完成。
简介:这些年,阿里云原生 etcd 服务产生了天翻地覆的变动,这篇文章次要分享一下 etcd 服务在面对业务量大规模增长下遇到的问题以及咱们是如何解决的,心愿对读者理解 etcd 的应用和管控运维提供教训分享。
作者 | 陈星宇(宇慕)
起源 | 阿里巴巴云原生公众号
背景
Kubernetes 采纳 etcd 存储其外部外围元数据信息。通过这些年的倒退,尤其是随同着这两年云原生的疾速倒退,Kubernetes 被人们宽泛认同并大规模被应用。随同阿里外部容器平台 ASI 及私有云 ACK 集群数飞速增长,底层存储 etcd 集群取得井喷式地增长,etcd 集群数从原来的十几个倒退到了目前达到几千个,它们散布在世界各地,为下层 Kubernetes 集群以及其余产品服务,服务用户超万个。
这些年,阿里云原生 etcd 服务产生了天翻地覆的变动,这篇文章次要分享一下 etcd 服务在面对业务量大规模增长下遇到的问题以及咱们是如何解决的,心愿对读者理解 etcd 的应用和管控运维提供教训分享。
具体将分三个局部进行介绍:
etcd 集群老本优化,利用率晋升
etcd 管控运维效率晋升
etcd 内核架构降级
etcd 集群运行老本优化、利用率晋升
近些年,etcd 集群数井喷式增长。它的运行状态经验了从 1.0 到 2.0 到 3.0 的变动,具体如下图:
1.0 物理机时代
在一开始,咱们管控的 etcd 集群数比拟少,咱们在宿主机上应用 docker 间接运行 etcd 容器。即图中的 1.0 模式。
2.0 云上时代
1.0 模式运行 etcd 非常简单,但也存在应用物理机运行软件低效等常见问题,随着阿里巴巴全面上云的步调,etcd 也全面将运行环境切到了云上 ecs,存储也换成了云盘 ssd 或 essd。
全面上云劣势显著,利用阿里云底层 Iaas 的 ecs 弹性和存储云盘,etcd 集群可疾速实现垂直程度伸缩,故障迁徙也比 1.0 时容易的多。以集群升配操作为例,整个降级工夫从最后的半小时升高到当初的 10 分钟,能够兼顾业务应用峰值和日常一般压力,稳固承载阿里外部双十一业务顶峰以及内部多个私有云客户春节大促流动。
3.0 大规模云上时代
随着 etcd 集群数大量增长,运行这些集群须要的 ecs 与云盘老本越来越高,etcd 已成为容器服务破费资金最多的局部之一,etcd 运行的老本成为咱们必须面对并解决优化的问题。
2.0 模式下应用独占 ecs 和云盘咱们发现 etcd 资源利用率比拟低,存在较多的资源节约,咱们将 2.0 模式进行了进一步降级:将集群进行混部,降级运行老本。但混部之后咱们遇到计算资源争抢和集群稳定性等危险,时常产生 etcd 集群切主,导致下层依赖 etcd 软件性能异样,例如 Kubernetes controller 切主影响用户服务。
针对这些问题,咱们首先将不同的 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 人力就能够治理近万集群,人效比显著。下图展现了他的管制界面。
上面咱们具体介绍一下 alpha 的具体性能,首先咱们看一下上面这幅图,它描述了一个 etcd 集群从创立 -》运行 -》故障 -》再运行 -》进行 -》销毁的典型生命周期大图。
alpha 做的事件就是笼罩图上的方方面面,具体分为以下两局部:
- etcd 集群生命周期治理
etcd 集群创立,销毁,进行,降级,故障复原等。
etcd 集群状态监控,包含集群衰弱状态、member 衰弱状态,访问量,存储数据量等。
etcd 异样诊断、预案、黑盒探测,配置巡检等。 - 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 版本, 针对一些咱们的应用场景需要,后续咱们退出了一些稳定性和平安加强,造成了当初咱们应用阿里外部版本,如下展现了重要的几个不同:
- 自适应历史数据清理 compact 技术
etcd 会存储用户数据的历史值,然而它不能短暂的存储所有历史值,否则存储空间会有余。因而 etcd 外部会利用 Compact 机制周期性地清理历史值数据。当咱们的集群超大,数据量超大时,每次清理对运行时性能影响很大,能够类比一次 full gc。本技术能够依据业务申请量调整 Compact 机会,避开业务应用高峰期, 缩小烦扰。 - 基于 raft learner 的只读节点程度扩大能力
raft learner 是 raft 协定中的一种非凡的角色,他不参加 leader 选举,然而能够从 leader 处取得集群中最新的数据,因而他能够作为集群的只读节点进行程度扩大,晋升集群解决读申请的能力。 - 基于 raft learner 的热备节点
除了下面说的 raft learner 能够作为只读节点,咱们也能够将其使能用于作为集群的热备节点,目前咱们宽泛应用热备节点做异地双活,保障集群高可用。 - etcd 集群 QoS 能力
私有云上,咱们有大量的用户采纳共享 etcd 集群的形式应用 etcd, 在这种多租户应用场景下咱们即须要保障租户偏心应用 etcd 存储资源,也要保障稳定性即不会因为某一租户的滥用将集群整体搞挂,影响其余租户应用。为此咱们自研了相应的 QoS 限流性能,能够实现不同租户运行时读写数据流量限度以及动态存储数据空间限度。
总结
阿里云采纳 etcd 服务化做容器服务的外围数据存储系统曾经有了将近 4 年的历史,咱们积攒了大量的运维管控 etcd 的教训和应用 etcd 的最佳实际,这篇文章分享了咱们在降本提效,内核优化方面的一些实际。
近年来随着云原生的浪潮,etcd 也取得前所未有地急速倒退,etcd 去年已从 cncf 正式毕业。阿里云为 etcd 社区奉献了重要的 feature 和 bug fix,积极参与社区,吸取社区养分,反哺奉献社区,能够预感将来 etcd 集群还会持续保持高速的增长,咱们将持续在降本增效,保障稳定性和可靠性上继续投入致力。
原文链接
本文为阿里云原创内容,未经容许不得转载。