
etcd 生产环境采用全景从 ADOPTERS.md 生产用户清单看 etcd 的集群规模、备份策略与源码佐证【免费下载链接】etcdDistributed reliable key-value store for the most critical data of a distributed system项目地址: https://gitcode.com/GitHub_Trending/et/etcdAUTOPTERS 记录了 etcd 在各家生产环境中的真实落地情况是了解这个分布式键值存储被谁在用、怎么用的第一手资料。本文以该清单为骨架完整继承其中每个生产用户的部署细节应用类型、集群规模、数据量级、运行环境、备份策略并结合当前仓库源码解释这些生产参数背后对应的 etcd 配置项与功能实现。读完后你可以掌握生产环境选择 etcd 集群规模与数据量级的经验分布、可重建数据不备份 vs 定期快照备份两种运维模式的取舍以及 etcd 在服务发现、分布式锁、嵌入式高可用等典型场景中的源码入口。这份文档的定位生产用户与使用案例清单ADOPTERS.md 的开头明确了它的作用该文档跟踪 etcd 在生产环境中的用户和使用案例。通过建立生产用例列表我们希望组建一个由生产使用经验覆盖各类应用、运维环境和集群规模的顾问社区。etcd 开发团队可能会定期联系确认 etcd 在一线的运行情况并更新此列表。也就是说这既是一份采用者名单也是 etcd 团队获取一线反馈的渠道。README.md 中同样引用了它etcd is used in production by many companies, and the development team stands behind it in critical deployment scenarios——即 etcd 被大量公司在生产中使用开发团队在关键部署场景下为其可靠性背书且常与 Kubernetes、locksmith、vulcand、Doorman 等应用搭配使用。最大的元用户所有 Kubernetes 集群清单中单列了All Kubernetes Users一节应用Kubernetes环境AWS、OpenStack、Azure、Google Cloud、Huawei Cloud、Bare Metal 等文档特别注明这是一个元用户meta user欢迎补充具体的 Kubernetes 集群案例。所有 Kubernetes 集群都将 etcd 作为其主数据存储因此 etcd 的用户群天然覆盖所有运行 K8s 的公司——文档列举了 NianticPokemon GO 背后、Box、CoreOSTectonic、Ticketmaster、Salesforce 等。这也是清单中Kubernetes反复出现为各家公司应用字段的原因Branch.io、Salesforce、Hyper.sh 等条目。生产用户全量清单以下表格完整继承了 ADOPTERS.md 中各条目的关键字段应用、上线时间、集群规模、数据量级、运行环境、备份策略按清单原始顺序整理用户应用/用途上线时间集群规模数据量级运行环境备份策略Kubernetes元用户K8s 主数据存储—因集群而异因集群而异AWS、OpenStack、Azure、GCP、Huawei Cloud、Bare Metal 等因集群而异discovery.etcd.io自动集群引导bootstrap服务2014 年 2 月5 成员 5 个 discovery proxy数百 MBAWS定期异步备份到 S3OpenTable内部服务发现与集群配置管理2014 年 5 月6 个独立集群每集群 3 成员约 50 节点读写数十 MBAWS、VMware无数据必要时可全部重建cycoresys.com多用途微服务、VM、数据库、存储集群2014 年 7 月3 成员 n 个 proxy数百 KBBare MetalCoreOS 机器每台运行 peer 或 proxy定期同步到 Ceph RadosGW 与 DigitalOcean VMRadius Intelligence内部工具、Kubernetes 集群、可引导系统配置2015 年 6 月5 成员与 3 成员两个集群十余节点读写数百 KBAWS、CoreOS、Kubernetes无数据可重建VonageKubernetes、Vault 后端、微服务系统配置、调度、锁规划中服务发现2015 年 8 月2 个数据中心的 2 个 5 成员集群与微服务 1:1 的本地 proxySSL SRV 查找KB 级VMware、AWS每日在 VM 上打快照升级前必做PDTiDB内嵌 etcdembed2016 年 3 月3 或 5 成员MB 级Bare Metal、AWS 等无Huawei覆盖网络Canal系统配置2016 年 6 月每集群 3 成员KB 级华为云无数据可重建Qiniu Cloud微服务系统配置、分布式锁2016 年 1 月3 成员 × 若干集群KB 级Bare Metal无数据可重建QingCloudappcenter 服务发现metad 后端2016 年 12 月每用户 1 个 3 成员集群KB 级青云 IaaS无数据可重建Yandex服务系统配置、服务发现2016 年 3 月3 个集群每集群 5 成员数 GBBare Metal无Tencent Games服务发现/Kubernetes 等的元数据与配置2015 年 1 月3 成员 × 数十个集群数十 MBBare Metal定期同步到备份服务器Hyper.shKubernetes、分布式锁等2016 年 4 月1 个 3 成员集群数十 MBBare Metal无数据可重建Meitu服务系统配置、服务发现、测试环境 Kubernetes2015 年 10 月1 个 3 成员集群MB 级Bare Metal无数据可重建Grab服务系统配置、服务发现2016 年 6 月1 个 7 成员集群MB 级AWS无数据可重建DaoCloud.io容器管理Docker Swarm 元数据2015 年 9 月1000 部署每个部署含 3 节点集群数百 MBBare Metal 与虚拟机无数据可重建Branch.ioKubernetes核心微服务平台2016 年 4 月多个集群多种规模数百 MBAWS、KubernetesEBS 卷备份Baidu WaimaiSkyDNS、Kubernetes、UDC、CMDB 等分布式系统2016 年 4 月3 个集群每集群 5 成员数 GBCentOS 6.5备份脚本Salesforce.comKubernetes2017 年 1 月多个 3 成员集群数百 MBBare Metal无数据可重建Hosted Graphite服务发现、锁、临时应用数据2017 年 1 月2 个 7 成员集群MB 级Bare Metal无数据视为临时数据TranswarpTranswarp Data Cloud / OS / Data Hub / Sophon2016 年 1 月多个集群多种规模MB 级Bare Metal、容器备份脚本Cyberfusion集群配置管理2023 年 2 月单集群 3 节点KB 级Debian on VMs定期etcdctl snapshot save cron 轮转清单中值得单独点出的两个案例discovery.etcd.io文档称其为我们所知连续运行时间最长的 etcd 支撑服务自 2014 年 2 月起支撑 etcd 的自动集群引导bootstrap5 成员 5 个 discovery proxy数据数百 MB定期异步备份到 S3。PDTiDB 的 Placement Driver作为 TiDB 集群的中央控制器保存集群元信息、调度数据、为分布式事务分配全局唯一时间戳它选择内嵌embedetcd来获得高可用与自动故障转移能力。从生产清单看典型部署模式集群规模3 或 5 成员是绝对主流清单中最常见的配置是3 成员与5 成员如 Yandex、Baidu Waimai 均为3 个集群 × 5 成员少数用 7 成员Grab、Hosted Graphite跨可用区部署如 Vonage 的2 个数据中心各 1 个 5 成员集群。这与 Raft 一致性协议对成员数的要求一致3 成员容忍 1 台故障5 成员容忍 2 台故障。这些成员数在生产中通过--initial-cluster启动参数声明。从源码看server/embed/config.go 定义了引导期集群配置fs.StringVar(cfg.InitialCluster, initial-cluster, cfg.InitialCluster, Initial cluster configuration for bootstrapping.) fs.StringVar(cfg.InitialClusterToken, initial-cluster-token, cfg.InitialClusterToken, Initial cluster token for the etcd cluster during bootstrap.)即每个成员启动时必须通过--initial-cluster提供完整成员列表--initial-cluster-token区分不同集群的引导上下文--name、--initial-cluster、--discovery-endpoints、--discovery-srv四者必须择一见 server/embed/config.go 的校验提示。集群实际启动流程入口在 server/embed/etcd.go 的StartEtcd函数。数据量级绝大多数在 KBMB个位数 GB清单中数据量级从KB 级Vonage、Qiniu Cloud、Huawei、Yandex 配置类用途到数百 MBdiscovery.etcd.io、Branch.io、DaoCloud不等只有 Yandex 和 Baidu Waimai 达到数 GB。这提示一个生产经验etcd 的定位是存最关键的数据而非大容量数据库。这一点与仓库源码中的配额机制对应etcd 后端数据库有大小上限server/embed/config.go 中的--quota-backend-bytes参数说明Sets the maximum size (in bytes) that the etcd backend database may consume. Exceeding this triggers an alarm and puts etcd in read-only mode. Set to 0 to use the default 2GiB limit.即默认 2 GiB 上限超限会触发告警并使 etcd 进入只读模式。清单里没有任何用户把 etcd 用作 TB 级存储与该设计边界一致。环境Bare Metal 与云上环境并存20 余个条目中Bare Metal出现频率最高cycoresys、Tencent Games、Yandex、Salesforce 等其次是AWSdiscovery.etcd.io、OpenTable、Grab、Branch.io另有 VMware、容器、各家 IaaS。这说明 etcd 对运行环境没有强绑定清单中既是最小化裸金属部署也有多数据中心部署。备份策略两种泾渭分明的哲学清单在Backups字段上呈现出清晰的二元分化无备份数据可重建派占大多数OpenTable、Radius Intelligence、Qiniu、Tencent部分等直接注明 all data can be recreated if necessary。这类场景服务发现、配置的数据本质是易失状态ephemeral state服务重启即重新注册配置可从版本库重新下发因此集群损坏时整体重建成本低于维护备份体系。定期快照派discovery.etcd.io异步备份到 S3、Vonage每日 VM 快照升级前必做、Branch.ioEBS 卷备份、Transwarp/Baidu Waimai备份脚本、Cyberfusioncron 轮转etcdctl snapshot save——数据无法轻易重建或承载了需要持久化的状态如 Kubernetes 集群对象。第二派的工具在仓库中开箱即用etcdctl/ctlv3/command/snapshot_command.go 中内建的snapshot save用法示例覆盖了各种典型备份姿势# 保存快照到指定文件 etcdctl snapshot save /backup/etcd-snapshot.db # 从指定地址获取并保存 etcdctl snapshot save --endpoints127.0.0.1:3000 /backup/etcd-snapshot.db # 带 TLS 证书 etcdctl --endpointshttps://127.0.0.1:2379 --cacert/etc/etcd/ca.crt --cert/etc/etcd/etcd.crt --key/etc/etcd/etcd.key snapshot save /backup/etcd-snapshot.db # 带认证 etcdctl --userroot --passwordpassword123 snapshot save /backup/etcd-snapshot.db # 带超时的安全备份命名Cyberfusion 的 cron 轮转即此类做法 etcdctl snapshot save /mnt/backup/etcd/backup_$(date %Y%m%d_%H%M%S).db该命令属于groupClusterMaintenanceID集群维护命令组将节点后端数据库快照落盘到文件与 Vonage每日快照、Branch.ioEBS 卷备份等生产做法直接对应。典型用途与仓库功能模块的对应关系清单中高频出现的用途在仓库内都有对应的官方功能模块可作为延伸阅读入口服务发现OpenTable、Vonage、Qiniu、Meitu、Grab、QingCloud、Tencent 等client/v3/naming/doc.go 展示了官方的 endpoints 管理器与 etcd 后端 gRPC resolver 用法——endpoints.NewManager注册/删除服务端点、resolver.NewBuilder构造etcd://地址解析器还支持用 lease 注册带过期时间的端点分布式锁Qiniu、Hyper.sh、Hosted Graphiteclient/v3/concurrency/ 提供基于租约的 Mutex / Elected 原语嵌入式使用PD/TiDBserver/embed/etcd.go 的StartEtcd是内嵌 etcd 的编程入口PD 正是借此把元信息存储 自动故障转移整体打包进自己的控制器配置管理与系统引导discovery.etcd.io、Radius、Vonage即 etcd 最早的 bootstrap 定位清单中最早的案例2014 年的 discovery.etcd.io延续至今仍是最长连续运行的标杆。如何让自己的生产案例进入这份清单从文档开头表述看ADOPTERS.md 是一个开放的顾问社区etcd 开发团队会定期回访清单上的运维者确认 etcd 在实际环境中的表现并更新列表。每条条目遵循固定模板Application用途、Launched上线时间、Cluster Size集群规模、Order of Data Size数据量级、Operator运维方与联系人、Environment运行环境、Backups备份策略最后附一段应用背景说明。如果你的团队正在生产中使用 etcd按该模板补充自己的部署细节尤其是集群规模、数据量级与备份策略这三项既是对清单的有价值的补充也方便与上游团队就一线问题直接对接。小结ADOPTERS.md 呈现的 etcd 生产画像可以概括为以Kubernetes 为最大元用户、以3/5 成员集群 KB 级到数百 MB 数据为典型规模、覆盖裸金属到多云的广泛环境用途集中在配置管理、服务发现、分布式锁、嵌入式元数据存储四类备份策略则取决于数据是否可重建——可重建者不备份不可重建者用etcdctl snapshot save做定期快照。这份清单与仓库中 server/embed/config.go 的集群引导与配额参数、etcdctl snapshot 命令、client/v3/naming 等服务发现模块相互印证是评估etcd 是否适合我的生产场景时最直接的参照物。【免费下载链接】etcdDistributed reliable key-value store for the most critical data of a distributed system项目地址: https://gitcode.com/GitHub_Trending/et/etcd创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考