达梦数据库DSC和asm原理

本人学了没多久,只展示自己了解知道的 部分,如有不对,还请指正。

我要总结的原因是这点东西太难理解了,而且官方文档喜欢把一句话拆成十句话说,很难受。希望我的总结有帮助,谢谢。

先看图

重点就两个,dsc集群,asm集群。

服务有四个

css服务 (监控)

asm服务  (共享存储)

数据库服务

dmwatcher 守护服务 (节点和监视器之间的传话筒)

cssm 监视器 (用来管理,查看集群的界面)

一、dsc集群

为什么要有dsc集群?

数据库在访问压力大的时候需要的是多个节点都可以访问获取数据,传统的的主备,读写分离并不能很好的满足。因为依赖日志传输实现的主备和读写分离,其实高度依赖网速(mysql主从不同步就是这么来的)。这种情况下,多个节点共享存储。就是很好的选择。

dsc集群的原理

通常一个集群,会有收集节点数据的组件,会有负责调度的组件(学过kubernetes的都不陌生)。

dsc集群也不例外。会有一个css数据同步服务,就向asm共享存储的vote中写入监控的节点状态。同时从vote盘里查看其它节点的心跳信息。在很长时间里(一定的时间戳内),心跳信息没有变化。那就说明这个节点挂了,然后就向vote盘写入kill命令,为了防止脑裂,将所有节点杀掉(因为这个磁盘是共享的,所以只要写进去,所有节点都能收到)。

如上问所言,然后会有一个asm共享存储集群。负责存放集群的配置信息,日志,数据文件,心跳信息。这样,所有节点都能共享了。配好了就不用担心什么日志、偏移量这种东西。

       然后,再来一段官方话术。DMDSC 是一个共享存储的数据库集群系统。多个数据库实例同时访问、修改同一个数据库,因此必然带来了全局并发问题。DMDSC 集群基于单节点数据库管理系统之上,改造了 Buffer 缓冲区、事务系统、封锁系统和日志系统等,来适应共享存储集群节点间的全局并发访问控制要求。同时,引入缓存交换技术,提升数据在节点间的传递效率。

       其实总结下来就两点,共享、利用缓存技术提速。

二、集群的各个组件

css同步服务

        刚才提到了css的心跳检测。其实css一个重要作用就是选举。css可以将自己节点的信息写入vote盘(表决磁盘)和DCRV(集群注册表),然后从这两个盘上看到其他节点的数据。然后让,序号小的当控制节点。

     除了心跳和选举,css还可以进行启动流程管理。css和asm服务启动,但是数据库没有启动,这时候会处于waiting状态。等到数据库实例启动后,通知控制节点启动,然后再通知其他节点启动。

asm共享存储

      

       选择共享存储的理由是,块设备实现的冗余太低了。不直接使用其他的那种分布式存储是因为这里asm其实实现了自己的一种类似索引的查询方式。就是au映射表。后面说。

       以下为官方话术。

        DM 自动存储管理器(DM Auto Storage Manager,简称 DMASM)是一个专用的分布式文件系统。DMDSC 如果直接使用块设备作为共享存储来存放数据库文件,会因为块设备本身的诸多功能限制,造成 DMDSC 集群在使用、维护上并不是那么灵活方便。为克服块设备的这些使用限制,DM 专门设计了一款分布式文件系统 DMASM,来管理块设备的磁盘和文件。DMASM 的出现为 DMDSC 灵活管理和使用块设备提供了完美的解决方案。

        

中文术语

英文术语

DM 自动存储管理器

DM Auto Storage Manager,简称 DMASM

ASM 磁盘

ASM DISK

磁盘组

DISK GROUP

ASM 文件

ASM FILE

extent

数据分配单元

Allocation Units,简称 AU

DM 集群注册表

DM Clusterware Registry,简称 DCR

DCR 磁盘

DCR DISK

表决磁盘

VOTD DISK,简称 VTD

DMASM 文件系统初始化工具

DMASMCMD (专门用于 DMASM 非镜像环境)

DMASM 服务器

DMASMSVR (专门用于 DMASM 非镜像环境)

DMASM 应用程序访问接口

DMASMAPI (专门用于 DMASM 非镜像环境)

DMASM 管理工具

DMASMTOOL (专门用于 DMASM 非镜像环境)

簇(Extent)

簇是 ASM 文件的最小分配单位,一个簇由物理上连续的一组 AU 构成簇的大小为 4,也就是说一个 ASM 文件至少占用 4 个 AU也就是 4M 的物理存储空间。(注意,这个指的是文件系统的最小单元)

数据分配单元(Allocation Units,简称 AU)

