注册
使用dmasmtool工具和dmasmcmd工具管理DMDSC集群的ASM集群实践
专栏/技术分享/ 文章详情 /

使用dmasmtool工具和dmasmcmd工具管理DMDSC集群的ASM集群实践

BruceCD 2025/10/11 34 0 0
摘要

简述

DSC集群的存储依赖于共享存储,ASM是处于共享存储和DMSERVER之间的中间存储管理服务。ASM是DM 自动存储管理器(DM Auto Storage Manager,简称 DMASM)的缩写,它是一个分布式文件系统,为DMSERVER上层的读写提供可靠的服务。

ASM集群是由DMASMSVR服务主要组成,它的运行又依赖于dmcss服务,在正常提供服务的ASM集群中,必须要保证每个dmasmserver服务运行机器上都有一个dmcss服务运行。

对于共享存储的管理维护,DM提供了两个工具dmasmtool和dmasmcmd,这两个工具的功能不同,dmasmcmd主要是用来管理挂载到本地的共享磁盘,对他们进行磁盘格式化、初始化、查看共享磁盘信息等;
dmasmtool主要是用来对指定的ASM集群中的文件系统进行管理,对asm磁盘进行创建组、删除组,对组中的文件进行创建、浏览、删除等操作。

操作实践

这个实践是基于virtualbox的两台虚拟机(192.168.56.102和192.168.56.103)进行测试。
主要包括以下几个步骤:

  1. 共享磁盘挂载
  2. 使用dmasmcmd和dmasmtool对共享磁盘进行ASM创建
  3. 配置并启动dmcss服务和dmasmsvr服务
  4. 执行dminit初始化生成ASM共享文件
  5. 使用dmasmtool查看和管理asm集群内部文件

共享磁盘挂载

VirtualBox中可以手工添加虚拟硬盘,但是默认是不可共享的,并且需要修改为预分配空间才可以共享。
首先第一步,宿主机上创建5个虚拟硬盘,每个大小10G,设置访问属性为可共享,空间为预分配机制。
然后将它们都加到两台虚拟机中的存储SATA设备中。
对两台虚拟机进行了相同的添加虚拟磁盘操作后,就要开始需要配置一个udev绑定块设备的操作,以便于后续配置ASM操作,两台虚拟机需要同样的操作:
查看/dev/sd*中哪些是新加的虚拟机磁盘,然后用以下命令查看它们的uuid:

/usr/lib/udev/scsi_id -u -g /dev/sdb

在/etc/udev/rules.d/中添加一个配置文件66-dmasmdevices.rules,将上述的uuid配置到其中,对应到5个共享盘:

KERNEL=="sd*",SUBSYSTEM=="block",PROGRAM=="/usr/lib/udev/scsi_id --whitelisted --replace-whitespace --device=/dev/$name",RESULT=="1ATA_VBOX_HARDDISK_VBd7139490-2e4aa1c4",SYMLINK+="DM_ARCH", RUN+="/bin/sh -c 'chown -R dmdba:dinstall /dev/DM_ARCH; chmod 0660 /dev/DM_ARCH; chmod 777 /dev/sd*'"
KERNEL=="sd*",SUBSYSTEM=="block",PROGRAM=="/usr/lib/udev/scsi_id --whitelisted --replace-whitespace --device=/dev/$name",RESULT=="1ATA_VBOX_HARDDISK_VB24c8ab39-58800dab",SYMLINK+="DM_DATA", RUN+="/bin/sh -c 'chown -R dmdba:dinstall /dev/DM_DATA; chmod 0660 /dev/DM_DATA; chmod 777 /dev/sd*'"
KERNEL=="sd*",SUBSYSTEM=="block",PROGRAM=="/usr/lib/udev/scsi_id --whitelisted --replace-whitespace --device=/dev/$name",RESULT=="1ATA_VBOX_HARDDISK_VB8c0acefb-908780b9",SYMLINK+="DM_DCR", RUN+="/bin/sh -c 'chown -R dmdba:dinstall /dev/DM_DCR; chmod 0660 /dev/DM_DCR; chmod 777 /dev/sd*'"
KERNEL=="sd*",SUBSYSTEM=="block",PROGRAM=="/usr/lib/udev/scsi_id --whitelisted --replace-whitespace --device=/dev/$name",RESULT=="1ATA_VBOX_HARDDISK_VBd7c80718-e103cc45",SYMLINK+="DM_VOTE", RUN+="/bin/sh -c 'chown -R dmdba:dinstall /dev/DM_VOTE; chmod 0660 /dev/DM_VOTE; chmod 777 /dev/sd*'"
KERNEL=="sd*",SUBSYSTEM=="block",PROGRAM=="/usr/lib/udev/scsi_id --whitelisted --replace-whitespace --device=/dev/$name",RESULT=="1ATA_VBOX_HARDDISK_VBf6c48c1c-c6331462",SYMLINK+="DM_LOG", RUN+="/bin/sh -c 'chown -R dmdba:dinstall /dev/DM_LOG; chmod 0660 /dev/DM_LOG; chmod 777 /dev/sd*'"

