在DSC集群搭建过程中,dmdcr_cfg.ini用于记录DSC集群的完整拓扑结构,包括有多少个节点、每个节点的IP地址、端口号,以及各个服务(CSS, ASM, DB)的配置信息,正确识别彼此并建立通信。
文件里的内容主要分为几个关键部分:
全局配置:定义了集群中组的数量、投票盘(VOTE)的路径,以及一个集群全局唯一标识(OGUID)。
CSS组(集群同步服务):负责集群节点间的心跳检测和状态同步。
ASM组(自动存储管理):负责管理集群的共享存储。
DB组(数据库实例):定义集群中的达梦数据库实例。
查看心跳IP
DCR_N_GRP = 3
DCR_VTD_PATH = /dev/dmasm_fyq_test/dmasm-vote
DCR_OGUID = 63635
[GRP]
DCR_GRP_TYPE = CSS
DCR_GRP_NAME = GRP_CSS
DCR_GRP_N_EP = 2
DCR_GRP_DSKCHK_CNT = 60
[GRP_CSS]
DCR_EP_NAME = CSS0
DCR_EP_HOST = xxxxx
DCR_EP_PORT = 5336
[GRP_CSS]
DCR_EP_NAME = CSS1
DCR_EP_HOST = xxxxx
DCR_EP_PORT = 5337
[GRP]
DCR_GRP_TYPE = ASM
DCR_GRP_NAME = GRP_ASM
DCR_GRP_N_EP = 2
DCR_GRP_DSKCHK_CNT = 60
[GRP_ASM]
DCR_EP_NAME = ASM0
DCR_EP_SHM_KEY = 93360
DCR_EP_SHM_SIZE = 20
DCR_EP_HOST = xxxxx
DCR_EP_PORT = 5436
DCR_EP_ASM_LOAD_PATH = /dev/dmasm_fyq_test
[GRP_ASM]
DCR_EP_NAME = ASM1
DCR_EP_SHM_KEY = 93361
DCR_EP_SHM_SIZE = 20
DCR_EP_HOST = xxxxx
DCR_EP_PORT = 5437
DCR_EP_ASM_LOAD_PATH = /dev/dmasm_fyq_test
[GRP]
DCR_GRP_TYPE = DB
DCR_GRP_NAME = GRP_DSC
DCR_GRP_N_EP = 2
DCR_GRP_DSKCHK_CNT = 60
[GRP_DSC]
DCR_EP_NAME = DSC0
DCR_EP_SEQNO = 0
DCR_EP_PORT = 5236
[GRP_DSC]
DCR_EP_NAME = DSC1
DCR_EP_SEQNO = 1
DCR_EP_PORT = 5236
为什么这个DCR_EP_PORT端口是一样的?
它定义的是数据库实例对外提供服务的监听端口,也就是客户端(如disql命令)连接数据库时使用的端口号。
[MAL_INST1]
MAL_INST_NAME = ASM0
MAL_HOST = xxxxx
MAL_PORT = 5626
[MAL_INST2]
MAL_INST_NAME = ASM1
MAL_HOST = xxxxxx
MAL_PORT = 5627
DMDCR_PATH = /dev/dmasm_fyq_test/dmasm-dcr
DMDCR_MAL_PATH = /dmdata/dsc/config/dmasvrmal.ini
DMDCR_SEQNO = 1
DMDCR_AUTO_OPEN_CHECK = 90
DMDCR_ASM_RESTART_INTERVAL = 30
DMDCR_ASM_STARTUP_CMD = /opt/dmdbms/bin/dmasmsvr DCR_INI=/dmdata/dsc/config/dmdcr.ini
DMDCR_DB_RESTART_INTERVAL = 60
DMDCR_DB_STARTUP_CMD = /opt/dmdbms/bin/dmserver path=/dmdata/dsc/data/DSC1/dm.ini dcr_ini=/dmdata/dsc/config/dmdcr.ini
注意:DMDCR_SEQNO和DMDCR_DB_STARTUP_CMD不一样
执行初始化DCR磁盘和VOTE磁盘
错误信息 Invalid grp label:[CSS] or grp:[CSS] is not existed 和 Read ini file error in line 10 指出:dmdcr_cfg.ini 文件的格式与当前 dmasmcmd 版本不兼容。
报错-11017,需要先create votedisk 再init。
修改配置文件将成员节头从[CSS]改为[GRP_CSS],从[ASM]改为 [GRP_ASM],从[DSC]改为[GRP_DSC]
create dcrdisk ‘/dev/dmasm_fyq_test/dmasm-dcr’ ‘DCR’
init dcrdisk ‘/dev/dmasm_fyq_test/dmasm-dcr’ from ‘/dmdata/dsc/config/dmdcr_cfg.ini’ identified by ‘Dameng123’
create votedisk ‘/dev/dmasm_fyq_test/dmasm-vote’ ‘VOTE’
init votedisk ‘/dev/dmasm_fyq_test/dmasm-vote’ from ‘/dmdata/dsc/config/dmdcr_cfg.ini’
初始化完DCR和VOTE磁盘后,创建ASM磁盘。
使用dmasmcmd工具为每块裸设备创建ASM磁盘并指定大小。
create asmdisk ‘/dev/dmasm_fyq_test/dmasm-data’ ‘DATA0’
create asmdisk ‘/dev/dmasm_fyq_test/dmasm-log’ ‘LOG0’
listdisks ‘/dev/dmasm_fyq_test’
nohup ./dmcss DCR_INI=/dmdata/dsc/config/dmdcr.ini >> /dmdata/dsc/log/dmcss.log 2>&1 &
• nohup:让命令在后台运行,不受终端关闭影响。即使你断开SSH连接,服务也会继续运行。
• ./dmcss DCR_INI=/dmdata/dsc/config/dmdcr.ini:启动达梦集群同步服务,并指定配置文件为dmdcr.ini。
• >> /dmdata/dsc/log/dmcss.log:将标准输出(正常信息)追加到日志文件中,不会覆盖旧日志。
• 2>&1:把标准错误(报错信息)也重定向到标准输出,也就是错误和正常信息都会写入同一个日志文件。
• &:将整个命令放到后台执行,终端不会卡住,可以继续操作。
./dmcss DCR_INI=/dmdata/dsc/config/dmdcr.ini前台运行
ASM 已经自动启动
创建ASM磁盘组
dmasmcmd和dmasmtool区别
dmasmcmd:底层磁盘初始化工具。 它直接操作物理设备,功能类似于格式化工具,主要任务是在块设备(如/dev/…)头部写入ASM标识,将其变为ASM能识别的磁盘,并初始化存储集群元数据的DCR和VOTE磁盘。它的运行不依赖ASM服务是否启动。
dmasmtool:上层ASM文件系统管理工具。它需要连接到正在运行的ASM服务(dmasmsvr),通过API来管理其上的逻辑对象,比如创建/删除磁盘组、在磁盘组里查看或操作文件等。
./dmasmtool DCR_INI=/dmdata/dsc/config/dmdcr.ini
ASM>create diskgroup ‘DMDATA’ asmdisk ‘/dev/dmasm_fyq_test/dmasm-data’
ASM>create diskgroup ‘DMLOG’ asmdisk ‘/dev/dmasm_fyq_test/dmasm-log’
检查lsdg
/dmdata/dsc/config/dminit.ini
DB_NAME = DSC
SYSTEM_PATH = +DMDATA/data
MAIN = +DMDATA/data/dsc/MAIN.dbf
MAIN_SIZE = 128
ROLL = +DMDATA/data/dsc/ROLL.dbf
ROLL_SIZE = 128
SYSTEM = +DMDATA/data/dsc/SYSTEM.dbf
SYSTEM_SIZE = 128
CTL_PATH = +DMDATA/data/dsc/DM.CTL
CTL_SIZE = 8
LOG_SIZE = 256
DCR_PATH = /dev/dmasm_fyq_test/dmasm-dcr
DCR_SEQNO = 0
AUTO_OVERWRITE = 1
PAGE_SIZE = 32
CASE_SENSITIVE = Y
CHARSET = 0
SYSDBA_PWD = xxxxx
SYSAUDITOR_PWD = xxxxx
[DSC0]
CONFIG_PATH = /dmdata/dsc/config/DSC0
PORT_NUM = 5236
MAL_HOST = xxxxxx
MAL_PORT = 5736
LOG_PATH = +DMLOG/log/dsc0_log01.log
LOG_PATH = +DMLOG/log/dsc0_log02.log
[DSC1]
CONFIG_PATH = /dmdata/dsc/config/DSC1
PORT_NUM = 5236
MAL_HOST = xxxxx
MAL_PORT = 5737
LOG_PATH = +DMLOG/log/dsc1_log01.log
LOG_PATH = +DMLOG/log/dsc1_log02.log
节点的 /etc/crypto-policies/back-ends/openssh.config 文件中包含了一个不被当前SSH版本识别的配置项 gssapihexalgorithms,导致SSH服务无法正常处理连接请求。
让 scp 不要读本地 ssh 配置
scp -r -O -F /dev/null /dmdata/dsc/config/DSC1 dmdba@xxxxx:/dmdata/dsc/config/
• -F /dev/null:跳过 /etc/ssh/ssh_config 以及 crypto-policies 注入的配置,避免解析报错
• -O:强制使用传统 scp 协议(OpenSSH 9+ 默认走 SFTP,目标端若老版本可能不兼容)
• 目标路径 /dmdata/dsc/config/ 要提前存在,否则 scp 会按文件重命名处理;如果不确定先 ssh dmdba@xxxxx ‘mkdir -p /dmdata/dsc/config’
启动实例
cd /opt/dmdbms/bin
nohup ./dmserver /dmdata/dsc/config/DSC1/dm.ini dcr_ini=/dmdata/dsc/config/dmdcr.ini >> /dmdata/dsc/log/dmserver1.log 2>&1 &
配置监视器
CSSM_OGUID = 63635
CSSM_CSS_IP = xxxxx:5336
CSSM_CSS_IP = xxxxx:5337
CSSM_LOG_PATH = /dmdata/dsc/log
CSSM_LOG_FILE_SIZE = 64
CSSM_LOG_SPACE_LIMIT = 1024
验证集群状态
/opt/dmdbms/bin/dmcssm INI_PATH=/dmdata/dsc/config/dmcssm.ini
dmmal.ini(三节点内容相同)
文件位置:/dmdata/dsc/config/dmmal.ini(两个DSC节点各放一份,内容相同)
MAL_PORT(数据同步)、MAL_DW_PORT(watcher识别)、MAL_INST_DW_PORT(dmserver识别,必须等于dm.ini中的DW_PORT)
MAL_CHECK_INTERVAL = 5
MAL_CONN_FAIL_INTERVAL = 5
[MAL_INST0]
MAL_INST_NAME = DSC0
MAL_HOST = xxxxx
MAL_PORT = 5736
MAL_DW_PORT = 5436
MAL_INST_DW_PORT = 5536
[MAL_INST1]
MAL_INST_NAME = DSC1
MAL_HOST = xxxxx
MAL_PORT = 5737
MAL_DW_PORT = 5437
MAL_INST_DW_PORT = 5537
[MAL_INST2]
MAL_INST_NAME = DW_STANDBY
MAL_HOST = xxxxx
MAL_PORT = 5738
MAL_DW_PORT = 5438
MAL_INST_DW_PORT = 5538
dmarch.ini(主库两个节点)
DSC集群必须配置 [ARCHIVE_REMOTE],否则会报错。DSC0的归档目标是DSC1,DSC1的归档目标是DSC0。
[ARCHIVE_LOCAL]
ARCH_TYPE = LOCAL
ARCH_DEST = +DMDATA/arch/dsc0/arch
ARCH_FILE_SIZE = 128
ARCH_SPACE_LIMIT = 4096
[ARCHIVE_REMOTE]
ARCH_TYPE = REMOTE
ARCH_DEST = DSC1
ARCH_INCOMING_PATH = +DMDATA/arch/dsc1/arch
ARCH_FILE_SIZE = 128
ARCH_SPACE_LIMIT = 4096
[ARCHIVE_REALTIME]
ARCH_TYPE = REALTIME
ARCH_DEST = DW_STANDBY
由于是DSC集群,dmwatcher.ini 中需要指定 DCR_INI。
DW_TYPE = GLOBAL
DW_MODE = MANUAL
DW_ERROR_TIME = 10
INST_RECOVER_TIME = 60
INST_ERROR_TIME = 10
INST_OGUID = 63635
INST_INI = /dmdata/dsc/config/DSC0/dm.ini
INST_AUTO_RESTART = 1
INST_STARTUP_CMD = /opt/dmdbms/bin/dmserver
DCR_INI = /dmdata/dsc/config/dmdcr.ini
为了让数据库实例知道它要参与主备集群,并开启相关功能。
cd /dmdata/dsc/config/DSC0
修改或添加以下参数
sed -i ‘s/MAL_INI.=./MAL_INI = 1/’ dm.ini
sed -i ‘s/ARCH_INI.=./ARCH_INI = 1/’ dm.ini
sed -i ‘s/DW_PORT.=./DW_PORT = 5536/’ dm.ini
重启主库使配置生效
– DSC0、DSC1 各执行一次 MOUNT(DSC 不自动传播)
ALTER DATABASE MOUNT;
– 然后任选一个节点执行
ALTER DATABASE PRIMARY;
在主库的任意一个节点,先正常启动和关闭数据库一次以完成初始化,然后使用 dmrman 工具进行脱机全量备份。
进入监视器,关闭整个组
ep stop GRP_DSC
BACKUP DATABASE ‘/dmdata/dsc/config/DSC0/dm.ini’ FULL BACKUPSET ‘/dmdata/dsc/bak_offline’
在使用 dmrman 工具进行脱机备份时,如果报错 [-8216]: 归档日志不完整,根本原因是数据库发生过异常关闭或强制终止。这会导致部分已经写入联机日志(Redo Log)的数据还没来得及归档,使得归档日志序列出现“断层”,因此 dmrman 在校验时认为归档日志不连续,拒绝进行备份。
可以尝试在 RMAN 提示符下执行修复。
RMAN> REPAIR ARCHIVELOG DATABASE ‘/dmdata/dsc/config/DSC0/DAMENG/dm.ini’;
db_name = DSCDB
system_path = /dmdata/dw/DWSTANDBY
main_size = 128
roll_size = 128
system_size = 128
log_size = 256
PAGE_SIZE = 32
CASE_SENSITIVE = Y
CHARSET = 0
SYSDBA_PWD = Dameng123
SYSAUDITOR_PWD = Dameng123
dminit 初始化时,system_path 指定父目录,db_name 会作为子目录追加。
因此备库 dm.ini 的实际路径为 /dmdata/dw/DWSTANDBY/dsc/dm.ini,
后续所有 dmrman 还原、dmserver 启动均使用此完整路径。
在备库执行还原恢复
RESTORE DATABASE ‘/dmdata/dw/DWSTANDBY/dsc/dm.ini’ FROM BACKUPSET ‘/dmdata/dw/bak_offline’
RECOVER DATABASE ‘/dmdata/dw/DWSTANDBY/dsc/dm.ini’ UPDATE DB_MAGIC
修正 dm.ini 参数
sed -i ‘s/INSTANCE_NAME.=./INSTANCE_NAME = DW_STANDBY/’ dm.ini
sed -i ‘s/PORT_NUM.=./PORT_NUM = 5238/’ dm.ini
sed -i ‘s/MAL_INI.=./MAL_INI = 1/’ dm.ini
sed -i ‘s/ARCH_INI.=./ARCH_INI = 1/’ dm.ini
sed -i ‘s/DW_PORT.=./DW_PORT = 5538/’ dm.ini
在普通主备架构中,只有一个主库和一个备库(或一主多备),守护进程和MAL通信配置是统一的,所以以下文件可以直接拷贝:
dmmal.ini:这是MAL系统的通信配置文件,定义了节点间的通信地址和端口。主备库的 dmmal.ini 内容要求完全相同,可以直接从主库拷贝到备库,无需修改。
dmwatcher.ini:守护进程配置文件。对于普通主备,当 INST_INI 和 INST_STARTUP_CMD 等参数路径在不同节点上完全一致时,这个文件也可以直接拷贝使用。
DSC+DW的复杂性在于,主库端本身是一个多节点的DSC集群。DSC集群的节点虽然共享同一套数据文件,但每个节点有自己独立的实例身份和本地配置。
因此,对于DSC+DW架构:
dm.ini:DSC的每个节点必须有一个全局唯一的 INSTANCE_NAME,不能拷贝。
dmarch.ini:归档配置中,DSC集群内部节点间需要配置REMOTE归档(互相指向),同时还要配置REALTIME归档指向备库。每个DSC节点的配置都会因其节点序号而不同,需要分别配置。
dmwatcher.ini:DSC节点由于是集群的一部分,启动守护进程时需要额外的 DCR_INI 参数来定位共享存储上的集群信息,这使其配置与单机备库完全不同。
dmarch.ini
[ARCHIVE_LOCAL]
ARCH_TYPE = LOCAL
ARCH_DEST = /dmdata/dw/arch
ARCH_FILE_SIZE = 128
ARCH_SPACE_LIMIT = 4096
[ARCHIVE_REALTIME1]
ARCH_TYPE = REALTIME
ARCH_DEST = DSC0
[ARCHIVE_REALTIME2]
ARCH_TYPE = REALTIME
ARCH_DEST = DSC1
DSC 是 2 节点集群,备库的实时归档必须配满两个节点
dmwatcher.ini(单机备库,不需要 DCR_INI)
DW_TYPE = GLOBAL
DW_MODE = MANUAL
DW_ERROR_TIME = 10
INST_RECOVER_TIME = 60
INST_ERROR_TIME = 10
INST_OGUID = 63635
INST_INI = /dmdata/dw/DWSTANDBY/dsc/dm.ini
INST_AUTO_RESTART = 1
INST_STARTUP_CMD = /opt/dmdbms/bin/dmserver
备库使用和主库相同的 dmmal.ini
以 mount 模式启动备库
su - dmdba -c ‘nohup /opt/dmdbms/bin/dmserver /dmdata/dw/DWSTANDBY/dsc/dm.ini mount >> /dmdata/dw/log/dmserver.log 2>&1 &’
设置 OGUID 并切换为 STANDBY 模式
SP_SET_OGUID(63635);
ALTER DATABASE STANDBY;
启动:CSS → ASM → 数据库 → 守护进程 → 监视器
关闭:监视器 → 守护进程 → 数据库 → ASM → CSS
文章
阅读量
获赞
