依托自研力量,给共享集群存储服务一个优选

YashanDB共享集群有三大关键组件,崖山集群服务(YCS)、崖山集群文件系统(YFS)、DB组件。上一篇共享集群系列文章《为何共享集群的高可用能力被频频称赞,它的机制有何不同?》深入解析了关键组件的高可用机制与核心技术,本文将深入探讨崖山集群文件系统(YFS)关键技术和特性,并阐释我们选择自主研发共享集群存储服务组件的原因。

崖山集群文件系统(YFS)是YashanDB的一个用户态存储服务组件,提供了文件系统以及磁盘组管理能力,用于管理共享磁阵。用户可通过YFS实现共享磁阵上基本的文件/文件夹的创建、删除、浏览等功能。此外,YFS还提供了管理diskgroup(磁盘组)、failuregroup(故障组)等重要特性,以支持共享集群的存储高可用。

图1 YashanDB共享集群总体架构

Q.为什么选择自研YFS?

一是YashanDB共享集群作为高性能、高可用集群,对存储组件提出几大高要求

  1. 高效访问共享存储。集群内多节点访问相同的存储设备,存储本身为各节点的临界资源,需要一套机制,协调各节点,高效、正确的读写共享存储资源。

  2. 支持Bypass操作系统缓存。YashanDB 集群集成了自研的聚合内存技术,利用集群各节点内存,共同构架了一个大容量、高效率的cache。这也意味着不再需要操作系统IO缓存,也避免了系统缓存造成的延迟,引起各节点数据不一致的可能性。

  3. 提升存储IO性能,最大程度发挥集群架构的优势。

  4. 保障集群高可用性。是DB数据到存储设备的必经之路,存储组件必须保证数据不丢失、数据服务高可用。

二是市面上现有的解决方案无法满足YashanDB共享集群以及集群高可用要求

首先,在项目初期,优先考虑过现有系统是否可以支撑YashanDB集群需求,但Ext3/4等单机文件系统天生不支持共享存储,需要构造特定条件,把单机文件系统当作共享文件系统使用。

其次,GFS、NFS等方案性能无法满足YashanDB集群高可用要求。GFS、NFS等方案与YashanDB集群的场景匹配度不高,通用方案没法针对DB特定场景优化,额外的通信开销较多,仅能达到能用的程度。支撑YashanDB作为高性能核心交易系统,还是有一定差距的。

尝试了诸多方案后,我们决定自研崖山集群文件系统YFS,直接管理裸设备。

YFS管理裸设备的优势

优势1:源码可控,定向提升IO性能。根据DB的业务需求和业务特征,在文件系统层做定向的IO性能优化。

优势2:解决元数据同步问题

优势3:高可用能力下沉,简化业务层逻辑。在文件系统层支持部分DB高可用能力,如解决脑裂双写、数据损坏等问题。

优势4:提供文件系统接口,抽象存储细节。在同一抽象层里,崖山集群文件系统YFS可以跟单机的文件系统具备相同的接口,如支持open、close、read、write等接口。

YFS最终技术选型

内核态or用户态

在设计初期,我们面临两个选择:YFS应该部署在内核态还是用户态。考虑到YFS的应用场景、部署环境等因素,最终YFS是一个用户态的存储服务组件。

一是用户态服务灾备恢复速度快。内核模块异常可能引起系统crash,得益于Linux系统的进程隔离,用户态服务异常几乎不会引起系统级灾难,可以快速从异常中恢复。

二是我们希望YFS可以不依赖特定内核版本。YashanDB共享集群的部署环境较复杂,内核版本繁杂,还有一些厂商定制内核,我们希望YFS是一个便携的服务,不依赖特定的内核版本。

三是考虑到YFS的服务对象,选择用户态性价比较高。内核模块确实具备最高的系统权限,可以访问从硬件相关的底层特性,到进程资源、状态等信息,不过YFS是面向YAC这样特定业务的文件系统,服务对象简单的多,在用户态有其他方案可以实现同等效果,而且成本可控。

四是用户态进程开发、调试比内核态更便捷。YFS具备可伸缩的软件架构,用户态下更方便使用一些高级库支持,不会受制于内核的限制。

图2 内核态和用户态优劣势

架构

YFS由共享存储上的元数据和YFS服务进程构成。元数据包含文件、目录信息,YFS的一些内部状态等。YFS通过多副本技术,文件在共享存储中具备可配置的冗余。崖山集群文件系统YFS架构详见下图:

图3 YFS架构图

关键技术

下面我们介绍YFS是如何实现高性能、高可用特性。主要从物理存储结构、逻辑存储结构、逻辑对象等方面描述。

物理存储结构