执行以下命令进行配置热更新

/sbin/udevadm control --reload-rules
/sbin/udevadm trigger --action=add
/sbin/udevadm trigger --type=devices --action=change

刷新后,确认生效

ls -ltr /dev_DMDATA/DM*
ls -ltr /dev/DM_*

使用dmasmcmd和dmasmtool对共享磁盘进行ASM创建

为了初始化ASM中的VOTE和DCR这两个diskgroup,需要配置以下dmdcr_cfg.ini文件
准备/home/dmdba/DSC/dmdcr_cfg.ini文件,进行votedisk的配置,配置信息包括三类:集群环境全局信息、集群组信息、以及组内节点信息:

DCR_N_GRP                = 3
DCR_VTD_PATH             = /dev_DMDATA/DM_VOTE   #规划为vote的磁盘
DCR_OGUID                = 210715

[GRP]
  DCR_GRP_TYPE           = CSS
  DCR_GRP_NAME           = GRP_CSS
  DCR_GRP_N_EP           = 2
  DCR_GRP_DSKCHK_CNT     = 65
[GRP_CSS]
  DCR_EP_NAME            = CSS0
  DCR_EP_HOST            = 192.168.56.102
  DCR_EP_PORT            = 11286
[GRP_CSS]
  DCR_EP_NAME            = CSS1
  DCR_EP_HOST            = 192.168.56.103
  DCR_EP_PORT            = 11286

[GRP]
  DCR_GRP_TYPE           = ASM
  DCR_GRP_NAME           = GRP_ASM
  DCR_GRP_N_EP           = 2
  DCR_GRP_DSKCHK_CNT     = 61
[GRP_ASM]
  DCR_EP_NAME            = ASM0
  DCR_EP_SHM_KEY         = 42424
  DCR_EP_SHM_SIZE        = 1024
  DCR_EP_HOST            = 192.168.56.102
  DCR_EP_PORT            = 11276
  DCR_EP_ASM_LOAD_PATH   = /dev_DMDATA
[GRP_ASM]
  DCR_EP_NAME            = ASM1
  DCR_EP_SHM_KEY         = 42425
  DCR_EP_SHM_SIZE        = 1024
  DCR_EP_HOST            = 192.168.56.103
  DCR_EP_PORT            = 11277
  DCR_EP_ASM_LOAD_PATH   = /dev_DMDATA

[GRP]
  DCR_GRP_TYPE           = DB
  DCR_GRP_NAME           = GRP_DSC
  DCR_GRP_N_EP           = 2
  DCR_GRP_DSKCHK_CNT     = 57
[GRP_DSC]
  DCR_EP_NAME            = DSC0
  DCR_EP_SEQNO           = 0
  DCR_EP_PORT            = 10038
  DCR_CHECK_PORT         = 11256
