注册
DM8DSC停库搭建单实例实时DW
技术分享/ 文章详情 /

DM8DSC停库搭建单实例实时DW

好好先生 2025/12/19 160 0 0

一、架构优势分析

在DMDSC(达梦数据守护集群)架构基础上增加一个DW(Data Watch,实时备库)的架构,结合了DMDSC的高可用性与DW的实时同步能力,能够显著提升数据库系统的整体性能、可用性和数据保护能力。

以下是该架构的主要优势分析:

  1. 高可用性
    DMDSC基础:DMDSC本身是一个多节点集群,通过数据同步和故障自动切换机制,确保主库故障时备库能快速接管服务,业务连续性不受影响。
    DW增强:DW作为额外的实时备库,进一步冗余数据存储。即使DMDSC集群中所有节点同时故障(如极端灾难场景),DW仍可提供数据访问,避免业务中断。
    通常适用于金融、电信等对可用性要求极高的行业,满足“RTO(恢复时间目标)趋近于0”的需求。
  2. 数据实时保护与灾难恢复
    同步机制:DW通过实时日志同步(如基于达梦MAL传输技术)与主库保持数据一致,延迟极低(通常毫秒级)。
    灾难恢复:在数据中心级故障(如火灾、地震)时,DW可快速切换为主库,或作为数据恢复的基准,减少数据丢失风险。
  3. 读写分离与负载均衡
    查询分流:DW可承担读操作(如报表、分析查询),减轻主库压力,提升整体吞吐量。
    灵活扩展:结合DMDSC的读写分离功能,可构建多级读写分离架构(如主库写+DMDSC备库读+DW读),进一步优化资源利用。
  4. 灵活的故障切换与维护
    计划内维护:在DMDSC主库升级或维护时,可临时将业务切换至DW,实现零停机维护。
    故障隔离:若DMDSC集群内某节点故障,DW可继续提供服务;反之,DW故障不影响主库运行,增强系统韧性。
    自动化管理:达梦工具(如DMCSSM和DMMonitor和)支持自动化故障检测和切换,降低运维复杂度。

二、搭建步骤

主库1 主库2 备库 备注
DB_NAME DSC DSC DW 主备不要求一致
INATANCE_NAME DSC01 DSC02 DW
心跳IP 10.10.10.31 10.10.10.32 /
业务IP 192.168.236.31 192.168.236.32 192.168.236.21
数据库版本 8.1.4.170 8.1.4.170 8.1.4.170 版本不一致rman恢复会报错
CHARSET GB18030 GB18030 GB18030

2.1 搭建2节点DSC集群

参考DM8数据共享集群手册完成搭建并检验。搭建完成后,正常退出DMDSC集群的两个dmserver节点实例,不需要退出dmcssdmasmsvr

2.2 备份 DSC 集群数据

在DMDSC集群生成有归档日志的情况下进行脱机备份,以便后续校验日志连续性时使用。
备注:dmrman的use_ap参数可以参考DM8备份与还原手册,当值=2时,采用无辅助进程方式,本次备份采用use_ap=2,由DMRMAN进程自身完成备份还原,不依赖DMAP服务;配置成2的情况下,不能执行第三方备份(即指定DEVICE TYPE为TAPE)
DSC01:(DSC01)

# 启动dmrman ./dmrman use_ap=2 dcr_ini=/dmdata/DSC/dmdcr.ini # 脱机备份DMDSC集群 RMAN>BACKUP DATABASE '/dmdata/DSC/dsc01_config/dm.ini' FULL BACKUPSET '/dmbak/back251213'; # 检查备份文件有效性 RMAN> check backupset '/dmbak/back251213'; # 将备份文件发送到DW机器 [dmdba@~]# scp -r back251213/ 192.168.236.21:/dmbak

2.3 备机创建用户、目录、安装数据库

DW 机器将数据库安装在/dm8目录下,并初始化实例到/dm8/data目录,且初始化实例参数应与DSC集群初始化参数保持一致

vi dmini.ini PATH=/dm8/data DB_NAME = DW INSTANCE_NAME ROLL_SIZE = 128 LOG_SIZE = 256 EXTENT_SIZE = 32 CASE_SENSITIVE = Y SYSDBA_PWD = 'Dameng.com123' SYSAUDITOR_PWD = 'Dameng.com123' BLANK_PAD_MODE = 0 PAGE_SIZE = 16 CHARSET = 0 ./dminit control=/dm8/dmini.ini