YFS的磁盘空间分为3个逻辑层次,block、AU(Allocation Unit)、Extent,目前单个磁盘可以支持到PB级,能兼容市面上绝大多数存储设备。

  • block

  • 是YFS的最小管理单元

  • 是YFS元数据的最小管理单元,通常为4K

  • 缺点:1)颗粒度较小,需要大量的管理结构;2)磁盘空间碎片化,连续IO性能不好

  • AU(Allocation Unit)

  • 连续的block整合成一个AU

  • 是YFS管理磁盘的最小单位,支持多种规格配置

  • 优点:兼顾存储空间管理的灵活性、和效率

  • Extent

  • 多个连续的AU也会组成更大的连续区域Extent

  • YFS支持变长Extent,可管理PB级的单盘

  • 优点:1)可以扩大FAT的寻址能力;2)适配市面常见的存储规格

逻辑存储结构

YFS作为集群的存储组件,除了以外部磁阵实现数据高可用外,也内置一套文件级的冗余机制来实现数据的高可用。并引入故障组概念,描述YFS如何管理磁盘故障特性。

  • 故障组

  • 故障组描述磁盘故障相关性

  • 合理配置故障组是管理员的责任,不同运维场景,分配不同

  • YFS通过故障组,感知共享存储的外部环境,识别各磁盘故障率之间的相关性,安排冗余数据的存储位置

  • 磁盘组

YFS管理多个磁盘组,并根据各磁盘组的差异性,对管理的存储资源分类,形成3层结构:

  • 各磁盘组故障、资源、业务隔离

  • 磁盘之间通过故障组描述各磁盘故障相关性

  • 各故障组的磁盘共同支撑冗余机制,数据高可用

图4 YFS磁盘管理层次图

逻辑对象

YFS的设计参考了现行流行文件系统的实现,并根据YashnDB的业务特征做了很多改进。

一是YashanDB文件尺寸跨度较大,我们希望兼顾大小文件管理的便利,决定YFS采用二级索引,并用其他机制来解决二级索引可能面临的文件大小限制问题。

  • 二级索引:YFS的FAT采用简化的2级索引,控制文件元数据的大小。

  • 1级直接索引的前半部分slot,直接指向大小为1AU的Extent,紧凑的管理小文件。即对于小文件只需要自己的数据AU和4K的控制信息即可,管理效率较高。

  • 1级索引的后半部分slot指向间接索引AU,索引AU由一组4K的间接索引block构成,其中的slot才指向数据Extent。

  • 阶梯式变长Extent:YFS采用变长Extent,进一步提升对超大文件的管理能力,实现更大的文件只需要较少的间接索引slot即可管理。

  • 在文件的第2万个AU处Extent扩展为4AU,第10万个AU处扩展为16个。

通过二级索引和阶梯式变长Extent,YFS最大可支持500PB的单个文件。

二是YFS奉行“一切皆文件”的Linux哲学,所有元数据均采用文件管理,根据用户是否可见分为元文件和用户文件两类。具体文件分类如下:

  • 元文件,用户不可见。

  • 超级文件。是YFS元数据的入口文件,记录所有文件的元信息。YFS通过超级文件完成元数据自举。

  • Dir文件。用于记录YFS的目录层次。

  • YFS Redo,实现YFS的原子操作,也是YFS高可用重要组成部分。

  • 等等。

  • 用户文件,由用户通过createFile创建,保存用户数据

采用该管理方式具有两个优势,一是元数据和用户数据统一由文件管理,共用YFS文件级高可用策略;二是元数据以文件管理,无论元文件的数量还是大小,都具备无限扩展能力,使得YFS具备无限的演进可能。

特性

高可用性

YFS具备Diskgroup级(磁盘级)的资源隔离,保障YFS持续可用。

一是物理存储隔离,不存在横跨多个磁盘组的磁盘,某个故障的磁盘组不会影响其他磁盘组的数据可用性,在极端情况下,灾难性损失控制在磁盘组内;二是磁盘运行时资源隔离,可避免故障磁盘组影响其他磁盘组的业务,保证YFS业务的持续性。

YFS内置Redo,保存在元文件中,对用户不可见。

一是保证元数据操作的原子性,不因个别节点故障而使YFS集群状态不确定;二是实现集群状态一致性。YFS集群会选举协调节点,管理集群元数据变更业务,通过日志复制同步实现集群状态一致性;三是协调节点故障时,YFS集群会选举新的协调节点,利用YFS Redo文件恢复元数据状态。

YFS提供实时数据修复能力,自动切换故障副本,切换过程对DB透明,业务无感知。

在读取数据时,会乱序读取副本数据,并校验数据,如果发现数据损坏,则自动切换副本继续读取,直到读到完整数据。有助于YFS承载YashanDB部分高可用能力。

