在生产环境中,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
初始化一个大小写敏感、字符集为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(定时器参数文件)
主备库都一样
su - dmdba vi dm.ini TIMER_INI=1 #配置有异步归档时,打开定时器,定时同步归档到异步备库
两个实例参数一样
在配置 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 连接的端口
在配置 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,用于定时触发实例发送归档日志到异步备库)
异步归档的最小触发间隔是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;
数据同步成功即代表 异步备库增加完成。
文章
阅读量
获赞
