分布式虚拟块设备

Download Report

Transcript 分布式虚拟块设备

DVD-Distributed block device
郭栋 092302
目录
背景
 DBD简介
 客户端设计
 分布式存储策略
 综合流程
 相关项目
 demo

背景
Iaas提供商需要保证系统有高可用性
 物理硬件故障无法预测
 需要一种冗余备份机制
 传统的RAID技术成本高,实现复杂
 需要一种更灵活更简单的机制

概念

DBD
 Distributed block device
D:在Linux下以设备方式使用
 B:设备模拟类似磁盘的块设备
 D:网络节点上的块设备数据分块冗余到各
个节点
 不是文件系统,不同于HDFS

主要模块

客户端(计算节点)
 虚拟驱动模块(内核态)
 本地缓存服务模块

服务端(存储节点)
 存储服务模块
 服务端缓存模块
 自动部署、恢复模块
整体架构
Tree-group storage cluster
Memcache diskcache
Client deamon
TCP
G1 G2 G3
d
VBD
VBD
N1
N3
N5
VM
VM
N2
N4
N6
Hypervisor
客户端
存储集群
计算节点
核心态
用户态
Netlink
虚拟驱动
缓存数据
虚拟设备创建
共享内存
IO阻塞和转发
虚拟设备管理
远程数据请求
操作界面
tcp
计算节点组件
App
User sp
Ddb client
deamon
Memcache
IO system call
netlink
Kernel sp
shm
Linux kernel
Device
driver
Diskcache
组件关系
Dvdb client
控
制
信
号
netlink
IO
请
求
Device
driver
共享内存
缓存策略
异步缓存,本地内存+本地硬盘二级缓存
 内存缓存用哈希表索引,LRU淘汰到硬盘
 本地硬盘缓存在内存中通过b+tree索引

yes
Mem
cache
Read req
yes
no
Disk
cache
no
TCP read
Set cache async
分布式存储策略
数据均匀分布
 多个拷贝
 无单点故障

 一致性哈希存储(sheepdog)
 树组存储(DBD)
一致性哈希存储(sheepdog)
每个块设备被分为4M大小的object
 对象id哈希映射到环上
 采用虚拟节点均衡数据

另外一种方式

一致性哈希缺点:





数据倾斜
虚拟节点容易造成数据丢失
节点失效恢复难度大(异构分布式)
数据难以管理
树组存储
 同构分布+异构分布
○ 同构分布:多个数据拷贝
○ 异构分布:数据分散
基本概念
组采用树型结构组织
 每个组由多个物理存储节点构成
 不同组数据异构
 相同组数据同构
 每个节点具有全局视图
 每个组有唯一32位id,组内节点id相同
 典型为二叉树形式

存储逻辑结构
00
10
01
11
00
10
01
11
DBD分布式存储特点

数据:
 块设备分为4M大小的元组(tuple)
 每个tuple由唯一64位id索引,从0开始编号
 前32位为设备id,后32位为tupleid
○ 最多支持4294967296个设备
○ 最每个设备最大为16PB

物理节点:
 每个节点用32位唯一id编号
 该编号为逻辑树节点编号
 数据存储在叶子节点上
存储方式
根据64位tuple id的后32位计算存放的组
 例子:

 Tuple id:0x0000 0000 0000 0002
00
10
01
11
00
10
01
11
数学模型

对于一个树形结构,每个节点可由以下一
维向量表示:
𝑁𝑖𝑑 : {𝑑, 𝑙, 𝑡𝑦𝑝𝑒, 𝑣𝑓𝑖𝑟𝑠𝑡 , 𝐷}
id:节点的编号
d:节点的度
type:节点类型(内部节点、叶子节点)
𝑣𝑓𝑖𝑟𝑠𝑡 :该节点第一个数据的id
D:该节点所有父辈节点度的积
-
0
1
01
2
11
002
02
102
12
202
𝑁𝑖𝑑 : {𝑑, 𝑙, 𝑡𝑦𝑝𝑒, 𝑣𝑓𝑖𝑟𝑠𝑡 , 𝐷}
𝑁− : {3, 0, 1, 0, 0}
𝑁2 : {2, 1, 1, 2, 0}
𝑁02 : {3, 2, 1, 2, 6}
𝑁102 : 0, 3, 0, 8, 18
𝑁202 : {0, 3, 0, 14, 18}
对于给定id的tuple,求其应该存放的节点id
 从根节点开始进行如下递归计算:
N=根节点
do{

𝑖𝑑 =[(tuple_id-N𝑣𝑓𝑖𝑟𝑠𝑡 )/D]%d
N=𝑁𝑖𝑑
} While(type != 0(叶子节点)
参数计算

𝑁𝑖𝑑 : {𝑑, 𝑙, 𝑡𝑦𝑝𝑒, 𝑣𝑓𝑖𝑟𝑠𝑡 , 𝐷}

𝑣𝑓𝑖𝑟𝑠𝑡 = id最高位 ∗ 父节点𝐷 + 父节点𝑣𝑓𝑖𝑟𝑠𝑡

D=父节点D * 父节点d
特殊情况(DBD)

最典型的情况是二叉树,可递归使用异或
计算,此时情况会变得特别简单
00
10
01
11
00
10
01
11
二叉树存储

直接用叶子节点id与tuple id的后l位进行
异或计算,结果为0表示应该存在该节
点。
00
10
01
11
00
10
01
11
…10010
…11110
增加节点(增加存储能力)
000
100
000
100
10
01
11
10
01
11
增加节点(增加备份)
00
10
01
11
00
10
01
11
00
节点移除(人为)
00
10
01
11
10
01
11
复用方式
00
10
01
11
00
10
01
11
等价效果
0
1
0
1
存取过程

存:
 客户端连接集群中任意一个节点(Load
Banlence),如果连接失败,选择另一节点,
把tuple发给它,。
 节点将tuple.id 和各组id进行异或运算,得出
目标组信息。
存取过程
随机选择目标组内一个节点(LB),将数
据传递给该节点,复制完毕后,进程立即
返回,客户端返回写入成功。
 如果复制失败,该节点失效,发送广播信
息到所有节点,通知移除该id节点,同时
选择该组另一个节点复制数据。
 该节点收到数据后,发送组播消息,异步
复制数据到同组节点。

存取过程

取:
 客户端连接任意一个集群节点,发送请求
(addr, size)
 该节点返回数据所在组的任一个节点ip给客户
端,客户端重新连接目标节点,请求数据。
自动化部署、自恢复

新节点加入:
 参数:组id
 广播信息到所有节点,所属组同步数据到节点后,广播新
节点加入信息,节点更新全局视图
 如果判断是节点分裂(出现新高位1),该组迁移数据后,
广播新节点加入信息。

节点失效:
 在某次IO操作中发现,发现此节点失效的节点广播该信
息,更新全局视图

人为移除:
 该节点广播移除信息后结束进程。

缩容:
 数据复制到最高位取0的group中
 广播退出信息,结束进程。
Landmarks
单机虚拟块设备(√)
 本地内存虚拟块设备(√)
 双机网络虚拟块设备(进行中。。。)
 双机分割数据存储(todo)
 Tree-group实现(todo)
 块存储到tree-group中(todo)

面临的问题
驱动程序IO阻塞
 多设备如何并发?
 Netlink or kernel socket?
 Io数据边界和通信协议

类似项目
Sheepdog
 Ndb
 Dndb
 Udisk
 Amazon ebs

DVBD-Distributed virtual block device
郭栋 092302