YFS通过快速恢复区技术作为单副本时的补充,对YFS元数据提供额外的保护。

快速恢复区记录YFS元数据变更的历史数据,当发现YFS元数据故障时,会尝试从快速恢复区找到最近的历史数据,恢复YFS元数据。

扩缩容能力

YFS支持集群横向扩容和对空间扩缩容。在横向扩容中,允许在线加入或移除节点,集群管理模块会自动识别到新节点;同时YFS支持在线增减盘,支持在线创建磁盘组、向已有磁盘组增加故障组、向已有故障组增加磁盘三种。

用户可以根据实际的运维场景,随着业务增长,按需扩充YFS管理的存储空间。

高性能IO

YFS具备极好的性能指标,支撑YashanDB集群取得行业领先的性能测试成绩。YFS采用多种技术和架构,突破传统文件系统的性能瓶颈。

一是YFS直接管理裸设备,在大批量读写操作时,有效发挥集群多节点的并发IO优势,实现系统总体吞吐效率最大化。

二是YFS借助元数据缓存,各节点IO过程完全独立,**除数据读写操作外,不会引入额外的通信开销,**不会因为更多的节点发起而导致整体IO性能下降。

三是YFS实现了AU级条带化。当读取数据时,YFS会将IO请求离散到不同的磁盘,系统总体IO带宽可以超过单个磁盘的带宽。

四是YFS支持可定制的AU size,根据业务的IO特征,选择匹配的AU size,在顺序IO时获得最佳性能。

图5 YFS建表删表性能参考图

支持多种常见API

YFS支持大多数常用文件语义接口,文件的增删改查、读写等,目录的基本操作等,满足YashanDB的业务需要。

图6 YFS适用的文件语义接口

YFS是用户态文件服务,我们开发了专用的管理客户端,方便管理员登陆YFS执行日常管理,兼容常见的Linux shell指令。

图7 YFS适用的文件管理命令

YFS作为YashanDB共享集群的存储组件,为了满足集群高可用性而研发,提升了集群存储的IO性能、解决集群元数据同步问题、承载集群部分高可用能力。未来YFS将持续迭代,提供更多强大易用的功能,助力用户实现更稳定、更灵活的集群存储管理。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/pingmian/53055.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

NVIDIA RTX 50系列大爆料:功耗飙升600W,性能直逼RTX 4090 1.?倍,你准备好了吗?

在科技圈的万众瞩目下,知名硬件爆料大神Kopite7kimi再次为我们揭开了NVIDIA下一代GeForce RTX系列——“Blackwell”阵容的神秘面纱。这次,关于新显卡的功耗信息不再是模糊的概念,而是实实在在的数字,让人不禁对即将到来的性能飞跃…

ELK学习笔记(一)——使用K8S部署ElasticSearch8.15.0集群

一、下载镜像 #1、下载官方镜像 docker pull elasticsearch:8.15.0 #2、打新tag docker tag elasticsearch:8.15.0 192.168.9.41:8088/new-erp-common/elasticsearch:8.15.0 #3、推送到私有仓库harbor docker push 192.168.9.41:8088/new-erp-common/elasticsearch:8.15.0二、…

Python3.8绿色便携版安装版制作

Python 的绿色便携版有两种:官方 Embeddable 版本(嵌入式版);安装版制作的绿色版。Embeddable 版适用于需要将 Python 集成到其他应用程序或项目中的情况,它不包含图形界面的安装程序,只提供了 Python 解释器和必要的库…

C# 使用国密SM4加密解密