DMASM 存储管理的最小单位。AU 的大小为 1M,为系统固定大小,无需用户指定。DMASM 以 AU 为单位将磁盘划分为若干逻辑单元,ASM 文件也是由一系列 AU 组成。根据 AU 的不同用途,系统内部定义了一系列 AU 类型,包括:desc AU、inode AU、REDO AU、和 data AU。(这个是存储管理单位的最小单元)

desc AU 结构AU

inode AU 元数据AU

REDO AU 重写日志AU。

data  AU   数据AU

         不重要的我尽量删减。东西太多看不明白。看了也白看。我尽量保留精华。

        簇和AU的关系是这样的。使用dmasmcmdm格式化asm磁盘后,会划分出若干簇。这些簇里面有desc AU、inode AU 、data AU 等。就把簇想象成小队长。各种AU就是各种职位不同的员工。

  

          所以,当你再asm中创建、删除。再asm中会变成维护inode AU 的信息。这里的AU其实就相当于一般文件系统中的元数据了。只不过再AU之上还有簇。

         所以,正常用户访问asm数据的流程如下图。

         

          把这个簇映射表理解成索引就行。它的好处是不用知道数据在asm中的位置,可以直接用这个映射表找到数据。

 asm的镜像功能

多副本

         前面说 ,asm提供很高的冗余。这其实是因为asm盘在写数据的时候会保存多份,一份当作原本的数据,其他的作为镜像存在。当原本的数据丢失,就从镜像中恢复一份。这样,保证了数据的安全。(多副本)

 条带化(想像成asm自己实现的raid0就行)

        条带化就是按照一定大小将分割数据块。然后放入不同的磁盘。如下是官方解释。

       条带化粒度取值 0 表示粗粒度。粗粒度条带是将文件按 AU 大小分割为一个个数据块。下图展示了粗粒度条带化分割示意图,其中以 AU 大小 1MB,文件大小 3MB 为例,文件被分为 3 个块,3 个块均匀地分布在磁盘组的三个磁盘上。

       

    条带化粒度取值 32~256 表示细粒度。细粒度条带是将数据按照条带化粒度大小分割为一个个数据块。下图展示了细粒度条带化的分割示意图,其中以 AU 大小 1MB,文件大小 192KB,条带化粒度取值 32K 为例,文件被分为 6 个块,6 个块均匀地分布在磁盘组的三个磁盘上。

      

      总结下来就是,占用空间大的整体分割是粗粒度。占空间小的,分完之后混在一起的是细粒度。

       选择粗粒度还是细粒度取决于数据文件大小。你比如你文件很大,不需要磁头寻找位置时间很长(就是寻找你这个数据在磁盘中的位置,寻址时间),那你就用粗粒度。如果你这个文件很小,寻址时间很长,那就用细粒度,分配到多个磁盘,好比你找一个人用一个人和十个人找,当然十个人更快。粗粒度相当于你让三个人找一百个人,基数上去了,也就没有必要分的细了。一般存放在DMDATA中的数据文件很大,存放在DCR中的配置文件很小。

       需要注意的是,这个条带化需要用到多个磁盘的读写。毕竟你一块磁盘读写有上限。你就算分了多个分区,速度也不会提升。

 AU映射表

               前面提到了簇映射表,我不确定这个AU映射表和簇映射表是不是一个东西。所以还是要说一下。

 

       如图,这里已经使用条带化的细粒度将文件划分到了不同的盘中。那么,要想准确的找到这个文件,把它拼起来。就要用到映射表。这就是AU映射表。

REDO日志

       ASM也采用REDO日志。当你创建、删除、扩张、截断asm磁盘中的文件时,都会写入磁盘。当掉电重启后,这写写入redo日志的操作会重演(因为对asm的操作同样不会立即写入磁盘,掉电就会丢失,所以需要REDO日志)

文件镜像

        这是asm实现冗余存储的方式。将文件分成大小不同的数据块,然后再指定一定数量的副本,放到不同的盘上,一份数据坏了,从其他的镜像恢复。

        

故障组

        故障组就是用来存放文件的镜像的。一个磁盘一个故障组。然后把镜像放在不同的故障组。需要恢复的时候从故障组里恢复。

          数据重分布

         当你把在asm中划分的盘删了,如果你的asm磁盘空间足够(可以有足够的故障组,存放副本镜像),系统会自动分配AU,然后把镜像数据补齐。(自己测试的时候没空间就不用试了。我已经重新初始化数据库了)如果新添加磁盘到asm,需要AU重平衡,防止有的盘已经用了很多了,有的盘根本就没用的情况出现。(毕竟,asm是要留空间冗余和分布式存储的。如果有的盘满了,有的根本没用,还怎么把数据拆分分别存入不同的盘?

总结

      asm是dsc集群中原理较为抽象的部分,理解asm各种功能的实现,有利于后续的实验。散会。

  • 29
    点赞
  • 20
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值