zoukankan      html  css  js  c++  java
  • 分布式存储系统sheepdog

    Sheepdog,是由NTT的3名日本研究员开发的开源项目,主要用来为虚拟机提供块设备。

    其架构例如以下:

     

    以下,我们将从架构、模块等几个方面来介绍下:

    一、架构图

    如上图:

    採用无中心节点的全对称架构,无单点故障,存储容量和性能可线性扩展;

    新增节点通过简单配置可自己主动增加(IP:PORT),数据自己主动实现负载均衡;

    节点故障时,数据可自己主动恢复;

    直接支持QEMU/KVM应用;

    二、模块

    如上图:

    由corosync,完毕集群成员管理和消息传递;

    由Qemu作为Sheepdog的client,提供NBD/iSCSI协议支持;

    由gateway实现数据的DHT路由,由storage server数据数据本地存储;

    三、数据详细存储方式

    如上图:

    以VDI Object存储VM数据,向用户暴露的是一个块设备;

    包括4种数据对象:VDI、Data Object、属性对象和用于快照的VM实时状态数据对象;

    以4M的小文件方式实现OBS,但非常easy基于此扩展,如使用使用库替代4M的小文件;

    四、集群管理

    1. 採用corosync,tot是em协议的一个开源实现。totem协议主要用来实现集群成员管理和可靠顺序传输。

    2. corosync通过提供一个CPG API来提供服务。

    首先,绑定一个fd到cpg_handle,并注冊回调函数cpg_dispatch;

    然后将fd注冊到epoll;

    corosync上消息会触发fd改变,通用epoll触发回调函数cpg_dispatch;

    这里主要有两个函数,cpg_deliver_fn和cpg_confchg_fn,分别相应sd_deliver和sd_confchg.

     当中,sd_deliver负责集群从corosync给本地发消息,主要是针对VDI进行操作;而sd_confchg主要是对node进行操作,用来监控集群成员变化。

    五、存储对象管理

    集群对象版本号epoch;

    obj文件夹下,每一个新的epoch要相应创建一个新的文件夹;

    可从epoch恢复数据;

    六、一致性模型

    通过epoll机制保证;

    通过数据操作实现强一致性(多副本的写同一时候成功时,才向client返回); 

    七、DHT路由

    代理路由方式;

    由ip:port生成节点编号,做一致性哈希;

    八、副本放置

    一致性哈希;

    虚拟节点;

    如需了解更具体信息,可參考其官网:http://www.osrg.net/sheepdog/

  • 相关阅读:
    架构师养成记--19.netty
    架构师养成记--18.NIO
    架构师养成记--17.disrunptor 多生产者多消费者
    JS计算字符长度、字节数 -- 转
    BootStrap Modal 点击空白时自动关闭
    架构师养成记--16.disruptor并发框架中RingBuffer的使用
    架构师养成记--15.Disruptor并发框架
    架构师养成记--14.重入锁ReentrantLock 和 读写锁 ReentrantReadWriteLock
    049、Java中使用switch判断,不加入break时的操作
    048、Java中使用switch判断
  • 原文地址:https://www.cnblogs.com/zfyouxi/p/4357374.html
Copyright © 2011-2022 走看看