首先需第三方Nuget包:Portable.BouncyCastle (源码来自http://www.bouncycastle.org/csharp/),支持.NET 4,.NET Standard 2.0 目录 目录 使用BouncyCastle指定填充方案 零填充(Zero Padding) PKCS7填充…

排查SQL Server中的内存不足及其他疑难问题

文章目录 引言I DMV 资源信号灯资源信号灯 DMV sys.dm_exec_query_resource_semaphores( 确定查询执行内存的等待)查询性能计数器什么是内存授予?II DBCC MEMORYSTATUS 查询内存对象III DBCC 命令释放多个 SQL Server 内存缓存 - 临时度量值IV 等待资源池 %ls (%ld)中的内存…

Matlab R2022b使用Camera Calibrator工具箱张正友标定法进行相机标定附带标定前后对比代码

打开Camera Calibrator 在这添加你拍摄的图片 根据你每个方块的实际边长填写,我是15mm。 通俗一点,要k3就选3 Coefficients,否则为0;要p1、p2就选Tangential Distortion。然后进行计算。 可以点击右侧误差高的选中图像进行移…

vuex 基础使用

1、封装使用 在项目中的 Store 文件夹下创建 modules 文件夹 getters.js 和 index.js 然后如下: modules 文件夹下创建 一个 index.js 文件 存放需要的功能方法 // 写一个简单的菜单切换,获取当前点击菜单的索引 const Index {state: {menuIndex: 0,…

AI-Talk开发板之LED

一、说明 AI-Talk开发板上有一颗用户LED,连接在CH32 PA2管脚,低电平亮,高电平灭。 相关电路图如下: 二、工程 1、创建项目 进入snap/examples/目录,执行创建项目的命令: lisa zep create ? 选择sam…

C# 窗体中Control以及Invalidate,Update,Refresh三种重绘方法的区别

在 C# 中,Control 类是 Windows Forms 应用程序中所有控件的基类。它提供了控件的基本功能和属性,这些功能和属性被所有继承自 Control 类的子类所共享。这意味着 Control 类是构建 Windows Forms 应用程序中用户界面元素的基础。 以下是 Control 类的一…

【编程基础】跳房子

题目描述 奶牛们按不太传统的方式玩起了小孩子们玩的"跳房子"游戏。奶牛们创造了一个5x5的、由与x,y轴平行的数字组成的直线型网格,而不是用来在里面跳的、线性排列的、带数字的方格。然后他们熟练地在网格中的数字中跳:向前跳、向后跳、向左…

C# 特性与属性的区别

在 C# 中,"特性"(Attribute)和"属性"(Property)是两种不同的概念,它们在编程中扮演不同的角色: 属性(Property): 属性是类或结构的一部分…

第66期 | GPTSecurity周报

GPTSecurity是一个涵盖了前沿学术研究和实践经验分享的社区,集成了生成预训练Transformer(GPT)、人工智能生成内容(AIGC)以及大语言模型(LLM)等安全领域应用的知识。在这里,您可以找…

C++:关于反向迭代器的学习分享

前言: 小编仅是一位初学者,所以对于C的理解有限,文章大概率会出现表达不清楚可能也只是因为小编不知道如何更好表达,本文章仅作为一个学习的总结分享。 反向迭代器的概念 反向迭代器故名思意解释反向的迭代器,与正向迭…

golang context介绍

在 Go 语言中,context 是一个用于在 goroutines 之间传递上下文信息的包。它主要用于控制请求的生命周期和管理跨 API 边界的信号传递。以下是 context 的一些关键特性和用途: 1. 主要用途 取消信号:允许在多个 goroutines 中发出取消信号&…

银行接口测试的具体流程及内容?

银行接口测试的具体流程及内容可以概括为以下几个关键步骤: 一、测试前准备 接口测试计划制定: 确定测试目标、范围、人员分工、时间计划等。 编写接口测试计划文档,明确测试策略、测试方法、测试工具等。 接口文档解析: 深入理…

批量插入的艺术:SQL高效数据处理指南

批量插入的艺术:SQL高效数据处理指南 在数据库的日常操作中,数据的批量插入是一项常见的任务。无论是数据迁移、初始数据填充还是定期的数据同步,批量插入都能显著提高效率。本文将深入探讨如何使用SQL进行数据的批量插入,并提供…

Oracle 和 PostgreSQL 常用数据类型的对比

Oracle 和 PostgreSQL 常用数据类型的对比 在进行数据库迁移或在一个环境中使用多个数据库时,了解不同数据库系统支持的数据类型之间的对比是非常重要的。以下是 Oracle 和 PostgreSQL 常用数据类型的对比 数字数据类型 数据类型OraclePostgreSQL小整数NUMBER(3,…

边缘智能网关 P1600:智慧城市的创新引擎

智慧城市(Smart City)是以发展更科学、管理更高效、生活更美好为目标,以信息技术和通信技术为支撑,通过透明、充分的信息获取,广泛、安全的信息传递和有效、科学的信息处理,提高城市运行效率,改…

数据库管理-第238期 23ai:全球分布式数据库-架构与组件(20240904)

数据库管理238期 2024-09-04 数据库管理-第238期 23ai:全球分布式数据库-架构与组件(20240904)1 架构图2 分片数据库与分片3 Shard Catalog4 Shard Director5 Global Service6 管理界面总结 数据库管理-第238期 23ai:全球分布式数…

Python案例 | 四阶龙格库塔法简介

1.引言 在数值分析中,龙格-库塔法(Runge-Kutta methods)是用于非线性常微分方程的解的重要的一类隐式或显式迭代法。这些技术由数学家卡尔龙格和马丁威尔海姆库塔于1900年左右发明。 龙格-库塔(Runge-Kutta)方法是一种在工程上应用广泛的高…