2.4 实时备机上还原 DSC 集群数据

##登录备机使用 rman 进行还原(注意:备机初始化参数要与主库一致) ./dmrman use_ap=2 RMAN> check backupset '/dmbak/back251213'; RMAN>RESTORE DATABASE '/dm8/data/DW/dm.ini' FROM BACKUPSET '/dmbak/back251213'; RMAN>RECOVER DATABASE '/dm8/data/DW/dm.ini' FROM BACKUPSET '/dmbak/back251213'; RMAN>RECOVER DATABASE '/dm8/data/DW/dm.ini' UPDATE DB_MAGIC;

2.5 修改DSC01和DSC02的dm.ini

DSC01和DSC02

vi dm.ini # 修改部分 DW_INACTIVE_INTERVAL = 60 #接收守护进程消息超时时间 ALTER_MODE_STATUS = 0 #不允许手工方式修改实例模式/状态/OGUID ENABLE_OFFLINE_TS = 2 #不允许备库 OFFLINE 表空间 MAL_INI = 1 #打开 MAL 系统 ARCH_INI = 1 #打开归档配置 RLOG_SEND_APPLY_MON = 64 #统计最近 64 次的日志发送信息

DW

vi dm.ini # 修改部分 INSTANCE_NAME = DW PORT_NUM = 5238 #数据库实例监听端口 DW_INACTIVE_INTERVAL = 60 #接收守护进程消息超时时间 ALTER_MODE_STATUS = 0 #不允许手工方式修改实例模式/状态/OGUID ENABLE_OFFLINE_TS = 2 #不允许备库 OFFLINE 表空间 MAL_INI = 1 #打开 MAL 系统 ARCH_INI = 1 #打开归档配置 RLOG_SEND_APPLY_MON = 64 #统计最近 64 次的日志发送信息

2.6修改dmdcr.ini

DSC01:

vi /dmdata/DSC/dmdcr.ini DMDCR_PATH = /dev/asmdisk/dmdcr01 DMDCR_MAL_PATH = /dmdata/DSC/dmasvrmal.ini DMDCR_SEQNO = 0 DMDCR_ASM_RESTART_INTERVAL = 30 DMDCR_ASM_STARTUP_CMD = /dm8/bin/DmASMSvrServiceAsmsvr start DMDCR_DB_RESTART_INTERVAL = 30 #改为启动到mount DMDCR_DB_STARTUP_CMD = /dm8/bin/DmServiceDSC start mount DMDCR_AUTO_OPEN_CHECK = 111 DMDCR_ASM_TRACE_LEVEL = 2

DSC02:

vi /dmdata/DSC/dmdcr.ini DMDCR_PATH = /dev/asmdisk/dmdcr01 DMDCR_MAL_PATH = /dmdata/DSC/dmasvrmal.ini DMDCR_SEQNO = 0 DMDCR_ASM_RESTART_INTERVAL = 30 DMDCR_ASM_STARTUP_CMD = /dm8/bin/DmASMSvrServiceAsmsvr start DMDCR_DB_RESTART_INTERVAL = 30 #改为启动到mount DMDCR_DB_STARTUP_CMD = /dm8/bin/DmServiceDSC start mount DMDCR_AUTO_OPEN_CHECK = 111 DMDCR_ASM_TRACE_LEVEL = 2

2.7 配置dmmal.ini

DSC01、DSC02 和 DW 机器配置 dmmal.ini(dmmal.ini 和 dm.ini 放在同一路径下),三台机器的 dmmal.ini 文件内容必须一致。

