Raft在Curve存储中的工程实践
+ new),一旦共同一 致已经被提交,系统切换到新的配置(new)。RAFT协议简介 日志压缩 • 日志会不断增长,占用空间 • 采用快照的方式压缩日志 • 在某个时间点,整个系统的状态都以快照的形式写入 到稳定的持久化存储中 • 完成一次快照之后,删除时间点之前的所有日志和快 照。BRAFT简介 • raft协议提出之后,涌现出了非常多的实现,比如etcd,braft,tikv等。 mds:保存元数据,包括topo信息、块设备信息、 数据分布信息等,持久化到etcd中。 • chunkserver:采用raft协议3副本的方式保存块 设备上的数据。 • snapshotCloneServer:卷的快照克隆服务,持久 化到S3中。Curve块存储RAFT应用 数据分布 • 每个raft实例用一个copyset管理,copyset是个逻辑 概念。写入chunk的数据,由copyset对应的raft完成 具有幂 等性。 • 对chunk打快照不需要把chunk重新换个地方复制一遍, 只需要记录下chunk文件的list。 • follower从快照恢复,只需要leader把最近一次快照 涉及到chunk数据给到follower,follower再从上次快 照后的日志重放即可。 • chunkserver服务重启,只需要加载快照,然后对 chunk重放快照之后日志即可。 raft snapshot0 码力 | 29 页 | 2.20 MB | 5 月前3Curve核心组件之snapshotclone
04 快照和克隆的特点 快照克隆服务器架构 快照的实现 05 克隆的实现CURVE基本架构 • 元数据节点 MDS • 管理和存储元数据信息 • 感知集群状态,合理调度 • 数据节点 Chunkserver • 数据存储 • 副本一致性,raft • 客户端 Client • 对元数据增删改查 • 对数据增删改查 • 快照克隆服务器 • 快照 • 克隆快照和克隆的特点 克隆快照和克隆的特点 • 快照的定义 快照是云盘数据在某个时刻完整的只读拷贝,是一种便捷高效的数据容灾手段, 常用于数据备份、制作自定义镜像、应用容灾等。 • 快照的特点 • 转储到s3对象存储 • 异步转储快照,底层使用copy-on-write技术,读写不影响转储 • 增量转储,第一次全量转储s3之后,后续只需转储增量部分 • 高可用,快照任务中断自动拉起继续转储快照和克隆的特点 • 克隆的定义 克隆的定义 • 克隆是指从卷复制出卷的功能,提供快速的复制卷的能力。 • 这里的克隆还包括从快照回滚的功能 • 克隆的特点 • 支持Lazy和非Lazy两种模式克隆 • 支持从快照克隆和从镜像(卷)克隆 • 支持从快照回滚 • 高可用,克隆任务中断自动拉起继续克隆快照克隆服务器架构 • 基于brpc提供restful API的对外http接口 HttpService: • Serivc0 码力 | 23 页 | 1.32 MB | 5 月前3TiDB v8.5 中文手册
· · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · 818 7.6.6 TiDB 主从集群数据校验和快照读· · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · 821 7.6.7 · · · · · · · · · · · · · · · · · · · · · · · · · · 953 7.8.12 TiCDC 把数据同步到 Kafka 时,能在 TiDB 中控制单条消息大小的上限吗? · · · · · · · · · · · · · · · 953 7.8.13 在一个事务中对一行进行多次修改,TiCDC 会输出多条行变更事件吗? · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · 1205 9.5 将 Grafana 监控数据导出成快照 · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · 12060 码力 | 5095 页 | 104.54 MB | 9 月前3TiDB v8.4 中文手册
· · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · 951 9.5 将 Grafana 监控数据导出成快照 · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · 952 的查询响应时间,提升集群吞吐,减少执行计划突变的可能性,并保持集群性能的稳定。相比会话级 执行计划缓存,实例级执行计划缓存具有以下优势: – 消除冗余,在相同的内存消耗下缓存更多执行计划。 – 在实例上分配固定大小的内存区域,更有效地限制内存使用。 在 v8.4.0 中,实例级执行计划缓存仅支持对查询的执行计划进行缓存,且默认关闭。你可以通过系统变 量tidb_enable_instance_plan_cache (RESOURCE_GROUP、MAX_REQUEST_UNIT_WRITE、MAX_ �→ REQUEST_UNIT_READ、MAX_PROCESSED_KEYS),根据历史执行情况决定条件值的大小。 更多信息,请参考用户文档。 • 超出预期的查询 (Runaway Queries) 支持切换资源组 #54434 @JmPotato v8.4.0 新增支持将 Runaway Queries0 码力 | 5072 页 | 104.05 MB | 9 月前3TiDB v8.2 中文手册
· · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · 885 9.5 将 Grafana 监控数据导出成快照 · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · 886 请求时,默认 使用新版本的 Region 副本选择器。 – 从 v8.2.0 开始,BR 快照恢复参数 --concurrency 被废弃。作为替代,你可以通过--tikv-max-restore �→ -concurrency 配置快照恢复阶段单个 TiKV 节点的任务最大并发数。 – 从 v8.2.0 开始,BR 快照恢复参数 --granularity 被废弃,粗粒度打散 Region 算法默认启用。 #17078 @LykxSassinator – 利用单独的线程来进行副本清理工作,保证 Raft 读写关键路径的延迟稳定 #16001 @hbisheng – 提升正在进行 apply 的 Raft 快照数量的可观测性 #17078 @hbisheng • PD – 优化提升 Region 心跳处理的性能 #7897 @nolouch @rleungx @JmPotato 43 – pd-ctl0 码力 | 4987 页 | 102.91 MB | 9 月前3CurveFS方案设计
初稿(背景,调研,架构设计) 2021-03-30 李小翠 增加快照部分 2021-04-13 李小翠、陈威 补充元数据数据结构 2021-04-19 李小翠、吴汉卿、许超杰等 补充文件空间分配,讨论与确认 背景 调研 开源fs 性能对比 可行性分析 方案对比 对比结论 架构设计 卷和文件系统 元数据架构 文件系统快照 方案一:文件/目录级别快照 方案二:文件系统快照 关键点 元数据设计 数据结构 索引设计 1. 2. 2. 1. 2. 1. 2. 一个卷对应一个文件系统 文件系统中文件数据和chunk是一对多的关系。 底层 chunk 固定大小,一个 chunk 可以分为多个固定大小的 extent 大文件可以包含多个 chunk, 小文件可以共用 chunk 文件的目录数结构有单独的元数据节点存储 元数据包含两层映射,dentry,inode inode 指向同一个inode 文件系统快照 方案一:文件/目录级别快照 快照是文件系统或卷的只读副本,快照要求可以即时创建。类似 moosefs,curvefs 可以计划支持目录及文件级别的快照,目录级别和文件级别的快照可以认为就是cp的实现。 对于文件/目录级别的快照: 检查目的节点的父节点中是否有同名文件存在: 存在 若源节点类型为TYPE_DIRECTORY则对源节点目录下的所有子文件进行快照 若源节点类0 码力 | 14 页 | 619.32 KB | 5 月前3Curve设计要点
Chunkserver 数据存储 副本一致性 • 客户端 Client 对元数据增删改查 对数据增删改查基本架构 • 快照克隆服务器 独立于核心服务 储到支持S3接口的 对象存储,不限制数量 异步快照、增量快照 从快照/镜像克隆 ( lazy/非lazy ) 从快照回滚数据组织形式 • 底层 可用性 / 可靠性 扩展性 / 负载均衡 向上提供无差别文件流 • Application : N chunk有先后关系 • 创建时指定大小,lazy分配chunk • 提供4kb随机读写能力数据组织形式 • PageFile • 地址空间到—>chunk: 1 : N chunk有先后关系 • 创建时指定大小,lazy分配chunk • 提供4kb随机读写能力 • 支撑块设备应用场景 块设备层面的快照功能 即为文件层面快照数据组织形式 • AppendFile • 4K随机写 4K随机读 61.12 % 67.8% 测试环境:6台服务器*20块SATA SSD,E5-2660 v4,256G,3副本场景 高性能高性能 • quorum机制:raft • 轻量级快照 • io路径上的优化 • filepool落盘零放大 • 轻量级线性一致性读 • io路径上用户空间零拷贝 10卷4K随机读写IOPS 294k 185k 330k 565k 4K随机写0 码力 | 35 页 | 2.03 MB | 5 月前3Curve核心组件之chunkserver
管理和存储元数据信息 • 感知集群状态,合理调度 • 数据节点 Chunkserver • 数据存储 • 副本一致性,raft • 客户端 Client • 对元数据增删改查 • 对数据增删改查 • 快照克隆服务器CURVE基本架构 01 02 03 04 ChunkServer架构 ChunkServer核心模块 新版本ChunkServer性能优化Curve ChunkServer是数据节点, CliService。成员变更相关操作 • CopySetService。创建copyset等操 作 • RaftService。Braft内置的service, 完成raft成员之间的选举,日志复制, 安装快照等操作。 ChunkServer架构CopysetNode封装了braft的Node,并 实现了braft的状态机,完成与raft的交 互。详细交互流程后面展开。 CopysetNodeManager负责管理 apply后再执行后面的操作。 ChunkServer架构CloneManager主要负责克隆相关的功 能,内部是一个线程池,主要负责异 步完成克隆chunk的数据补全。关于克 隆相关的内容将会在快照克隆相关介 绍文档中详细介绍。 ChunkServer架构Metric统计模块使用brpc中的bvar计数 器,统计一些IO层面和copyset层面的 一些指标,方便监控和跟踪。 Chun0 码力 | 29 页 | 1.61 MB | 5 月前3Nacos架构&原理
与存储、Server 间、Server 与 SDK 间高效通信问题。 容量管理:管理每个租户,分组下的容量,防止存储被写爆,影响服务可用性。 流量管理:按照租户,分组等多个维度对请求频率,长链接个数,报文大小,请求流控进行控制。 缓存机制:容灾目录,本地缓存,Server 缓存机制,是 Nacos 高可用的关键。 启动模式:按照单机模式,配置模式,服务模式,DNS 模式模式,启动不同的模块。 ${prefix}-${spring.profiles.active}-${file-extension} 配置快照(Configuration Snapshot) Nacos 的客户端 SDK 会在本地生成配置的快照。当客户端无法连接到 Nacos Server 时,可以使 用配置快照显示系统的整体容灾能力。配置快照类似于 Git 中的本地 commit,也类似于缓存,会 在适当的时机更新,但是并没有缓存过期(expiration)的概念。 可以提供发布配置、更新配置、监听配置等功能。 3. SDK 通过 GRPC 长连接监听配置变更,Server 端对比 Client 端配置的 MD5 和本地 MD5 是否相等,不相等推送配置变更。 4. SDK 会保存配置的快照,当服务端出现问题的时候从本地获取。 配置资源模型 Namespace 的设计就是用来进行资源隔离的,我们在进行配置资源的时候可以从以下两个角度来 看: 从单个租户的角度来看,我们要配置0 码力 | 326 页 | 12.83 MB | 9 月前3Python 标准库参考指南 3.10.15
10.15 • 如果是一个 integer,会初始化大小为该数字的数组,并使用 null 字节填充。 • 如果是一个遵循 缓冲区接口的对象,该对象的只读缓冲区将被用来初始化字节数组。 • 如果是一个 iterable 可迭代对象,它的元素的范围必须是 0 <= x < 256 的整数,它会被用 作数组的初始内容。 如果没有实参,则创建大小为 0 的数组。 另见二进制序列类型 --- bytes floatvalue ::= [sign] (floatnumber | infinity | nan) 在这里 digit 是一个 Unicode 十进制数码 (Unicode 主分类为 Nd 的字符)。对大小写不敏感,因此, 举例来说,”inf”, ”Inf”, ”INFINITY” 和”iNfINity” 都是正无穷大的可接受拼写。 另一方面,如果实参是整数或浮点数,则返回具有相同值(在 Python name) 看是否有AttributeError 异常来实 现的。) hash(object) 返回该对象的哈希值(如果它有的话)。哈希值是整数。它们在字典查找元素时用来快速比较字典 的键。相同大小的数字变量有相同的哈希值(即使它们类型不同,如 1 和 1.0)。 注解: 如果对象实现了自己的 __hash__() 方法,请注意,hash() 根据机器的字长来截断返回 值。另请参阅 __hash__()。0 码力 | 2072 页 | 10.39 MB | 9 月前3
共 111 条
- 1
- 2
- 3
- 4
- 5
- 6
- 12