注册
DM8 实时主备增加一个异步备库
技术分享/ 文章详情 /

DM8 实时主备增加一个异步备库

codePanda 2025/12/31 138 0 0

一、背景

在生产环境中,DM8 常见部署为 一主一备一监视器 的实时主备架构,用于保障高可用。如果数据库规模很大,并且对数据的实时性要求不是很严格,则可以配置多个异步备库用于分担统计报表等任务。

异步备库支持多源配置,目的是在实时或即时主备环境中,当主备库切换或者主库故障时,备库接管以后可以继续向同一个异步备库同步数据,因此如果主库配置了异步备库,在所有备库上也需要配置相同的异步备库,备库只有在切换为主库时才会向其同步数据。

二、节点规划

在原有DM实时主备ABC节点上增加一个D节点作为异步备库。

节点 角色 业务 IP 心跳 IP 实例名 实例端口 MAL端口 守护端口
A 主库 192.168.66.201 192.168.66.101 GRP1_SCM_P 15236 15237 15239
B 实时备 192.168.66.202 192.168.66.102 GRP1_SCM_S 25236 25237 25239
C 监视器 192.168.66.109 - - - - -
D 异步备 192.168.66.203 192.168.66.103 GRP1_SCM_P2 35236 35237 35239

三、系统环境准备

配置操作系统参数

# 创建用户与用户组 groupadd -g 2001 dinstall useradd -u 2001 -g dinstall dmdba passwd dmdba # 关闭防火墙 systemctl stop firewalld systemctl disable firewalld ##关闭numa和transparent_hugepage vi /etc/default/grub GRUB_CMDLINE_LINUX 参数的最后添加 numa=off transparent_hugepage=never 查询是UEFI-based机器还是BIOS-based机器 [ -d /sys/firmware/efi ] && echo UEFI || echo BIOS 重新生成grub.cfg文件 UEFI-based 机器,执行: grub2-mkconfig -o /boot/efi/EFI/kylin/grub BIOS-based 机器,执行: grub2-mkconfig -o /boot/grub2/grub ##关闭swap分区 vi /etc/fstab 注释掉swap分区的一行 #sed -ri 's/.*swap.*/#&/' /etc/fstab ##修改文件最大打开数 vi /etc/security/limits.conf dmdba soft nice 65536 dmdba hard nice 65536 dmdba soft as unlimited dmdba hard as unlimited dmdba soft fsize unlimited dmdba hard fsize unlimited dmdba soft nproc 65536 dmdba hard nproc 65536 dmdba soft nofile 65536 dmdba hard nofile 65536 dmdba soft core unlimited dmdba hard core unlimited dmdba soft data unlimited dmdba hard data unlimited ##修改system.conf文件 vi /etc/systemd/system.conf DefaultLimitCORE=infinity DefaultLimitNOFILE=100000 DefaultLimitNPROC=100000 ##/etc/sysctl.conf文件添加以下三项 vi /etc/sysctl.conf vm.numa_stat = 0 vm.overcommit_memory=0 vm.swappiness=1 # 执行 sysctl -p 生效

四、安装路径规划

通过配置管理工具安装完成的数据库安装目录为:/dm8/dmdbms

存放实例目录:/dm8/dmdata

存放备份目录:/dm8/dmbak

存放sql日志目录:/dm8/dmlog

数据库执行码(dminit,disql等)存放目录:/dm8/dmdbms/bin/

数据库图形化工具存放目录:/dm8/dmdbms/tool

数据库手册存放目录:/dm8/dmdbms/doc

数据库驱动存放目录:/dm8/dmdbms/drivers

DM数据库安装

/DMinstall.bin -i root: /dm8/dmdbms/script/root/root_installer.sh

五、初始化异步备库实例(D 节点)

初始化一个大小写敏感、字符集为utf-8 、路径为/dm8/dmdata的实例:

su - dmdba cd /dm8/dmdbms/bin/ ./dm8/dmdbms/bin/dminit PATH=/dm8/dmdata/ DB_NAME=SCM03 INSTANCE_NAME=GRP1_SCM_P2 PORT_NUM=35236 PAGE_SIZE=32 EXTENT_SIZE=32 LOG_SIZE=2048 SYSDBA_PWD=dm_OPS_123 SYSAUDITOR_PWD=dm_OPS_123 CASE_SENSITIVE=Y charset=1 #默认实例名为 DMSERVER、端口号 5236。注意根据现场实际情况初始化数据库,./dminit help 显示全部参数。