MAL_CHECK_INTERVAL=30 MAL_CONN_FAIL_INTERVAL=10 MAL_SYS_BUF_SIZE=600 MAL_BUF_SIZE=300 MAL_VPOOL_SIZE=500 MAL_COMPRESS_LEVEL=0 [MAL_INST0] MAL_INST_NAME = DSC01 MAL_HOST = 10.10.10.31 MAL_PORT = 9461 MAL_INST_HOST = 192.168.236.31 MAL_INST_PORT = 5236 MAL_DW_PORT = 52141 MAL_INST_DW_PORT = 5276 MAL_LINK_MAGIC =1 #值一样,dmwatcher之间和dmserver之间的通信使用的是MAL_HOST,值不一致则用的是MAL_INST_HOST。 [MAL_INST1] MAL_INST_NAME = DSC02 MAL_HOST = 10.10.10.32 MAL_PORT = 9461 MAL_INST_HOST = 192.168.236.32 MAL_INST_PORT = 5236 MAL_DW_PORT = 52141 MAL_INST_DW_PORT = 5276 MAL_LINK_MAGIC =1 [MAL_INST2] MAL_INST_NAME = DW MAL_HOST = 192.168.236.21 MAL_PORT = 9461 MAL_INST_HOST = 192.168.236.21 MAL_INST_PORT = 5236 MAL_DW_PORT = 52141 MAL_INST_DW_PORT = 5276 MAL_LINK_MAGIC =2#值不一致则用的是MAL_INST_HOST。所以这样配置,DSC之间用心跳网络通信,DW之间用业务网络通信

2.8配置dmarch.ini

DSC01配置

[ARCHIVE_LOCAL1] ARCH_TYPE = LOCAL ARCH_DEST = +DMDATA/DSC/DSC01/arch ARCH_FILE_SIZE = 128 ARCH_SPACE_LIMIT = 0 [ARCHIVE_REMOTE] ARCH_TYPE = REMOTE ARCH_DEST = DSC02 ARCH_INCOMING_PATH = +DMDATA/DSC/DSC02/arch [ARCHIVE_REALTIME] ARCH_TYPE = REALTIME ARCH_DEST = DW

DSC02配置

[ARCHIVE_LOCAL1] ARCH_TYPE = LOCAL ARCH_DEST = +DMDATA/DSC/DSC02/arch ARCH_FILE_SIZE = 128 ARCH_SPACE_LIMIT = 0 [ARCHIVE_REMOTE] ARCH_TYPE = REMOTE ARCH_DEST = DSC01 ARCH_INCOMING_PATH = +DMDATA/DSC/DSC01/arch [ARCHIVE_REALTIME] ARCH_TYPE = REALTIME ARCH_DEST = DW

DW配置

[ARCHIVE_LOCAL1] ARCH_TYPE = LOCAL ARCH_DEST = /dmarch ARCH_FILE_SIZE = 128 ARCH_SPACE_LIMIT = 0 [ARCHIVE_REALTIME1] ARCH_TYPE = REALTIME ARCH_DEST = DSC01/DSC02

2.9 配置dmwatcher.ini

DSC01

[GRP1] DW_TYPE = GLOBAL DW_MODE = MANUAL DW_ERROR_TIME = 120 INST_RECOVER_TIME = 60 INST_ERROR_TIME = 120 INST_OGUID = 453331 INST_INI = /dmdata/DSC/dsc01_config/dm.ini DCR_INI= /dmdata/DSC/dmdcr.ini INST_STARTUP_CMD = /dm8/bin/dmserver INST_AUTO_RESTART = 0 RLOG_SEND_THRESHOLD = 0 RLOG_APPLY_THRESHOLD = 0

DSC02

[GRP1] DW_TYPE = GLOBAL DW_MODE = MANUAL DW_ERROR_TIME = 120 INST_RECOVER_TIME = 60 INST_ERROR_TIME = 120 INST_OGUID = 453331 INST_INI = /dmdata/DSC/dsc02_config/dm.ini DCR_INI= /dmdata/DSC/dmdcr.ini INST_STARTUP_CMD = /dm8/bin/dmserver INST_AUTO_RESTART = 0 RLOG_SEND_THRESHOLD = 0 RLOG_APPLY_THRESHOLD = 0

DW

[GRP1] DW_TYPE = GLOBAL #全局守护类型 DW_MODE = MANUAL#手动切换模式 DW_ERROR_TIME = 120 #远程守护进程故障认定时间 INST_RECOVER_TIME = 60 #主库守护进程启动恢复的间隔时间 INST_ERROR_TIME = 120 #本地实例故障认定时间 INST_OGUID = 453331 #守护系统唯一 OGUID 值 INST_INI = /dm8/data/DW/dm.ini #dm.ini 配置文件路径 INST_AUTO_RESTART = 0 #设置实例不自动拉起 INST_STARTUP_CMD = /dm8/bin/dmserver #命令行方式启动 RLOG_SEND_THRESHOLD = 0 #指定主库发送日志到备库的时间阈值,默认关闭 RLOG_APPLY_THRESHOLD = 0 #指定备库重演日志的时间阈值,默认关闭

