 CurveBS IO Processing Flowdata organization and topology structure of CURVE. CurveBS uses the central node Metadata Server (MDS) to manage virtual disk mapping and data replicas distribution. Decentralization currently most cases. The CurveBS core consists of three parts: 1. Metadata Server (MDS) l Manages and stores metadata information and persists the data in ETCD l Collect cluster status and schedule0 码力 | 13 页 | 2.03 MB | 6 月前3 CurveBS IO Processing Flowdata organization and topology structure of CURVE. CurveBS uses the central node Metadata Server (MDS) to manage virtual disk mapping and data replicas distribution. Decentralization currently most cases. The CurveBS core consists of three parts: 1. Metadata Server (MDS) l Manages and stores metadata information and persists the data in ETCD l Collect cluster status and schedule0 码力 | 13 页 | 2.03 MB | 6 月前3
 Curve文件系统元数据管理现在假定文件系统有这样几个文件,根据上面的分片方式,parent为"/"和"/A/C"在server0上,parent为"/A"和"/A/D"在server1上,parent为"/B"在server2上。© XXX Page 12 of 24 元数据 server 0 server 1 server 2 inode信息 0 → inode / 300 → inode C 100 → 5.1.1 场景分析 查找:查找/A/C。 1、client给server0发送请求:parentid 0 + name "A",查询"A"的inodeid为100© XXX Page 13 of 24 2、client给server0发送请求:inode 100,查询的"A"的inode信息。 3、client给server1发送请求:parentid 100 + name "C",查询"C"的inode为300 4、client给server1发送请求:inode 300,查询"C"的inode信息。 创建:/A/C不在,创建/A/C 1、client给server0发送请求:parentid 0 + name "A",查询"A"的inodeid为100 2、client给server0发送请求:inode 100,查询的"A"的inode信息。 3、client给server1发送请求:parentid0 码力 | 24 页 | 204.67 KB | 6 月前3 Curve文件系统元数据管理现在假定文件系统有这样几个文件,根据上面的分片方式,parent为"/"和"/A/C"在server0上,parent为"/A"和"/A/D"在server1上,parent为"/B"在server2上。© XXX Page 12 of 24 元数据 server 0 server 1 server 2 inode信息 0 → inode / 300 → inode C 100 → 5.1.1 场景分析 查找:查找/A/C。 1、client给server0发送请求:parentid 0 + name "A",查询"A"的inodeid为100© XXX Page 13 of 24 2、client给server0发送请求:inode 100,查询的"A"的inode信息。 3、client给server1发送请求:parentid 100 + name "C",查询"C"的inode为300 4、client给server1发送请求:inode 300,查询"C"的inode信息。 创建:/A/C不在,创建/A/C 1、client给server0发送请求:parentid 0 + name "A",查询"A"的inodeid为100 2、client给server0发送请求:inode 100,查询的"A"的inode信息。 3、client给server1发送请求:parentid0 码力 | 24 页 | 204.67 KB | 6 月前3
 Curve核心组件之mds – 网易数帆pool: 用于实现对机器资源进行物理隔离,server不能跨 Pool交互。运维上,建议以pool为单元进行物理资源的扩 容。 • zone: 故障隔离的基本单元,一般来说属于不同zone的机 器至少是部署在不同的机架,一个server必须归属于一个 zone。 • server: 用于抽象描述一台物理服务器,chunkserver必须 归属一个于server。 • Chunkserver: 用于抽象描述物理服务器上的一块物理磁盘 置文件: 集群有一个物理pool,由3个zone组成,每个zone有1台server。 在物理pool上,还创建了一个逻辑pool,逻辑pool使用3个zone,采用 3副本,有100个copyset。 cluster pool1 zone1 zone2 zone3 server1 server2 server3 192.168.0.1:8200 192.168.0.2:8200 192 cluster_map: servers: - name: server1 internalip: 192.168.0.1 internalport: 8200 externalip: 192.168.0.1 externalport: 8200 zone: zone1 physicalpool: pool1 - name: server2 internalip: 192.168.0.2 internalport:0 码力 | 23 页 | 1.74 MB | 6 月前3 Curve核心组件之mds – 网易数帆pool: 用于实现对机器资源进行物理隔离,server不能跨 Pool交互。运维上,建议以pool为单元进行物理资源的扩 容。 • zone: 故障隔离的基本单元,一般来说属于不同zone的机 器至少是部署在不同的机架,一个server必须归属于一个 zone。 • server: 用于抽象描述一台物理服务器,chunkserver必须 归属一个于server。 • Chunkserver: 用于抽象描述物理服务器上的一块物理磁盘 置文件: 集群有一个物理pool,由3个zone组成,每个zone有1台server。 在物理pool上,还创建了一个逻辑pool,逻辑pool使用3个zone,采用 3副本,有100个copyset。 cluster pool1 zone1 zone2 zone3 server1 server2 server3 192.168.0.1:8200 192.168.0.2:8200 192 cluster_map: servers: - name: server1 internalip: 192.168.0.1 internalport: 8200 externalip: 192.168.0.1 externalport: 8200 zone: zone1 physicalpool: pool1 - name: server2 internalip: 192.168.0.2 internalport:0 码力 | 23 页 | 1.74 MB | 6 月前3
 Curve元数据节点高可用TODO()/context.Background()', the Campaign // will continue to be blocked for other keys to be deleted, unless server // returns a non-recoverable error (e.g. ErrCompacted). // Otherwise, until the context is not cancelled er建立的交互如下: ①与etcd server维持租约。这里涉及到租约的时间 LeaseTime,租约KeepAlive的时间间隔是1/3的LeaseTime nextKeepAlive := time.Now().Add((time.Duration(karesp.TTL) * time.Second) / 3.0) ②定期去etcd server中get leader/MDS1,看是否还存在。这里涉及到定期get的时间 etcd集群leader选举的超时时间 3s LeaseTime mds当选leader之后,与etcd集群维持租约的过期时间 租约的keepalive间隔为LeaseTime/3 etcd server端限制LeaseTime >= 1.5 * ElectionTimeout 10s PeriodicGetTime mds当选leader之后,去etcd集群get Leader/MDS1的时间间隔0 码力 | 30 页 | 2.42 MB | 6 月前3 Curve元数据节点高可用TODO()/context.Background()', the Campaign // will continue to be blocked for other keys to be deleted, unless server // returns a non-recoverable error (e.g. ErrCompacted). // Otherwise, until the context is not cancelled er建立的交互如下: ①与etcd server维持租约。这里涉及到租约的时间 LeaseTime,租约KeepAlive的时间间隔是1/3的LeaseTime nextKeepAlive := time.Now().Add((time.Duration(karesp.TTL) * time.Second) / 3.0) ②定期去etcd server中get leader/MDS1,看是否还存在。这里涉及到定期get的时间 etcd集群leader选举的超时时间 3s LeaseTime mds当选leader之后,与etcd集群维持租约的过期时间 租约的keepalive间隔为LeaseTime/3 etcd server端限制LeaseTime >= 1.5 * ElectionTimeout 10s PeriodicGetTime mds当选leader之后,去etcd集群get Leader/MDS1的时间间隔0 码力 | 30 页 | 2.42 MB | 6 月前3
 BRPC与UCX集成指南●protobuf3 BRPC简介 ●Client/Server架构 ●使用Protobuf定义协议文件 –例如: echo.proto:4 BRPC简介 client server EchoRequest EchoResponse5 BRPC简介 ●Channel类 –代表一个连接,Client通过Channel发 送请求和接收应答 ●Server类 –代表一个服务器,可以注册不同的 接 接口服务,例如上面的EchoService6 BRPC SERVER7 BRPC SERVER8 BRPC client9 BRPC EndPoint EndPoint是一个代表通讯地址的数据结构, 是一个C++类。 字段: ip,port ●在Socket创建时需要提供EndPoint ●Socket::Connect时需要Remote EndPoint ●Accept的Socket可以获得Remote ●是创建socket的参数 ●主要成员: –fd 是socket文件句柄 –void (*on_edge_triggered_events)(Socket*) ●可读事件的回调函数16 Server创建Socket Listener 把系统调用创建的listen socket fd传给Socket::Create,获得一个Socket对象17 Socket Listener::OnNewConnections0 码力 | 66 页 | 16.29 MB | 6 月前3 BRPC与UCX集成指南●protobuf3 BRPC简介 ●Client/Server架构 ●使用Protobuf定义协议文件 –例如: echo.proto:4 BRPC简介 client server EchoRequest EchoResponse5 BRPC简介 ●Channel类 –代表一个连接,Client通过Channel发 送请求和接收应答 ●Server类 –代表一个服务器,可以注册不同的 接 接口服务,例如上面的EchoService6 BRPC SERVER7 BRPC SERVER8 BRPC client9 BRPC EndPoint EndPoint是一个代表通讯地址的数据结构, 是一个C++类。 字段: ip,port ●在Socket创建时需要提供EndPoint ●Socket::Connect时需要Remote EndPoint ●Accept的Socket可以获得Remote ●是创建socket的参数 ●主要成员: –fd 是socket文件句柄 –void (*on_edge_triggered_events)(Socket*) ●可读事件的回调函数16 Server创建Socket Listener 把系统调用创建的listen socket fd传给Socket::Create,获得一个Socket对象17 Socket Listener::OnNewConnections0 码力 | 66 页 | 16.29 MB | 6 月前3
 CurveFS Client 概要设计mode_t mode, dev_t rdev); 这两个函数的功能是类似,都用来创建文件。 根据parent inode id 和name,向mds查询创建dentry和inode的位置,去meta server创建dentry和inode 预分配一些空间?可先不做 mkdir© XXX Page 7 of 11 void (*mkdir) (fuse_req_t req, fuse_ino_t parent parent, const char *name, mode_t mode); 根据parent inode id 和name,向mds查询创建dentry和inode的位置,去meta server创建dentry和inode forget void (*forget) (fuse_req_t req, fuse_ino_t ino, uint64_t nlookup); 根据inodei inode id 和name,向mds查询创建dentry和inode的位置,去meta server创建dentry和inode void (*readlink) (fuse_req_t req, fuse_ino_t ino); 根据inodeid,向mds查询创建inode的位置,去meta server获取inode结构,并缓存 从inode结构中取出link contents,调用f0 码力 | 11 页 | 487.92 KB | 6 月前3 CurveFS Client 概要设计mode_t mode, dev_t rdev); 这两个函数的功能是类似,都用来创建文件。 根据parent inode id 和name,向mds查询创建dentry和inode的位置,去meta server创建dentry和inode 预分配一些空间?可先不做 mkdir© XXX Page 7 of 11 void (*mkdir) (fuse_req_t req, fuse_ino_t parent parent, const char *name, mode_t mode); 根据parent inode id 和name,向mds查询创建dentry和inode的位置,去meta server创建dentry和inode forget void (*forget) (fuse_req_t req, fuse_ino_t ino, uint64_t nlookup); 根据inodei inode id 和name,向mds查询创建dentry和inode的位置,去meta server创建dentry和inode void (*readlink) (fuse_req_t req, fuse_ino_t ino); 根据inodeid,向mds查询创建inode的位置,去meta server获取inode结构,并缓存 从inode结构中取出link contents,调用f0 码力 | 11 页 | 487.92 KB | 6 月前3
 Curve质量监控与运维 - 网易数帆MDS MDS MDS MDS MDS ChunkServer MDS MDS Client Daily reporter MDS MDS SnapshotClone Server HTTP采集 bvar数据 定时获取图表 并发送邮件 获取集群拓扑信息 Curve利用brpc内置的bvar组件生成监控指标,并 使用部署在docker的三个组件进行监控指标的处 理与展示: 20/33监控指标(metric)的生成 Curve使用brpc内置的bvar计数器类库,来生成监控指标,其特点是:  thread local存储,减少了cache bouncing,性能开销极小;  支持在 brpc server 服务的端口上以web portal的方式导出和查询监控指标: 常用的bvar数据类型:  bvar::Adder Curve质量监控与运维 - 网易数帆MDS MDS MDS MDS MDS ChunkServer MDS MDS Client Daily reporter MDS MDS SnapshotClone Server HTTP采集 bvar数据 定时获取图表 并发送邮件 获取集群拓扑信息 Curve利用brpc内置的bvar组件生成监控指标,并 使用部署在docker的三个组件进行监控指标的处 理与展示: 20/33监控指标(metric)的生成 Curve使用brpc内置的bvar计数器类库,来生成监控指标,其特点是:  thread local存储,减少了cache bouncing,性能开销极小;  支持在 brpc server 服务的端口上以web portal的方式导出和查询监控指标: 常用的bvar数据类型:  bvar::Adder- : 计数器,默认0, varname << N相当于varname ChunkServer、Etcd、物理节点等)。 2. Prometheus依据上述配置文件,发现相应服务。 3. Prometheus server以pull的方式,定期从Curve集群中 MDS、ChunkServer、Client等组件的brpc Server拉取 相应的监控指标,并存储在本地。 22/33监控指标的可视化 Curve通过Grafana实现监控指标的可视化,其展示效果如下: 0 码力 | 33 页 | 2.64 MB | 6 月前3
 OID CND Asia Slide: CurveFSon I/O jitter delay ● Disk failure ● Server failure ● Server fake death ● Slow response Faults case curve i/o 抖动 Disk failure 4s Server failure 4s Server fake death 4s Slow response 1s frequentlyData to physically isolate machine resources Zone is the basic unit of fault isolation Server Indicates a physical server Chunkserver is a service instance on a physical serverCurve metadata organization0 码力 | 24 页 | 3.47 MB | 6 月前3 OID CND Asia Slide: CurveFSon I/O jitter delay ● Disk failure ● Server failure ● Server fake death ● Slow response Faults case curve i/o 抖动 Disk failure 4s Server failure 4s Server fake death 4s Slow response 1s frequentlyData to physically isolate machine resources Zone is the basic unit of fault isolation Server Indicates a physical server Chunkserver is a service instance on a physical serverCurve metadata organization0 码力 | 24 页 | 3.47 MB | 6 月前3
 Curve for CNCF MainRBD)Performance (vs. Ceph RBD)CurveBS Features • RAFT for data consistency • minor impaction when chunk server fails • Precreated chunk file for volume space mapping • high performance framework • Use bthread STORAGE/DISK FAILURE INFLUENCE without I/O disruption I/O jitter occasionally CAN SYNC WITH REMOTE DISK SERVER Y NI/O Jitter (vs. Ceph) 3 replicas with 9 nodes cluster each node has 20 x SSD, 2xE5-2660 v4 and mem FAULTS CASE CURVE I/O JITTER CEPH I/O JITTER COMMENT ONE DISK FAILURE 4s 7s ONE SERVER FAILURE 4s 7s SERVER RESPONSE VERY SLOW 4s unrecoverable frequently delay of disk i/o are very long NETWORK0 码力 | 21 页 | 4.56 MB | 6 月前3 Curve for CNCF MainRBD)Performance (vs. Ceph RBD)CurveBS Features • RAFT for data consistency • minor impaction when chunk server fails • Precreated chunk file for volume space mapping • high performance framework • Use bthread STORAGE/DISK FAILURE INFLUENCE without I/O disruption I/O jitter occasionally CAN SYNC WITH REMOTE DISK SERVER Y NI/O Jitter (vs. Ceph) 3 replicas with 9 nodes cluster each node has 20 x SSD, 2xE5-2660 v4 and mem FAULTS CASE CURVE I/O JITTER CEPH I/O JITTER COMMENT ONE DISK FAILURE 4s 7s ONE SERVER FAILURE 4s 7s SERVER RESPONSE VERY SLOW 4s unrecoverable frequently delay of disk i/o are very long NETWORK0 码力 | 21 页 | 4.56 MB | 6 月前3
 Curve设计要点一个对象作为 EC 组的一个满条带 挖洞即时空间回收拓扑 • 管理和组织机器 • 软件单元:chunkserver • 物理机:server • 故障域:zone • 物理池:poolIO流程 client MDS leader Chunk server 1、发起请求 2、查询元数据 5、返回结果 5、返回结果 user 3、查询leader节点 4、向leader cs发起请求 无需人工干预 • 对io影响几乎无影响易运维 • 升级秒级影响 • 客户端采用CS架构 • NEBD Client: 对接上层业务 • NEBD Server: 接受请求 调用Curve Client处理 • 升级只需重启Server 秒级影响易运维 • 丰富的metric体系 • prometheus + grafana 可视化 • 每日报表 • 丰富的数据定位问题易运维 •0 码力 | 35 页 | 2.03 MB | 6 月前3 Curve设计要点一个对象作为 EC 组的一个满条带 挖洞即时空间回收拓扑 • 管理和组织机器 • 软件单元:chunkserver • 物理机:server • 故障域:zone • 物理池:poolIO流程 client MDS leader Chunk server 1、发起请求 2、查询元数据 5、返回结果 5、返回结果 user 3、查询leader节点 4、向leader cs发起请求 无需人工干预 • 对io影响几乎无影响易运维 • 升级秒级影响 • 客户端采用CS架构 • NEBD Client: 对接上层业务 • NEBD Server: 接受请求 调用Curve Client处理 • 升级只需重启Server 秒级影响易运维 • 丰富的metric体系 • prometheus + grafana 可视化 • 每日报表 • 丰富的数据定位问题易运维 •0 码力 | 35 页 | 2.03 MB | 6 月前3
共 21 条
- 1
- 2
- 3