[GRP_DSC]
  DCR_EP_NAME            = DSC1
  DCR_EP_SEQNO           = 1
  DCR_EP_PORT            = 10038
  DCR_CHECK_PORT         = 11257

然后使用dmasmcmd工具进行初始化磁盘操作:

create dcrdisk '/dev_DMDATA/DM_DCR' 'dcr'
create votedisk '/dev_DMDATA/DM_VOTE' 'vote'
create asmdisk '/dev_DMDATA/DM_LOG' 'LOG0'
create asmdisk '/dev_DMDATA/DM_DATA' 'DATA0'
create asmdisk '/dev_DMDATA/DM_ARCH' 'ARCH0'
init dcrdisk '/dev_DMDATA/DM_DCR' from '/home/dmdba/DSC/dmdcr_cfg.ini' identified by 'abcd'
init votedisk '/dev_DMDATA/DM_VOTE' from '/home/dmdba/DSC/dmdcr_cfg.ini'

此时通过listdisks /dev_DMDATA命令可以看到这个组下已经都是创建成功的disk了:
图片.png

配置并启动dmcss服务和dmasmsvr服务

准备一份DMASM的MAL配置文件dmasvrmal.ini,在192.168.56.102和192.168.56.103上都需要,其中内容完全一致,内容如下:

#/home/dmdba/DSC/dmasvrmal.ini
[MAL_INST0]
MAL_INST_NAME            = ASM0
MAL_HOST                 = 192.168.56.102
MAL_PORT                 = 11266
[MAL_INST1]
MAL_INST_NAME            = ASM1
MAL_HOST                 = 192.168.56.103
MAL_PORT                 = 11266

准备dmdcr.ini配置文件,在192.168.56.102和192.168.56.103上都需要,其中内容稍有差异,DMDCR_SEQNO 分别为 0 和 1,内容如下:

# /home/dmdba/DSC/dmdcr.ini
# 192.168.56.102上
DMDCR_PATH                   = /dev_DMDATA/DM_DCR
DMDCR_MAL_PATH               = /home/dmdba/DSC/dmasvrmal.ini
DMDCR_SEQNO                  = 0
DMDCR_ASM_RESTART_INTERVAL   = 0
DMDCR_ASM_STARTUP_CMD        = /home/dmdba/dmdbms/bin/DmAsmServiceASM0 start
DMDCR_DB_RESTART_INTERVAL    = 0   #设置为0不自动拉起
DMDCR_DB_STARTUP_CMD         = /home/dmdba/dmdbms/bin/DmServiceDSC0 start
DMDCR_AUTO_OPEN_CHECK        = 111
DMDCR_ASM_TRACE_LEVEL        = 2

# 192.168.56.103上
DMDCR_PATH                   = /dev_DMDATA/DM_DCR
DMDCR_MAL_PATH               = /home/dmdba/DSC/dmasvrmal.ini
DMDCR_SEQNO                  = 1
DMDCR_ASM_RESTART_INTERVAL   = 0
DMDCR_ASM_STARTUP_CMD        = /home/dmdba/dmdbms/bin/DmAsmServiceASM1 start
DMDCR_DB_RESTART_INTERVAL    = 0   #设置为0不自动拉起
DMDCR_DB_STARTUP_CMD         = /home/dmdba/dmdbms/bin/DmServiceDSC1 start
DMDCR_AUTO_OPEN_CHECK        = 111
DMDCR_ASM_TRACE_LEVEL        = 2

启动DMCSS、DMASM服务程序

在192.168.56.102上执行
./dmcss DCR_INI=/home/dmdba/DSC/dmdcr.ini
# 再开一个窗口执行
./dmasmsvr DCR_INI=/home/dmdba/DSC/dmdcr.ini

在192.168.56.103上执行
./dmcss DCR_INI=/home/dmdba/DSC/dmdcr.ini
# 再开一个窗口执行
./dmasmsvr DCR_INI=/home/dmdba/DSC/dmdcr.ini

使用dmasmtool工具创建DMDATA,DMARCH,DMLOG三个diskgroup:

