本文先简单介绍了DMDSC,然后描述了如何搭建达梦数据库DMDSC
目录
前言
DM DSC 名词解析
DMCSS
控制节点(Control Node)
普通节点(Normal Node)
DMCSS 工作原理
DMASM
dmasvrmal
搭建步骤
准备
共享盘初始化
安装DM数据库软件
集群搭建
配置CSS和ASM,初始化ASM
初始化DB
启动
测试
关闭集群
DM DSC共享存储数据库集群,是一个多实例、单数据库的系统。通过多实例访问共享存储的方式实现高可用、高性能、负载均衡等特性。下图为DSC架构图(图片来源于达梦官网)
下面简单说明各个组件的作用
DMCSS 可检测故障并自动将故障节点踢出集群。每个节点都需要配置一个 DMCSS 服务,所有DMCSS 构成一个集群。
是DMCSS中负责监控、管理整个 DMASM 集群和 DMDSC 集群的节点
DMCSS集群控制节点以外的节点都为普通节点。DMCSS 普通节点不参与 DMASM 集群和 DMDSC 集群管理,当 DMCSS 控制节点故障时,会从活动的普通节点中重新选取一个 DMCSS 控制节点。
在 VOTE 磁盘(非镜像环境下)或 DCRV 磁盘(镜像环境下)中,为每个被监控对象(DMASMSVR、DMSERVER、DMCSS)分配一片独立的存储区域,被监控对象定时向 VOTE 或 DCRV 磁盘写入信息(包括时间戳、状态、命令、以及命令执行结果等);DMCSS 控制节点定时从 VOTE 或 DCRV 磁盘读取信息,检查被监控对象的状态变化,启动相应的处理流程;被监控对象只会被动的接收 DMCSS 控制节点命令,执行并响应。
DMASM 是达梦设计的一款分布式文件系统,用于管理块设备的磁盘和文件
ASM 磁盘
ASM磁盘是指经过 DMASMCMD 工具格式化,可以被 DMASMSVR 识别的物理磁盘。
磁盘组
磁盘组由一个或多个 ASM 磁盘组成,是存储 ASM 文件的载体
DCR 磁盘(DCR DISK)
DCR 文件记录了存储、维护集群配置的详细信息。整个集群环境共享 DCR 磁盘信息,包括集群(DMDSC、DMASM、DMCSS)资源、实例名、监听端口、集群中故障节点信息等。DCR磁盘专门用来存放DCR 文件。
表决磁盘(VOTE DISK)
表决磁盘专门用于存储 VTD 文件。主要有两个功能:
MAL服务,检测心跳用的
1.准备至少2台虚拟机。(下文用dameng01和dameng02表示)
2.每台虚拟机要求挂载5个共享盘(注: 以下为博主的共享盘信息,设置的比较小,可根据实际情况调整)
共享盘用于 | 大小 | 备注 |
VOTE 磁盘 | 1G | |
DCR 盘 | 1G | |
Redo 日志盘 | 2G | 必须大于1G |
数据盘 | 10G | |
归档日志 | 2G |
vmware创建共享盘操作可参考:
Oracle 21C RAC 三节点集群保姆级安装教程(附VMware共享磁盘配置方法) - 知乎 (zhihu.com) 《三、创建共享磁盘》章节
以下命令,在所有DSC机器执行
0.检查共享盘是否已经挂载好了
1.建用户
groupadd dinstall -g 2001
useradd -g dinstall dmdba -u 1001
passwd dmdba
2.准备脚本,生成命令,通过uuid 绑定共享盘
以下脚本用于生成绑定规则
curr=$(cd "$(dirname "$0")";pwd)
rm -f $curr/88-dm-asmdevices.rules
for i in a b c d e;
do
echo "KERNEL==\"sd?\",SUBSYSTEM==\"block\", \
PROGRAM==\"/usr/lib/udev/scsi_id --whitelisted \
--replace-whitespace --device=/dev/\$name\", \
RESULT==\"`/usr/lib/udev/scsi_id --whitelisted \
--replace-whitespace --device=/dev/sd$i`\", \
SYMLINK+=\"dm/asm-disk$i\",OWNER=\"dmdba\", \
GROUP=\"dinstall\",\
MODE=\"0660\"" >> $curr/88-dm-asmdevices.rules
done
3.执行命令
chmod +x uuid.sh
./uuid.sh
脚本生成的规则中,软链后缀不是太好辨别用途,可适当修改,如数据盘改成 dm/asm-data01
4.把文件拷贝到udev目录
cp 88-dm-asmdevices.rules /etc/udev/rules.d/88-dm-asmdevices.rules
5.重启操作系统
6.检查
blockdev --getsize64 /dev/dm/asm-diskb
blockdev --getsize64 /dev/dm/asm-diskc
blockdev --getsize64 /dev/dm/asm-diskd
blockdev --getsize64 /dev/dm/asm-diske
blockdev --getsize64 /dev/dm/asm-diskf
略。
按以下描述规划共享存储
/dev/dm/asm-diskb --> 数据盘
/dev/dm/asm-diskc -->归档日志
/dev/dm/asm-diskd -->vote
/dev/dm/asm-diske -->dcr
/dev/dm/asm-diskf -->redo
1.配置 dmdcr_cfg.ini(所有机器执行)
博主的dbms 安装在/data01/dmdbms/。注意按实际情况修改路径
mkdir /data01//dmdbms/dsc_config
cat > /data01//dmdbms/dsc_config/dmdcr_cfg.ini << EOF
DCR_N_GRP = 3 ##集群环境有多少个 GROUP,范围:1~16
DCR_VTD_PATH = /dev/dm/asm-diskd ##规划为 vote 的磁盘
DCR_OGUID = 210715 ## 消息标识,一个组里面只有一个。
[GRP] #新建一个 GROUP
DCR_GRP_TYPE = CSS ##组类型(CSS/ASM/DB)
DCR_GRP_NAME = GRP_CSS ##组名
DCR_GRP_N_EP = 2 ##组内节点个数
DCR_GRP_DSKCHK_CNT = 65 ##磁盘心跳容错时间,单位:秒
[GRP_CSS]
DCR_EP_NAME = CSS0 ##CSS 节点名
DCR_EP_HOST = 192.168.25.121 ##心跳地址
DCR_EP_PORT = 11286 ##CSS 端口
[GRP_CSS]
DCR_EP_NAME = CSS1
DCR_EP_HOST = 192.168.25.122
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 ##ASM 节点名,和 dmasvrmal 的 MAL_INST_NAME 一致
DCR_EP_SHM_KEY = 42424 ##共享内存标识
DCR_EP_SHM_SIZE = 1024 ##共享内存大小
DCR_EP_HOST = 192.168.25.121 ##心跳地址
DCR_EP_PORT = 11276 ##ASM 端口
DCR_EP_ASM_LOAD_PATH = /dev/dm
[GRP_ASM]
DCR_EP_NAME = ASM1
DCR_EP_SHM_KEY = 42425
DCR_EP_SHM_SIZE = 1024
DCR_EP_HOST = 192.168.25.122
DCR_EP_PORT = 11277
DCR_EP_ASM_LOAD_PATH = /dev/dm
[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 ##实例名,和 dm.ini 的 INSTANCE_NAME 一致
DCR_EP_SEQNO = 0 ##组内序号,不能重复
DCR_EP_PORT = 5237 ##实例端口,和 dm.ini 的 PORT_NUM 一致
DCR_CHECK_PORT = 11256 ##DCR 检查端口
[GRP_DSC]
DCR_EP_NAME = DSC1
DCR_EP_SEQNO = 1
DCR_EP_PORT = 5237
DCR_CHECK_PORT = 11257
EOF
2.初始化盘(只在任意一台机上执行)
/dm/dmdbms/bin/dmasmcmd
create dcrdisk '/dev/dm/asm-diske' 'dcr'
create votedisk '/dev/dm/asm-diskd' 'vote'
init dcrdisk '/dev/dm/asm-diske' from '/data01/dmdbms/dsc_config/dmdcr_cfg.ini' identified by 'hust4400'
init votedisk '/dev/dm/asm-diskd' from '/data01/dmdbms/dsc_config/dmdcr_cfg.ini'
create asmdisk '/dev/dm/asm-diskb' 'DATA0'
create asmdisk '/dev/dm/asm-diskf' 'LOG0'
create asmdisk '/dev/dm/asm-diskc' 'ARCH0'
3.配置dmasvrmal.ini(所有机器执行)
cat > /data01/dmdbms/dsc_config/dmasvrmal.ini << EOF
[MAL_INST0]
MAL_INST_NAME = ASM0
MAL_HOST = 192.168.25.121 #心跳地址
MAL_PORT = 11266 #MAL 监听端口
[MAL_INST1]
MAL_INST_NAME = ASM1
MAL_HOST = 192.168.25.122
MAL_PORT = 11266
EOF
4.拷贝配置(所有机器执行)
mkdir -p /data01/dmdbms/dsc_config/DSC0/
mkdir -p /data01/dmdbms/dsc_config/DSC1/
cp /data01/dmdbms/dsc_config/dmasvrmal.ini /data01/dmdbms/dsc_config/DSC0/
cp /data01/dmdbms/dsc_config/dmasvrmal.ini /data01/dmdbms/dsc_config/DSC1/
ls -ltrh /data01/dmdbms/dsc_config/DSC0/
ls -ltrh /data01/dmdbms/dsc_config/DSC1/
5.配置 dmdcr.ini 文件(dameng01执行)
cat > /data01/dmdbms/dsc_config/dmdcr.ini << EOF
DMDCR_PATH = /dev/dm/asm-diske
DMDCR_MAL_PATH = /data01/dmdbms/dsc_config/DSC0/dmasvrmal.ini
DMDCR_SEQNO = 0
DMDCR_AUTO_OPEN_CHECK = 111
DMDCR_ASM_TRACE_LEVEL = 2
##DMDCR_ASM_RESTART_INTERVAL = 60 #CSS 认定 ASM 故障重启的时间
##DMDCR_ASM_STARTUP_CMD = /data01/dmdbms/dsc_config/DmAsmService_DSC0 start
##DMDCR_DB_RESTART_INTERVAL = 60 ##CSS 认定 DSC 故障重启的时间,设置为 0 不自动拉起
##DMDCR_DB_STARTUP_CMD = /data01/dmdbms/dsc_config/DmService_DSC0 start
EOF
cp /data01/dmdbms/dsc_config/dmdcr.ini /data01/dmdbms/dsc_config/DSC0/
5.配置 dmdcr.ini 文件(dameng02执行)
cat > /data01/dmdbms/dsc_config/dmdcr.ini << EOF
DMDCR_PATH = /dev/dm/asm-diske
DMDCR_MAL_PATH = /data01/dmdbms/dsc_config/DSC1/dmasvrmal.ini
DMDCR_SEQNO = 1
DMDCR_AUTO_OPEN_CHECK = 111
DMDCR_ASM_TRACE_LEVEL = 2
##DMDCR_ASM_RESTART_INTERVAL = 60 #CSS 认定 ASM 故障重启的时间
##DMDCR_ASM_STARTUP_CMD = /data01/dmdbms/dsc_config/DmAsmService_DSC1 start
##DMDCR_DB_RESTART_INTERVAL = 60 ##CSS 认定 DSC 故障重启的时间,设置为 0 不自动拉起
##DMDCR_DB_STARTUP_CMD = /data01/dmdbms/dsc_config/DmService_DSC1 start
EOF
cp /data01/dmdbms/dsc_config/dmdcr.ini /data01/dmdbms/dsc_config/DSC1/
6.启动dmcss 和DMASM 服务(dameng01执行,前台启动的,注意开多个窗口)
/data01/dmdbms/bin/dmcss DCR_INI=/data01/dmdbms/dsc_config/DSC0/dmdcr.ini
/data01/dmdbms/bin/dmasmsvr DCR_INI=/data01/dmdbms/dsc_config/DSC0/dmdcr.ini
7.启动dmcss 和DMASM 服务(dameng02执行,前台启动的,注意开多个窗口)
/data01/dmdbms/bin/dmcss DCR_INI=/data01/dmdbms/dsc_config/DSC1/dmdcr.ini
/data01/dmdbms/bin/dmasmsvr DCR_INI=/data01/dmdbms/dsc_config/DSC1/dmdcr.ini
8.创建 DMASM 磁盘组(dameng01执行)
/data01/dmdbms/bin/dmasmtool DCR_INI=/data01/dmdbms/dsc_config/DSC0/dmdcr.ini
create diskgroup 'DMLOG' asmdisk '/dev/dm/asm-diskf'
create diskgroup 'DMDATA' asmdisk '/dev/dm/asm-diskb'
create diskgroup 'DMARCH' asmdisk '/dev/dm/asm-diskc'
1.准备配置文件(dameng01执行)
cat > /data01/dmdbms/dsc_config/dminit.ini << EOF
DB_NAME = DSC
SYSDBA_PWD = SYSDBA_PWD
SYSTEM_PATH = +DMDATA/data
SYSTEM = +DMDATA/data/SYSTEM.dbf
SYSTEM_SIZE = 128
ROLL = +DMDATA/data/ROLL.dbf
ROLL_SIZE = 10000
MAIN = +DMDATA/data/MAIN.dbf
MAIN_SIZE = 128
CTL_PATH = +DMDATA/data/dm.ctl
CTL_SIZE = 8
LOG_SIZE = 128
DCR_PATH = /dev/dm/asm-diske
DCR_SEQNO = 0
AUTO_OVERWRITE = 1
PAGE_SIZE = 32
EXTENT_SIZE = 16
BLANK_PAD_MODE = 1
[DSC0]
CONFIG_PATH = /data01/dmdbms/dsc_config/DSC0
PORT_NUM = 5237
MAL_HOST = 192.168.25.121
MAL_PORT = 11246
LOG_PATH = +DMLOG/DSC0_LOG01.log
LOG_PATH = +DMLOG/DSC0_LOG02.log
[DSC1]
CONFIG_PATH = /data01/dmdbms/dsc_config/DSC1
PORT_NUM = 5237
MAL_HOST = 192.168.25.122
MAL_PORT = 11246
LOG_PATH = +DMLOG/DSC1_LOG01.log
LOG_PATH = +DMLOG/DSC1_LOG02.log
EOF
2.初始化,并拷贝配置文件到dameng02(dameng01执行)
/data01/dmdbms/bin/dminit control=/data01/dmdbms/dsc_config/dminit.ini
#拷贝到dameng02
scp -r DSC1 dmdba@dameng02:/data01/dmdbms/dsc_config/
3.dameng01开启归档
vim /data01/dmdbms/dsc_config/DSC0/dm.ini
ARCH_INI = 1
vi /data01/dmdbms/dsc_config/DSC0/dmarch.ini
ARCH_WAIT_APPLY = 0
ARCH_LOCAL_SHARE = 1
ARCH_LOCAL_SHARE_CHECK=0
[ARCHIVE_LOCAL1]
ARCH_TYPE = LOCAL
ARCH_DEST = +DMARCH/ARCH/DSC0/arch
ARCH_FILE_SIZE = 128
ARCH_SPACE_LIMIT = 512
[ARCHIVE_REMOTE1]
ARCH_TYPE = REMOTE
ARCH_DEST = DSC1
ARCH_INCOMING_PATH = +DMARCH/ARCH/DSC1/arch
ARCH_FILE_SIZE = 128
ARCH_SPACE_LIMIT = 512
4.dameng02开启归档
vim /data01/dmdbms/dsc_config/DSC1/dm.ini
ARCH_INI = 1
vi /data01/dmdbms/dsc_config/DSC1/dmarch.ini
ARCH_WAIT_APPLY = 0
ARCH_LOCAL_SHARE = 1
ARCH_LOCAL_SHARE_CHECK=0
[ARCHIVE_LOCAL1]
ARCH_TYPE = LOCAL
ARCH_DEST = +DMARCH/ARCH/DSC1/arch
ARCH_FILE_SIZE = 128
ARCH_SPACE_LIMIT = 512
[ARCHIVE_REMOTE1]
ARCH_TYPE = REMOTE
ARCH_DEST = DSC0
ARCH_INCOMING_PATH = +DMARCH/ARCH/DSC0/arch
ARCH_FILE_SIZE = 128
ARCH_SPACE_LIMIT = 512
5.让CSS自动拉起DSC和
vim /data01/dmdbms/dsc_config/dmdcr.ini
DMDCR_ASM_RESTART_INTERVAL=60 #CSS 认定 ASM 故障重启的时间
DMDCR_ASM_STARTUP_CMD = /data01/dmdbms/bin/DmASMSvrServiceASM start
##CSS 认定 DSC 故障重启的时间,设置为 0 不自动拉起
DMDCR_DB_RESTART_INTERVAL = 60
DMDCR_DB_STARTUP_CMD = /data01/dmdbms/bin/DmServiceDSC start
6.dameng01注册服务
/data01/dmdbms/script/root/dm_service_installer.sh -t dmcss -dcr_ini /data01/dmdbms/dsc_config/dmdcr.ini -p CSS
/data01/dmdbms/script/root/dm_service_installer.sh -t dmasmsvr -dcr_ini /data01/dmdbms/dsc_config/dmdcr.ini -y DmCSSServiceCSS.service -p ASM
/data01/dmdbms/script/root/dm_service_installer.sh -t dmserver -dm_ini /data01/dmdbms/dsc_config/DSC0/dm.ini -dcr_ini /data01/dmdbms/dsc_config/dmdcr.ini -y DmASMSvrServiceASM.service -p DSC
7.dameng02注册服务
/data01/dmdbms/script/root/dm_service_installer.sh -t dmcss -dcr_ini /data01/dmdbms/dsc_config/dmdcr.ini -p CSS
/data01/dmdbms/script/root/dm_service_installer.sh -t dmasmsvr -dcr_ini /data01/dmdbms/dsc_config/dmdcr.ini -y DmCSSServiceCSS.service -p ASM
/data01/dmdbms/script/root/dm_service_installer.sh -t dmserver -dm_ini /data01/dmdbms/dsc_config/DSC0/dm.ini -dcr_ini /data01/dmdbms/dsc_config/dmdcr.ini \
-y DmASMSvrServiceASM.service -p DSC
8.配置DMCSSM监听器(所有机器)
[dmdba@~]# vi /data01/dmdbms/bin/dmcssm.ini
CSSM_OGUID = 210715
CSSM_CSS_IP = 192.168.25.121:11286
CSSM_CSS_IP = 192.168.25.122:11286
CSSM_LOG_PATH = ../log
CSSM_LOG_FILE_SIZE = 128
CSSM_LOG_SPACE_LIMIT = 512
9.生成服务启动命令
/data01/dmdbms/script/root/dm_service_installer.sh -t dmcssm -cssm_ini /data01/dmdbms/bin/dmcssm.ini -p Monitor
cp /data01/dmdbms/bin/DmCSSMonitorServiceMonitor /data01/dmdbms/bin/DmCSSMonitorServiceMonitor_bak
/data01/dmdbms/script/root/dm_service_uninstaller.sh -n DmCSSMonitorServiceMonitor
cp /data01/dmdbms/bin/DmCSSMonitorServiceMonitor /data01/dmdbms/bin/DmCSSMonitorServiceMonitor
1.启动DMCSS监控控制台
--前台启动:
[dmdba@~]# /data01/dmdbms/bin/dmcssm INI_PATH=/data01/dmdbms/bin/dmcssm.ini
--后台启动:
[dmdba@~]# /data01/dmdbms/bin/DmCSSMonitorServiceMonitor start
2.启动:所有机器 CSS
/data01/dmdbms/bin/DmCSSServiceCSS start
##说明:CSS 启动后自动拉起 ASM 和 DMSERVER。
3.启动:ASM
/data01/dmdbms/bin/DmASMSvrServiceASM start
4.启动DSC
/data01/dmdbms/bin/DmServiceDSC start
disql SYSDBA/SYSDBA_PWD@localhost:5237
create schema testdb ;
CREATE TABLE testdb.test (
id INT primary key,
name VARCHAR(50),
email VARCHAR(100)
);
insert into testdb.test values(1,’test1’,’test1’)
dameng01和dameng02 分别执行,确认查出来的东西是一样的
select * from testdb.test
/data01/dmdbms/bin/DmCSSMonitorServiceMonitor stop
/data01/dmdbms/bin/DmServiceDSC stop
/data01/dmdbms/bin/DmASMSvrServiceASM stop
/data01/dmdbms/bin/DmCSSServiceCSS stop
Oracle 21C RAC 三节点集群保姆级安装教程(附VMware共享磁盘配置方法) - 知乎 (zhihu.com)
共享存储集群安装部署 | 达梦技术文档 (dameng.com)