绵阳建设局官方网站,沈阳中讯国际网站建设,威海城乡与住房建设部网站,作风建设年网站分布式存储概述
常用的存储可以分为DAS、NAS和SAN三类
DAS#xff1a;直接连接存储#xff0c;是指通过SCSI接口或FC接口直接连接到一台计算机上#xff0c;常见的就是服务器的硬盘NAS#xff1a;网络附加存储#xff0c;是指将存储设备通过标准的网络拓扑结构#xff…分布式存储概述
常用的存储可以分为DAS、NAS和SAN三类
DAS直接连接存储是指通过SCSI接口或FC接口直接连接到一台计算机上常见的就是服务器的硬盘NAS网络附加存储是指将存储设备通过标准的网络拓扑结构比如以太网连接到计算机上使用。例如NFS和Samba文件共享系统SAN存储区域网络目前SAN存储有两种一是基于光纤通道的FC SAN二是基于以太网的IP SAN也就是iscsi
常见的存储类型有文件存储、块存储和对象存储
文件存储对于需要多个主机实现数据共享的场景可以使用例如nginx读取由多个tomcat写入的数据场景块存储块存储在使用的时候需要格式化为指定的文件系统然后挂载使用对操作系统兼容性较好。私有云和公有云虚拟机的磁盘就可以使用块存储对象存储适用于数据不会经常变化、删除和修改的场景。例如短视频、APP下载等可以使用对象存储
常用的存储设备包括单机存储、商业存储和分布式存储。
分布式存储是一种数据存储技术通过网络使用企业中每台机器上的磁盘空间并将这些分散的存储资源构建为一个虚拟的存储设备数据分散存储在企业的各个角落。
常见的分布式存储包括Ceph、GlusterFS、TFS、FAstDFS等
在分布式存储系统中将数据分为数据和元数据。元数据就是文件的属性信息文件名、权限、大小、时间戳等当客户端将产生的数据写入到分布式存储系统中的时候会有一个服务Name node提供文件元数据路由的功能即告诉客户端去哪个服务器请求文件内容然后再由数据存储节点Data node提供数据的读写请求及数据的高可用
ceph介绍
ceph官网https://ceph.io/en/ ceph官方文档https://docs.ceph.com/en/quincy/
Ceph是一个开源的分布式存储系统同时支持对象存储、块设备、文件系统。
Ceph支持EB1EB1,000,000,000GB级别的数据存储ceph把每一个待管理的的数据流文件等数据切分为一到多个固定大小的对象数据并以其为原子单位完成数据的读写。
ceph的优势 高性能 摒弃了传统的集中式存储元数据寻址的方案采用CRUSH算法数据分布均衡并行度高能够支持上前节点存储规模支持TB到PB级别数据存储 高可用性 副本数可以灵活控制支持故障域分割强一致性多种故障场景自动进行修复自愈没有单点故障自动管理 高可扩展性 去中心化扩展灵活 特性丰富 同时支持块、对象和文件存储支持多语言客户端
ceph架构 如上边两张图所示在ceph存储系统中最底层是rados存储集群然后上面是逻辑划分的pool和PG。再上层是librados相当于rados集群的API接口。
ceph提供三种存储方式radosgw对象存储、rbd块存储、cephfs文件系统存储。其中radosgw和rbd是基于librados实现的cephfs则是直接在rados集群上实现的。用户可以通过不同的方式调用这三种存储接口存取数据当然也可以直接通过librado存取数据。
但不论以哪种方式存取数据都需要指定pool数据会映射到pool的pg上。
Rados集群 一个rados集群由monitor、manager、osd和mds这四类节点组成其中mds是可选的当使用cephfs接口时需要部署mds节点用来存储文件元数据。
1. moitor节点 用来运行ceph-mon进程维护集群状态映射maintainers maps of the cluster state比如ceph集群中存储池数量、PG数量以及存储池和PG的映射关系等。包括monitor map、manager map、osd map、mds map和crush map这些映射map是ceph 守护程序相互协调所需的关键集群状态此外monitor还负责管理守护程序和客户端之间的身份验证cephx。通常需要至少3个monitor节点来实现高可用。
2. manager节点 用于运行ceph-mgr进程ceph-mgr负责跟踪运行时指标和ceph集群的当前状态包括存储利用率当前性能指标和系统负载。ceph-mgr还托管基于python的模块来管理和公开ceph集群信息包括基于WEB的ceph仪表盘和REST API。通常需要至少两个manager节点来实现高可用。
3. OSD节点 用于运行ceph-osd进程用来存储数据正常情况下操作系统上的一个磁盘就是一个osd守护程序osd用于处理集群数据复制、恢复、重均衡等并通过检查其它osd守护程序的心跳来向监视器和管理器提供一些监视信息。 通常需要至少3个osd节点才能实现数据高可用。
4. mds节点 配和cephfs接口使用用来存储文件元数据
ceph数据读写流程
首先说明一下pool和PG
Pool存储池用于组织PG存储池的大小取决于底层的存储空间 PG(Placement group)逻辑归置组PG用来对object进行组织和位置映射object属于PGPG属于pool。pool和PG都是抽象的逻辑概念
ceph集群部署完成后要先创建存储池才能向ceph写入数据创建存储池时需要指定PG数量。 客户端向ceph存储文件的过程具体如下
第一步文件到object的映射
将File切分为固定大小的对象默认4M,计算出每个对象的oidoid(ino ono)
inoinode number文件的元数据序列号可以理解为File的唯一Id
onoFile切分产生的某个object的序列号
oid每个切分出来的object的唯一id由ino和ono组合得到第二步object到PG的映射
在file映射到object之后就需要将每个object映射到pg计算公式如下
hash(oid) mask - pg-id
mask存储池pg数量-1
首先对oid进行hash计算得到一个值然后将这个值与mask进行按位与运算的到pgid第三步PG到OSD的映射
通过CRUSH算法将pgid带入其中计算得到n个osd。这n个osd共同负责存储维护这个个PG中的所有object数据
crush(pgid) - (osd1, osd2, ...)第四步client与主osd通信写入数据 第五步主osd将数据同步给备份osd等待备份osd返回确认消息 第六步所有备份osd确认写入完成后主osd返回确认消息给客户端
ceph元数据保存方式
在ceph中对象的元数据以key-value的形式存在在rados中有两种实现xattrs和omap。
xattrs扩展属性是将元数据保存在对象对应文件的扩展属性中并保存到系统磁盘上这要求存储对象的本地文件系统一般是xfs支持扩展属性omapobject map对象映射是将元数据存储在本地文件系统之外的独立key-value存储系统中在使用filestore时是leveldb在使用bluestore时是rocksdb。
ceph可选后端支持多种存储引擎比如filestore、bluestore、memstore等。早期主要使用filestore但由于filestore存在一些问题对ssd设备支持不够好写放大等所以目前主要使用bluestore。
filestore与leveldb
ceph早期使用filestoreleveldb组合来保存数据和元数据leveldb是一个持久化存储的KV系统和Redis这种内存型的KV系统不同level是将大部分数据存储在磁盘上但是需要将磁盘上的空间格式化为文件系统。
Filestore将数据保存在与Posix兼容的文件系统例如xfsbtrfsext4。在Ceph后端使用传统的Linux文件系统虽然提供了一些好处但也有代价如性能、对象属性与磁盘本地文件系统属性匹配存在限制等。
Bluestore和rocksdb
由于leveldb依然需要磁盘文件系统的支持后期facebook对其进行改进产生了rocksdb。
使用bluestore时会在osd中划分出一部分空间格式化为BlueF文件系统用于保存rocksdb中的元数据信息并实现元数据的高可用。
Bluestore的最大特点是构建在裸磁盘设备之上并且对诸如SSD等设备做了很多优化工作。它拥有以下优势
对全SSD及NVMe SSD闪存适配绕过本地文件系统层直接管理裸设备缩短IO路径严格分离元数据和数据提高索引效率使用KV索引解决文件系统目录结构遍历效率低的问题解决filestore日志双写问题增加数据校验和数据压缩功能
RocksDB通过中间层BlueRocksEnv访问文件系统接口。这个文件系统就是BlueFS它与传统的Linux文件系统是不同的它不是VFS下的通用文件系统而是一个用户态的逻辑。BlueFs通过函数接口API非POSIX的方式为BlueRocksEnv提供类似文件系统的能力。 Bluestore的逻辑架构如上图所示其中各模块的作用如下
RocksDBBluestore将元数据全部存放RocksDB中这些元数据包括存储预写式日志WAL、对象元数据、ceph的omap数据信息以及分配器的元数据。BlueRocksEnv这是RocksDB与BlueFS交互的接口RocksDB提供了文件操作的接口EnvWrapperEnv封装器可以通过继承实现该接口来自定义底层的读写操作BlueRocksEnv就是继承自该EnvWrapper实现对BlueFs的读写BlueFSBlueFS是Bluestore针对RocksDB开发的轻量级文件系统用于存放RocksDB产生的.sst文件和.log文件BlockDeviceBluestore抛弃了传统的ext4、xfs文件系统使用直接管理裸盘的方式Bluestore支持同时使用多种不同类型的设备在逻辑上Bluestore将存储空间划分为三层慢速Slow空间、高速DB空间、超高速WAL空间不同的空间可以指定使用不同的设备类型当然也可以使用同一块设备
Bluestore的设计考虑了Filestore中存在的一些问题抛弃了传统的文件系统直接管理裸磁盘设备缩短了IO路径同时采用ROW方式避免日志双写问题在性能上有了极大提高。
CRUSH算法简介
CRUSH是指Controllers replication under scalable hashing可控的、可复制的、可伸缩的一致性hash算法
Ceph使用Crush算法来存放和管理数据它是Ceph的智能能数据分发机制。Ceph使用Crush算法来准确计算数据应该被保存到哪里以及从哪里读取数据。和存储元数据不同的是Crush按需计算出元数据因此它就消除了对中心式的服务器/网关的需求它使得Ceph客户端能够计算出元数据该过程也称为Crush查找然后直接和OSD通信。