达梦数据库DSC和asm原理
asm是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各种功能的实现,有利于后续的实验。散会。
更多推荐
所有评论(0)