主库注册守护进程服务

su - root cd /dm8/script/root #DSC01: ./dm_service_installer.sh -t dmwatcher -watcher_ini /dmdata/DSC/dsc01_config/dmwatcher.ini -p DSC #DSC02: ./dm_service_installer.sh -t dmwatcher -watcher_ini /dmdata/DSC/dsc02_config/dmwatcher.ini -p DSC

备库注册守护进程和数据库进程服务

su - root cd /dm8/script/root ./dm_service_installer.sh -t dmserver -dm_ini /dm8/data/DW/dm.ini -m mount -p DW ./dm_service_installer.sh -t dmwatcher -watcher_ini /dm8/data/DW/dmwatcher.ini -p DW

2.10 配置 DSC+ 实时备机监视器

在DSC01编辑dmmonitor.ini

MON_DW_CONFIRM = 0 MON_LOG_PATH = /dm8/log MON_LOG_INTERVAL = 60 MON_LOG_FILE_SIZE = 60 MON_LOG_SPACE_LIMIT = 300 [GRP1] MON_INST_OGUID = 453331 MON_DW_IP = 192.168.236.31:52141/192.168.236.32:52141 MON_DW_IP = 192.168.236.21:52141

2.11 启动主备库

注意需要以mount方式启动

./dmserver dcr_ini=/dmdata/DSC/dmdcr.ini /dmdata/DSC/dsc01_config/dm.ini mount ./dmserver dcr_ini=/dmdata/DSC/dmdcr.ini /dmdata/DSC/dsc02_config/dm.ini mount ./dmserver /dm8/data/DW/dm.ini mount

2.12 设置 OGUID

启动disql链接DMDSC集群中的任意一个节点,设置DMDSC主库的OGUID值

./disql SYSDBA/'"Dmglydmm@2025"'@127.0.0.1:5236 SQL> sp_set_para_value(1,'ALTER_MODE_STATUS',1); SQL> sp_set_oguid(453331); SQL> alter database primary; SQL> sp_set_para_value(1,'ALTER_MODE_STATUS',0);

disql连接单节点备库,设置备库OGUID

./disql SYSDBA/'"Dmglydmm@2025"'@127.0.0.1:5238 SQL> sp_set_para_value(1,'ALTER_MODE_STATUS',1); SQL> sp_set_oguid(453331); SQL> alter database standby; SQL> sp_set_para_value(1,'ALTER_MODE_STATUS',0);

3.启动集群

3.1主备先启动集群数据库

# 双节点执行 ./dmcss DCR_INI=/home/dmdba/dsc_config/dmdcr.ini # 双节点执行 ./dmasmsvr DCR_INI=/home/dmdba/dsc_config/dmdcr.ini # DSC01和DSC02分别启动数据库实例 ./dmserver dcr_ini=/home/dmdba/dsc_config/dmdcr.ini /home/dmdba/dsc_config/DSC01_conf/dm.ini mount ./dmserver dcr_ini=/home/dmdba/dsc_config/dmdcr.ini /home/dmdba/dsc_config/DSC02_conf/dm.ini mount # 节点3启动数据库实例 ./dmserver /home/dmdba/data/EP01/DAMENG/dm.ini mount

再启动守护进程

./dmwatcher /home/dmdba/dsc_config/DSC01_conf/dmwatcher.ini ./dmwatcher /home/dmdba/dsc_config/DSC02_conf/dmwatcher.ini ./dmwatcher /home/dmdba/data/EP01/DAMENG/dmwatcher.ini # DSC01启动监视器 ./dmmonitor path=/home/dmdba/dsc_config/DSC01_conf/dmmonitor.ini

DW的守护进程会自动将实例open

3.2关闭集群

先关闭各节点的守护进程,再关闭数据库

评论
后发表回复

作者

文章

阅读量

获赞

扫一扫
联系客服