六、主库在线备份并恢复到异步备库

主库执行在线备份

新建节点往往有数据和业务不能停机,采用联机备份

主库:192.168.66.201 SQL: [dmdba@panda01 bin]$ disql sysdba/dm_OPS_123:15236 backup database full backupset '/dm8/dmdata/SCM01/bak/20251218_full_02'; exit;

拷贝备份集到异步备库

[root@panda01 bak]# scp -r 20251218_full_02 dmdba@192.168.66.203:/dm8/dmdata/SCM03/bak #IP需要自行修改

异步备库恢复数据

执行联机数据库的还原和恢复

su - dmdba cd /dm8/dmdbms/bin # root 报错 DMAP[-8024]:数据文件读写出错 | DMAP:backup flush data error! path: /dm8/dmdata/SCM03/SYSTEM.DBF, handle: 6, offset: 0, buf_len: 196608, off: 0, write_len: 196608 ./dmrman CTLSTMT="RESTORE DATABASE '/dm8/dmdata/SCM03/dm.ini' FROM BACKUPSET '/dm8/dmdata/SCM03/bak/20251218_full_02'" ./dmrman CTLSTMT="RECOVER DATABASE '/dm8/dmdata/SCM03/dm.ini' FROM BACKUPSET '/dm8/dmdata/SCM03/bak/20251218_full_02'" ./dmrman CTLSTMT="RECOVER DATABASE '/dm8/dmdata/SCM03/dm.ini' UPDATE DB_MAGIC"

七、调整主备库原来的参数

修改配置参数-主备库都需要改192.168.66.201/202

包括dm.ini、dmmal.ini、dmarch.ini、dmtimer.ini(定时器参数文件)

A.dm.ini

主备库都一样

su - dmdba vi dm.ini TIMER_INI=1 #配置有异步归档时,打开定时器,定时同步归档到异步备库

B.dmmal.ini 增加异步实例

两个实例参数一样

在配置 dmmal.ini 的基础上,增加异步备库 MAL_INST3 的 MAL 配置项

vi dmmal.ini [MAL_INST3] MAL_INST_NAME = GRP1_SCM_P2 #实例名,和 dm.ini 的 INSTANCE_NAME 一致 MAL_HOST = 192.168.66.103 #MAL 系统监听 TCP 连接的 IP 地址 MAL_PORT = 35237 #MAL 系统监听 TCP 连接的端口 MAL_INST_HOST = 192.168.66.203 #实例的对外服务 IP 地址 MAL_INST_PORT = 35236 #实例对外服务端口,和 dm.ini 的 PORT_NUM 一致 MAL_DW_PORT = 35238 #实例对应的守护进程监听 TCP 连接的端口 MAL_INST_DW_PORT = 35239 #实例监听守护进程 TCP 连接的端口

C.dmarch.ini 增加异步归档

在配置 dmarch.ini 的基础上,增加异步归档的配置项

vi dmarch.ini [ARCHIVE_ASYNC] ARCH_TYPE=ASYNC #异步归档类型 ARCH_DEST=GRP1_SCM_P2 #异步归档目标实例名 ARCH_TIMER_NAME=RT_TIMER #定时器名称,和 dmtimer.ini 中的名称一致

dmtimer.ini 配置

dmtimer.ini(配置 dmtimer.ini,用于定时触发实例发送归档日志到异步备库)

异步归档的最小触发间隔是1分钟,下面示例中定时器配置为每天分钟触发主库发送归档日志到异步备库,可以根据实际情况再做调整

vi dmtimer.ini
[RT_TIMER] #和dmarch.ini中的 ARCH_TIMER_NAME 一致
TYPE=2 #2按日执行
FREQ_MONTH_WEEK_INTERVAL=1 #间隔月或周数
FREQ_SUB_INTERVAL=0 #间隔天数
FREQ_MINUTE_INTERVAL=1 #间隔分钟数
START_TIME=00:00:00 #开始时间
END_TIME=23:59:59 #结束时间
DURING_START_DATE=2025-12-17 12:00:00 #开始时间点
DURING_END_DATE=9999-12-31 23:59:59 #结束时间点
NO_END_DATE_FLAG=1 #是否结束标记
#DESCRIBE             	= RT TIMER
IS_VALID             	= 1  # V$DM_TIMER_INI.IS_VALID