create diskgroup 'DMLOG' asmdisk '/dev_DMDATA/DM_LOG'
create diskgroup 'DMDATA' asmdisk '/dev_DMDATA/DM_DATA'
create diskgroup 'DMARCH' asmdisk '/dev_DMDATA/DM_ARCH'
lsdsk

执行dminit初始化生成ASM共享文件

dminit初始化时会向ASM中磁盘组写入数据文件,必须要在dmcss的控制节点也就是192.168.56.102上执行,否则会报错。

dminit初始化配置文件:

DB_NAME                  = data
SYSDBA_PWD               = Sysdba@123
SYSAUDITOR_PWD           = Sysauditor@123
SYSTEM_PATH              = +DMDATA/data
SYSTEM                   = +DMDATA/data/SYSTEM.dbf
SYSTEM_SIZE              = 100
ROLL                     = +DMDATA/data/ROLL.dbf
ROLL_SIZE                = 100
MAIN                     = +DMDATA/data/MAIN.dbf
MAIN_SIZE                = 100
CTL_PATH                 = +DMDATA/data/dm.ctl
CTL_SIZE                 = 8
LOG_SIZE                 = 100
DCR_PATH                 = /dev_DMDATA/DM_DCR
DCR_SEQNO                = 0
AUTO_OVERWRITE           = 2
PAGE_SIZE                = 32
EXTENT_SIZE              = 16
BLANK_PAD_MODE           = 1
CHARSET                  = 1

[DSC0]
CONFIG_PATH              = /home/dmdba/DSC/DSC0
PORT_NUM                 = 10038
MAL_HOST                 = 192.168.56.102
MAL_PORT                 = 8344
LOG_PATH                 = +DMLOG/DSC0_LOG01.log
LOG_PATH                 = +DMLOG/DSC0_LOG02.log
[DSC1]
CONFIG_PATH              = /home/dmdba/DSC/DSC1
PORT_NUM                 = 10038
MAL_HOST                 = 192.168.56.103
MAL_PORT                 = 8346
LOG_PATH                 = +DMLOG/DSC1_LOG01.log
LOG_PATH                 = +DMLOG/DSC1_LOG02.log

执行初始化命令:
./dminit control=/home/dmdba/DSC/dminit.ini

使用dmasmtool查看和管理asm集群内部文件

正常运行的asm集群可以使用dmasmtool进行文件管理,其中的使用命令与linux下的文件操作相似,
例如ls查看文件,cd打开目录等.

help命令

help可以看到所有可以执行的命令帮助
包括文件操作、磁盘操作、磁盘组操作等

文件操作命令

查看当前asm中有哪些diskgroup
图片.png
查看某个diskgroup下的文件和目录
图片.png
查找文件
图片.png
切换到某个目录下
图片.png

磁盘操作

使用已经初始化过的asmdisk来创建磁盘组
图片.png
删除组
图片.png

在asm的磁盘组之间拷贝文件

直接用cp命令即可
图片.png

在asm磁盘组和本地操作系统间拷贝文件

直接用cp命令即可,可以拷贝单个文件,也可以拷贝目录
图片.png

注意事项

  1. ASM集群需要保证配置中的CSS服务和ASMSVR都是正常启动状态才能进行dmasmtool的操作
  2. 在某些异常场景下,ASMSVR服务可以只启动一个也可以执行某些浏览文件操作,但是在执行文件修改操作时会导致一些异常,例如磁盘组的文件损坏,此时只能重新初始化asm盘并创建磁盘组

学习思考

ASM分布式文件系统是一个很强大的系统,内部实现了一套完整的文件系统接口,使用dcrdisk和votedisk传递节点间信息,通过dmasmtool和dmasmcmd工具我们可以方便得查看到比较浅层的细节,如果还需要看到更多信息,就需要多尝试,并从日志中查看对应的执行细节信息。

评论
后发表回复

作者

文章

阅读量

获赞

扫一扫
联系客服