Curve质量监控与运维 - 网易数帆
定时获取图表 并发送邮件 获取集群拓扑信息 Curve利用brpc内置的bvar组件生成监控指标,并 使用部署在docker的三个组件进行监控指标的处 理与展示: Prometheus——面向云原生应用程序的开源 的监控&报警工具,curve利用它进行监控指标 的采集与存储。 Daily reporter——python脚本,定时从 Grafana获取指定集群的图表,生成集群监控 thread local存储,减少了cache bouncing,性能开销极小; 支持在 brpc server 服务的端口上以web portal的方式导出和查询监控指标: 常用的bvar数据类型: bvar::Adder: 计数器,默认0, varname << N相当于varname += N bvar::LatencyRecorder : 专用于记录延时和qps的变量。 22/33监控指标的可视化 Curve通过Grafana实现监控指标的可视化,其展示效果如下: 23/33丰富的metric 24/33每日报表 Curve每天通过daily reporter从Grafana获 取图表,生成每日报表,并定时发送邮件。 用户无需登陆监控平台即可轻松掌握Curve每 日运行状态。 25/33背景 01 02 03 04 Curve质量控制 Curve监控体系 Curve运维体系Curve运维特性 0 码力 | 33 页 | 2.64 MB | 5 月前3Curve核心组件之snapshotclone
Task user 快照元数据 2.创建内部快照 5.删除内部快照 快照数据 1.发起快照 SnapshotCloneServer 6.删除内部快照数据快照的元数据和数据组织 字段 类型 说明 uuid string 快照唯一Id user string 所属用户 fileName string 快照目标卷名 snapshotName string 快照名 seqNum uint64_t SnapFile的命名方式为“chunk_” + ChunkId + “_snap_”+ seqNum的形式,以区别于 ChunkFile。CHUNKSERVER端快照实现-SNAPFILE 字段 类型 说明 version uint8_t 文件格式协议 版本号 demaged bool 损坏标记 sn uint64_t 快照版本号 bits uint32_t 位图的位数 bitmap char[] chunk: 安装元数据时即分配好chunk。 无额外接口: 无需Flatten接口。 适用场景: 适用于从云主机或快照创建镜像CHUNKSERVER端克隆实现-CHUNKFILE 字段 类型 说明 version uint8_t 文件格式协议版本号 sn uint64_t chunk文件的版本号 correntSn uint64_t chunk的修正版本号 locationSi0 码力 | 23 页 | 1.32 MB | 5 月前3CurveFS方案设计
元数据管理的雏形,具备了基本的元数据管理功能。(当时为什么要设计为 namespace 的管理形式?留有租户这个概念),直接基于 namespace 开发: a. 功能 软/硬链接:目前是都不支持的。软链接可以通过标识文件类型解决;由于 prefix + parentid + filename 作为 key , filename 直接和 fileInfo 关联,硬链接无法支持 b. 性能 list:list在通用文件系统中是很常见的操作,目前 检查目的节点的父节点中是否有同名文件存在: 存在 若源节点类型为TYPE_DIRECTORY则对源节点目录下的所有子文件进行快照 若源节点类型为TYPE_FILE则开始比较源节点与目的节点的 inode 是否相同,若完全一样则说明目的节点已经是源节点的快照了不需要做任何处理, 否则删除目的节点,再创建新的 dentry 指向源节点的 inode 若源节点类型为TYPE_SYMLINK,重新设置目的节点与源节点保持一致 若源节点type= TYPE_DIRECTORY,递归创建源节点目录下的所有子文件进行快照 若源节点type= TYPE_FILE,则设置length、chunks使其与源节点的对应属性一致 若源节点类型为TYPE_SYMLINK,设置目的节点的path与源节点保持一致 为 dentry 中对应chunk添加一个快照结构 flist 表示该chunk新关联了一个fsnode© XXX Page 8 of0 码力 | 14 页 | 619.32 KB | 5 月前3CurveFS Copyset与FS对应关系
com/opencurve/curve/pull/495 增加copyset.proto 增加heartbeat.proto 增加topology.proto 8、inode和dentry的内存估算 类型 byte sizeof(dentry) 56 dentry的name字段,按照最大估算 256 sizeof(inode) 112 sizeof(volumeExtentList) 48 inode大小: 空的inode占用112 + 48 + 48 = 208B; 目录类型的inode占用208B; link类型的inode最大占用208 + 256 = 464B; volume file类型的inode,按照1w条extent估算,占用内存208 + 10000*56 = 560208B; s3 类型的inode,按照1w条s3info估算,占用内存208 + 10000*640 码力 | 19 页 | 383.29 KB | 5 月前3CurveFs 用户权限系统调研
问题1:root用户无法访问挂载目录 测试 allow_root 测试allow_other 参考文献 问题2:本地文件系统挂载默认是共享的? 问题3:文件系统访问控制是在哪一层实现的? 二、文件系统权限管理 文件类型 文件权限 特殊权限(SUID, SGID, STICKY) 文件默认权限umask 用户&用户组 文件系统用户权限管理 对mode的管理 对ACL(Access Control Lists)的管理 16 10:41 softlink -> file 文件类型 文件类型标识 文件类型 - 普通文件 d 目录文件 l 符号链接 s 套接字(伪文件) b 块设备(伪文件) c 字符设备(伪文件) p 管道(伪文件) 文件权限 文件权限分为三段:分别对应文件“属主权限”、“属组权限”、“其他用户权限” 权限标识 权限类型 - 无权限 r 读权限4 w 写权限2 x 执行权限10 码力 | 33 页 | 732.13 KB | 5 月前3curvefs client删除文件和目录功能设计
moosefs使用了两种机制,来实现上述功能,分别是trash机制和reserve机制(最新版本叫sustained),两种机制如下: trash机制: 对于所有TYPE_FILE类型的文件在删除时, ,则不会立即将该文件彻底删除,而是将其类型修改为TYPE_TRASH并且将该节点从文件树移除然后放到trash链表中表示该文件已经进入回收 若其trashtime大于0 站。 通过META文件系统来访问trash serve中。 sustained机制/reserve机制 当一个trashtime等于0的TYPE_FILE类型的文件被一个客户端正在打开,而同时有另一个客户端要删除它时,此时master对该文件节点的处理是并不立即删除该文件而是设置为TYPE_RESERVED类型并将该fsn ode连接到reserved链表中,使该文件虽然已经从文件树中删除掉,但因为另一个正在打开该文件的客户端因为持有该节点inodeid0 码力 | 15 页 | 325.42 KB | 5 月前3Curve文件系统元数据管理
(n)复杂度。 c++ stl unordered_map moose,使用c实现 4、curve文件系统的元数据内存组织 curve文件系统元数据主要有3个类型,inode, dentry, 。 extent 4.1 inode定义: inode定义见:curve文件系统元数据proto(代码接口定义,已实现)© XXX Page 5 of 24 typedef 400 200 + E → 300 0 + B → 200 这里rename的时候,涉及到inode信息跨节点迁移。需要引入分布式锁,是个难点。 symbolic link: 这个类型的文件和普通文件一样创建删除,区别在于,在inode信息中记录需要链接到的地址。 hardlink:生成一个hardlink /B/E,指向文件/A/C 1、client给server0发送请求: 缓存可以在挂载文件系统的时候缓存在client端。不缓存具体的Inode的结构体,仅仅缓存(inodeid, partitionid)的映射,如果inodeid为uint64类型,partitionid为uint64_t类型,那么一条记录需要16字节。一个文件系统按照10亿的元数据统计,10亿 * 16字节 = 1.5GB,全部缓存到内存需要1.5GB的内存。除了缓存需要占用的内存资源之外,如果涉0 码力 | 24 页 | 204.67 KB | 5 月前3NJSD eBPF 技术文档 - 0924版本
• map映射 • 验证器 • Hook • Helper api配置TCP Initial RTO • 场景 内核4.12之前 initial RTO是⼀个常数1s • 应⽤类型BPF_PROG_TYPE_SOCK_OPS • HOOK BPF_SOCK_OPS_TIMEOUT_INIT • 内核中调⽤栈 • tcp_timeout_init • tcp_c (filename, offset, len) = func (inodeid, offset, len) • 读cache流程 • 写cache流程基于inode cache优化 • bpf程序类型 BPF_PROG_TYPE_EXTFUSE • Hook点及⽅法 • fuse_request_send • FUSE_LOOKUP / FUSE_GETATTR / FUSE_SETATTR • inode map BPF_MAP_TYPE_HASH • key inode id • value fuse_attr (⽂件属性)基于data cache部分 • bpf程序类型 BPF_PROG_TYPE_EXTFUSE • Hook点及⽅法 • fuse_file_read_iter, fuse_file_write_iter • FUSE_READ / FUSE_WRITE0 码力 | 20 页 | 7.40 MB | 5 月前3BRPC与UCX集成指南
●Worker –完成ucx的功能,可以在应用程序中调用的函数(不是单独执行的线程) ●Listener –接收连接请求 ●Ep –连接对象,在ep上请求发送和接收29 UCP 消息接口类型 ●Active message –速度最快,被brpc使用作为消息传递 –消息通过回调函数接收 –消息异步发送 ●Tag –MPI使用 ●Stream –官方不推荐30 WORKER 服务器端一般不主动关闭连接,客户端主动关闭,自己负 责是否有未接收完的应答。56 修改BRPC的EndPoint ●原始的EndPoint类,不能识别网络连接的类型,默认只有TCP –现在有了UCX, 需要添加一个字段说明是UCX连接,防止在函数传递参数 时丢失连接类型信息。 –UCX的地址依然是tcp地址。5758 修改 Socket Connect59 修改Socket Connect60 修改Socket::DoRead0 码力 | 66 页 | 16.29 MB | 5 月前3CurveFS S3数据整理(合并碎片、清理冗余)
试, 入队inodekey, 如果是已有inode任务, enqueue直接返回, 不入队 任务开始执行, 尝试根据inodekey获取inode信息, 获取不到就退出; 不是s3类型的inode退出 对于每一个s3类型的inode来说, 对每一个index内的chunkinfo按照chunkid升序排序. 对于一个chunk来说,chunkinfo数量大于20即进行处理 计算变更 - 记录整个chunk最大的chunkid0 码力 | 3 页 | 101.58 KB | 5 月前3
共 16 条
- 1
- 2