Curve元数据节点高可用
© XXX Page 1 of 30 Curve元数据节点高可用© XXX Page 2 of 30 1. 需求 2. 技术选型 3. etcd clientv3的concurrency介绍 3.1 etcd clientV3的concurrency模块构成 3.2 Campaign的流程 3.2.1 代码流程说明 3.2.2 举例说明Campagin流程 3.3 Observe的流程 Curve中MDS的选举过程 4.2 图示说明选举流程 4.2.1 正常流程 4.2.2 异常情况1:MDS1退出,可以正常处理 4.2.3 异常情况2:Etcd集群的leader发生重新选举,MDS1未受影响,可以正常处理 4.2.4 异常情况3:Etcd的leader发生重新选举,MDS1受到影响退出,不一定可以正常处理。 4.2.4.1 LeaseTIme < ElectionTime的情况 4 ElectionTime 4.2.4.3 MDS1、MDS2、MDS3的租约全部过期 4.2.4.4 总结 4.2.5 异常情况四: Etcd集群与MDS1(当前leader)出现网络分区 4.2.5.1 事件一先发生 4.2.5.2 事件二先发生 4.2.6 异常情况4:Etcd集群的follower节点异常 4.2.7 各情况汇总 1. 需求 mds是元数据节点,负责空间分配,集群状态监控,集群0 码力 | 30 页 | 2.42 MB | 5 月前336-云原生监控体系建设-秦晓辉
监控难度加大 从 Kubernetes 架构来 看要监控的组件 Kubernetes架构 l 服务端组件,控制面:API Server、Scheduler、 Controller-Manager、ETCD l 工作负载节点,最核心就是监控Pod容器和节点本 身,也要关注 kubelet 和 kube-proxy l 业务程序,即部署在容器中的业务程序的监控,这 个其实是最重要的 随着 Kubernetes “unschedulable” 表示 无法调度,“error” 表示调度器内部错误 Kubernetes控制面 etcd 的监控 • ETCD 也是直接暴露 /metrics 接口,可以直接抓取 • ETCD 可以考虑使用 sidecar 模式来抓,对于运维比较简 单一些,不需要先部署 ETCD 再去配置抓取规则 • ETCD 强依赖硬盘做持久化,所以要特别关注硬盘相关的 指标,尽量用 SSD 或 NVME 的盘 • prometheus 插件即可,大盘可以参考 k8s/etcd-dash.json • etcd_server_has_leader etcd 是否有 leader • etcd_server_leader_changes_seen_total 偶尔切主问题不大,频繁切主就要关注了 • etcd_server_proposals_failed_total 提案失败次数 • etcd_disk_backend_commit_duration_seconds0 码力 | 32 页 | 3.27 MB | 6 月前3Curve核心组件之snapshotclone
client的接口层)与S3交互,存取s3 中的对象。 SnapshotDataStore: • SnapshotCloneMetaStore负责管理快照和克隆任务等元数据, 通过调用etcdclient,与etcd存储交互,存取etcd中的快照和克隆 元数据。 SnapshotCloneMetaStore: • CurveClient封装了Client接口,负责与MDS和ChunkServer交互。 CurveClient: 负责管理快照和克隆源卷的引用计数。 SnapshotRef & CloneRef:快照总体流程 • 1.用户发起快照,生成快照任务,并持久化到 etcd,开始执行快照任务。 • 2.在curve中创建内部快照,并返回快照信息, 然后将快照信息更新到etcd。此时,即返回用 户快照成功,可以进行读写。 • 3.向mds查询快照的元数据,转储快照元数据 块metaObject。 • 4.根据快照元数据信息,转储快照数据块 数据 快照流程: chunk chunk chunk chunkserver meta object data object data object S3 Snap Task etcd mds client 3.获取快照元数据 datastore metastore http service clone Task user 快照元数据 2.创建内部快照 5.删除内部快照0 码力 | 23 页 | 1.32 MB | 5 月前3CurveFS ChunkID持久化
1. 1. 1. 2. 1. 2. 3. 4. 3. 2. 背景 将原有的获取chunkid的方法从space迁入mds中,并持久化写入etcd中; 只考虑单 mds 工作的情况; chunkid全局递增。 实现 proto/space.proto 中的 message AllocateS3ChunkRequest、message A KVStorageClient 申请新的chunkid Bundle (etcd中记录的已使用chunkID增加一个chunkID Bundle 的大小); 申请失败 storeKey_不存在,从现在已使用的 ChunkID 继续申请新的 Bundle 首次连接 etcd etcd 环境切换 storeKey_ 被删除 其他 storeKey_ 在etcd上的Value不可解码 返回一个新的chunkid 返回一个新的chunkid 方案 class ChunkIDGenerator { client_; // etcd chunkIdStoreKey_; // chunkid 存储在etcd上的 key nextId_; // 下一个可分配的 chunkID lastId_; // 当前chunkID bundle 内最后一个可分配的chunkID bundleSize_;// chunkId池子的大小0 码力 | 3 页 | 79.38 KB | 5 月前3逐灵&木苏-阿里巴巴 K8S 超大规模实践经验
Kube-APIServer Webhook ETCD 数据构建 压测场景 压测环境 压测报告 压测平台 监控&大盘• APIServer & ETCD & Webhook Load balance ETCD Webhook Client Kubelets APIServer Http2 -> http1.1 Upgrade Etcd client v3.3.15 周期性重建连接 周期性重建连接 slb slb 直连 设置maxSurge• 客户端和服务端的同步机制 List & Watch优化 ETCD Cache Pod A V1 Pod A V2 Pod A V3 Reflector APIServer Watch Cache List & Watch Informer Reflector Store List & Watch• 网络抖动造成informer重新List APIServer Client List / Get ETCD rv=nil Page read Filter by condition• APIServer 缓存一致性读 • 索引支持动态新增 • Cache Ready Cache Read & Index APIServer Client list/get @t0 ETCD rv=nil 1. Get rv@t0 Cache0 码力 | 33 页 | 8.67 MB | 5 月前3Best practices for building Kubernetes Operators
just after reading the data from ETCD ● Defaulting happens on the object ○ in the request to the API server using the request version defaults, ○ when reading from etcd using the storage version defaults “Defaults applied when reading data from etcd are not automatically written back to etcd. An update request via the API is required to persist those defaults back into etcd”FinalizersFinalizers ● “Finalizers0 码力 | 36 页 | 2.19 MB | 5 月前303-基于Apache APISIX的全流量API网关-温铭
的所有变量作为条件,并且支持自定义函数;其他网关都是 内置的几个条件; • Apache APISIX 使用 etcd 作为配置中心,没有单点,任意宕掉一台机 器,网关集群还能正常运行。其他基于 mysql,postgres 的网关都会有单点 问题 • Apache APISIX 的配置下发只要 1 毫秒就能达到所有网关节点,使用的是 etcd 的 watch;其他网关是 定期轮询数据库,一般需要 5 秒才能获取到最新配置 • 租车:大搜车、租租车、优信二手车 • 金融:泰康、同程金服、空中云汇 • 在线教育:好未来、作业帮、腾讯教育、网易有道 APISIX 和 Kong 的对比 对⽐比项 APISIX Kong 技术架构 Nginx + etcd Nginx + postgres ⾼高可⽤用 ⾮非常可靠,没有单点 ⼀一般,有数据库 的单点 精细化路路由 ⽀支持 Nginx 变量量和⾃自 定义函数 固定的⼏几个条件 配置⽣生效时间 事件驱动,⼩小于 案例:Apache APISIX dashboard 的重构,社区对于 MySQL 的方案不满, “怨声载道”,然后来自 5 家公司的贡献者一起重构掉它 规划 • 2.0 版本(即将发布):使用 etcd v3 替代 v2 • 3.0 版本:废弃 admin API,分离 DP 和 CP • 2021 年的 flag:Apache APISIX 的贡献者超过 200 位 最后 记住我们的图标0 码力 | 11 页 | 6.56 MB | 5 月前3Raft在Curve存储中的工程实践
在某个时间点,整个系统的状态都以快照的形式写入 到稳定的持久化存储中 • 完成一次快照之后,删除时间点之前的所有日志和快 照。BRAFT简介 • raft协议提出之后,涌现出了非常多的实现,比如etcd,braft,tikv等。 • braft是raft的一个实现,实现了raft的一致性协议和复制状态机,而且提供了一种通用的基础库。基 于braft,可以基于自己的业务逻辑构建自己的分布式系统。 device)、iscsi • 支持RDMA和SPDK Curve块存储架构 • client:接受用户请求。 • mds:保存元数据,包括topo信息、块设备信息、 数据分布信息等,持久化到etcd中。 • chunkserver:采用raft协议3副本的方式保存块 设备上的数据。 • snapshotCloneServer:卷的快照克隆服务,持久 化到S3中。Curve块存储RAFT应用 client:接受用户请求,采用fuse的方式挂载挂载使用。 • 元数据集群:mds 和 metaserver。 • mds:保存元数据,包括topo信息、文件系统信 息、元数据分布信息等,持久化到etcd中。 • metaserver:采用raft协议3副本的方式保存文 件文件的元数据,包括inode,dentry,文件的 空间分配信息。 • 数据集群:采用外部存储,S3或者Curve块存储,保0 码力 | 29 页 | 2.20 MB | 5 月前3CurveFS rename 接口实现方案
Concurrency Controller (备注:我认为利用 MVCC 可以保证事务 ACID 中的 C(一致性) 和 I(隔离性)) 方案主要借鉴 leveldb 与 etcd(boltdb) 中事务的实现(主要利用 mvcc),方案设计如下:© XXX Page 7 of 15 整体思路如下: 在 MDS 所有 copyset 中增加一个 txid 字段,保存当前 dentry 不动),并设置 PendingTx 为本次事务 如果上一步骤成功了,就提交事务,将 srcDentry, dstDentry 所在 copyset 的 txid 都加 1(这一步是通过 etcd 的事务保证的),如果上一步或这一步失败,因为 txid 不变,原始数据版本也在,还是保证原子性(其实就是一个 txid 对应一个版本的数据)© XXX Page 8 of 15 下次访问的时候,带上对应 + name + copyset_txid+1, VALUE: flag = 0, nodeId=...) (3) 提交事务,将 2 个 copyset 对应的 txid 都加一 (这一步是通过 etcd 的事务实现,不存在一个 copyset_txid 加一,一个没加一) (4) 如果事务提交成功了,更新 Client 的 txid 缓存 (5) 下次访问的时候,带上对应 copyset 的最新0 码力 | 15 页 | 555.93 KB | 5 月前322-云原生的缘起、云原生底座、PaaS 以及 Service Mesh 等之道-高磊
适合大部分客户希望原封不动的低成本迁移上云。 • 大部分周边依赖无法做到平台化,导致管理碎片化严重,并与 微服务框架直接关联,成本较高。 Ingress Service A Service B Service C k8s-ETCD ConfigMap Zipkin EFK prometheus • 适合新项目上云,如果是已经存在的项目就需要修改代码 • 注册中心、配置中心、跟踪链、日志分析、性能分析、流量网 关等 迁移同时可以保证标准化能力呢? 本质而言,我们是需要一个可以托管各类微服务的通用云原生应用架构治理平台 标准化能力-微服务PAAS-应用架构治理-运行态稳定性管理-2 Ingress k8s-ETCD ConfigMap Zipkin EFK prometheus • ServiceMesh为容器云打通通信网格(东西南北流量)、补充服务治理能力的同时,也将平台能力与微服务运行 RT环境彻底隔离,平台能力可以做到标准化。 Config 熔断监控 Turbine Zipkin EFK prometheus SM 控 制 面 Service A Service B Enovoy Enovoy k8s-ETCD 商业价值:大幅度降低迁移成本、可以低成本承载多种微服务架构形态 通过ServiceMesh将平台能力彻底从具体微服务体系剥离出去并带来安全、服务治理等能力 形成一个完整的运行态稳定性保障体系,并0 码力 | 42 页 | 11.17 MB | 6 月前3
共 29 条
- 1
- 2
- 3