八、监视器增加异步备守护信息

修改原监视主机上的 dmmonitor.ini (在主备集群监视器的配置基础上,需要增加异步备库守护进程的“ip:port”信息

192.168.66.109: su - dmdba vi /dm8/dmdbms/bin/dmmonitor.ini MON_DW_IP = 192.168.66.103:35238 vi /dm8/dmdbms/bin/dmmonitor_manual.ini MON_DW_IP=192.168.66.103:35238

九、异步备库配置与启动

主备库启动

启动原主备库至mount状态

先关闭监视器 192.168.66.109: ps -eflgrep dmmonitor kill -9 xxx 以mount方式将主备库重新启动,并启动守护进程(bin目录下) 192.168.66.201/202 停止服务: DmServiceGRP1_SCM_P stop DmServiceGRP1_SCM_S stop DmWatcherServiceWatcher stop DmWatcherServiceWatcher stop ps -ef|grep dmw atcher ps -ef|grep dms erver 设置mount状态: nohup dmserver /dm8/dmdata/SCM01/dm.ini mount & nohup dmserver /dm8/dmdata/SCM02/dm.ini mount & 启动守护进程: DmWatcherServiceWatcher start DmWatcherServiceWatcher start

异步备库配置

配置参数文件包括dm.ini、dmmal.ini、dmarch.ini、dmwatcher.ini(守护进程文件)

A.dm.ini INSTANCE_NAME=GRP1_SCM_P2 #异步备库实例 PORT_NUM=35236 #数据库实例监听端口 DW_PORT=35239 #守护环境下,监听守护进程连接端口,为上面规划表中的 MAL_INST_DW_PORT 值 DW_ERROR_TIME=60 #接收守护进程消息超时时间 ALTER_MODE_STATUS=0 #不允许手工方式修改实例模式/状态 ENABLE_OFFLINE_TS=2 #不允许备库 OFFLINE 表空间 MAL_INI=1 #打开 MAL 系统 ARCH_INI=1 #打开归档配置 HA_INST_CHECK_FLAG=1 #检测是否多个实例进程同时启动 RLOG_SEND_APPLY_MON=64 #统计最近 64 次的日志发送信息 B.dmmal.ini 几个实例参数一样 vi dmmal.ini MAL_CHECK_INTERVAL = 10 #MAL 链路检测时间间隔 MAL_CONN_FAIL_INTERVAL = 10 #判定 MAL 链路断开的时间 MAL_TEMP_PATH = /dm8/dmdata/malpath/ #临时文件目录 MAL_BUF_SIZE = 512 #单个 MAL 缓存大小,单位 MB MAL_SYS_BUF_SIZE = 2048 #MAL 总大小限制,单位 MB MAL_COMPRESS_LEVEL = 0 #MAL 消息压缩等级,0 表示不压缩 [MAL_INST1] MAL_INST_NAME = GRP1_SCM_P #实例名,和 dm.ini 的 INSTANCE_NAME 一致 MAL_HOST = 192.168.66.101 #MAL 系统监听 TCP 连接的 IP 地址 MAL_PORT = 15237 #MAL 系统监听 TCP 连接的端口 MAL_INST_HOST = 192.168.66.201 #实例的对外服务 IP 地址 MAL_INST_PORT = 15236 #实例对外服务端口,和 dm.ini 的 PORT_NUM 一致 MAL_DW_PORT = 15238 #实例对应的守护进程监听 TCP 连接的端口 MAL_INST_DW_PORT = 15239 #实例监听守护进程 TCP 连接的端口 [MAL_INST2] MAL_INST_NAME = GRP1_SCM_S MAL_HOST = 192.168.66.102 MAL_PORT = 25237 MAL_INST_HOST = 192.168.66.202 MAL_INST_PORT = 25236 MAL_DW_PORT = 25238 MAL_INST_DW_PORT = 25239 vi dmmal.ini [MAL_INST3] MAL_INST_NAME = GRP1_SCM_P2 #实例名,和 dm.ini 的 INSTANCE_NAME 一致 MAL_HOST = 192.168.66.103 #MAL 系统监听 TCP 连接的 IP 地址 MAL_PORT = 35237 #MAL 系统监听 TCP 连接的端口 MAL_INST_HOST = 192.168.66.203 #实例的对外服务 IP 地址 MAL_INST_PORT = 35236 #实例对外服务端口,和 dm.ini 的 PORT_NUM 一致 MAL_DW_PORT = 35238 #实例对应的守护进程监听 TCP 连接的端口 MAL_INST_DW_PORT = 35239 #实例监听守护进程 TCP 连接的端口 C.dmarch.ini vi dmarch.ini [ARCHIVE_LOCAL1] ARCH_TYPE = LOCAL #本地归档类型 ARCH_DEST = /dm8/dmdata/DAMENG/arch #本地归档文件存放路径 ARCH_FILE_SIZE = 2048 #单位Mb,本地单个归档文件最大值 ARCH_SPACE_LIMIT = 204800 #单位Mb,0表示无限制,范围1024~4294967294M D.创建dmwatcher.ini文件 #异步备库不具备故障自动切换等功能,DW_MODE配置并不起作用 修改 dmwatcher.ini 配置守护进程,配置为本地守护类型,异步备库不具备故障自动切换等功能 DW_MODE配置并不起作用,此处配置为 MANUAL 即可,另外异步备库不需要配置 dmwatcher.ctl 控制文件。 vi dmwatcher.ini [GRP1] DW_TYPE = LOCAL #本地类型 DW_MODE = MANUAL #手工切换模式 DW_ERROR_TIME = 20 #远程守护进程故障认定时间 INST_RECOVER_TIME = 60 #主库守护进程启动恢复的间隔时间 INST_ERROR_TIME = 20 #本地实例故障认定时间 INST_OGUID = 25114 #守护系统唯一OGUID值 INST_INI =/dm8/dmdata/SCM03/dm.ini #dm.ini配置文件路径 INST_AUTO_RESTART = 1 #打开实例的自动启动功能 INST_STARTUP_CMD = /dm8/dmdbms/bin/dmserver #命令行方式启动

设置为备库

以Mount方式启动异步备库进行配置

192.168.66.203: root: cd /dm8/dmdbms/script/root/ ./dm_service_installer.sh -t dmserver -dm_ini /dm8/dmdata/SCM03/dm.ini -p SCM03 ./dm_service_installer.sh -t dmwatcher -watcher_ini /dm8/dmdata/SCM03/dmwatcher.ini -p SCM03 su - dmdba cd /dm8/dmdbms/bin nohup dmserver /dm8/dmdata/SCM03/dm.ini mount & disql SYSDBA/dm_OPS_123@192.168.66.203:35236 select status$ from v$database; SP_SET_PARA_VALUE(1,'ALTER_MODE_STATUS', 1); sp_set_oguid(25114); alter database standby; SP_SET_PARA_VALUE(1,'ALTER_MODE_STATUS', 0); exit; 启动守护进程: su - dmdba cd /dm8/dmdbms/bin DmWatcherServiceSCM03 start

十、查看相关视图信息

查看守护进程: select * from v$dmwatcher; 查看MAL: select * from v$mal_link_status; #查看定时器: select * from V$DM_TIMER_INI; 查看归档: select * from v$arch_status;

十一、启动监视器

192.168.66.203

/dm8/dmdbms/bin/dmmonitor path=/dm8/dmdbms/bin/dmmonitor.ini ./dmmonitor /dm8/dmdbms/bin/dmmonitor.ini [root@panda09 bin]# ./dmmonitor dmmonitor_manual.ini

检查状态信息是否正常,备库LSN是否变动

十二、数据同步测试

在主库上插入数据,然后检查两个备库数据是否同步

主库执行:

create table num(id int); insert into num values(20251218); commit;

异步备库查询:

select * from num;

数据同步成功即代表 异步备库增加完成

评论
后发表回复

作者

文章

阅读量

获赞

扫一扫
联系客服