注册
DM8主备集群
技术分享/ 文章详情 /

DM8主备集群

打工人小赵 2025/08/15 121 0 0

1.环境准备

1.1环境检查

基本和单机环境一致,操作系统参数调整一致;
集群内所有操作系统的数据盘是否独立分区;
集群内所有操作系统的目录挂载是否一致;
集群内所有操作系统是否开启ntp时间同步;
集群内所有操作系统用户(dmdba),id与group id 是否一致;
集群内所有服务器是否在同一局域网内,注意网络防火墙策略;
备份目录是否共享目录(nfs);
监视器(dmmonitor)有条件一定要独立安装在服务器。

1.2集群环境规划

如果服务器上面有多个网卡,服务ip和心跳ip可以使用不同的网卡ip,这里只有一个网卡,就是使用相同的ip进行测试使用。
image.png

1.3 配置文件说明

数据库配置文件 dm.ini
MAL 配置文件 dmmal.ini(集群内一致)
Redo 日志归档配置文件 dmarch.ini
守护进程配置文件 dmwatcher.ini(集群内基本一致)
确认监视器配置文件 dmmonitor.ini
普通监视器配置文件 dmmonitor_manual.ini

2 安装dm8

参考dm8安装

3 配置相关文件

3.1 主机

3.1.1实例化并启动

初始化实例
[dmdba@~]$ /home/dmdba/dmdbms/bin/dminit PATH=/dbdata/dmdata/ INSTANCE_NAME=GRP1_RT_01 PAGE_SIZE=32 EXTENT_SIZE=16 case_sensitive=y log_size=2048 CHARSET=1 LOG_SIZE=2048 SYSDBA_PWD=damengdba SYSAUDITOR_PWD=damengdba
启动服务
[dmdba@~]$ /home/dmdba/dmdbms/bin/dmserver /dbdata/dmdata/GRP1_RT/dm.ini
开启归档
[dmdba@~]$ /home/dmdba/dmdbms/bin/disql SYSDBA/*****@172.16.1.1:5236
SQL> ALTER DATABASE MOUNT;
SQL> ALTER DATABASE ARCHIVELOG;
SQL> ALTER DATABASE ADD ARCHIVELOG ‘DEST=/dbarch/dmarch, TYPE=LOCAL, FILE_SIZE=1024, SPACE_LIMIT=102400’;
SQL> ALTER DATABASE OPEN;
备份数据
SQL> BACKUP DATABASE BACKUPSET ‘/dbbak/dmbak/BACKUP_FILE’;
修改 dm.ini
SQL> SP_SET_PARA_VALUE (2,‘PORT_NUM’,5236);
SQL> SP_SET_PARA_VALUE (2,‘DW_INACTIVE_INTERVAL’,60);
SQL> SP_SET_PARA_VALUE (2,‘ALTER_MODE_STATUS’,0);
SQL> SP_SET_PARA_VALUE (2,‘ENABLE_OFFLINE_TS’,2);
–启动主备同步、集群
SQL> SP_SET_PARA_VALUE (2,‘MAL_INI’,1);
SQL> SP_SET_PARA_VALUE (2,‘RLOG_SEND_APPLY_MON’,64);
关闭前台实例服务

3.1.2修改dmarch.ini

ARCH_WAIT_APPLY = 1
[ARCHIVE_LOCAL1]
ARCH_TYPE = LOCAL
ARCH_DEST = /dbarch/dmarch
ARCH_FILE_SIZE = 2048
ARCH_SPACE_LIMIT = 204800
ARCH_FLUSH_BUF_SIZE = 2
ARCH_HANG_FLAG = 1
[ARCHIVE_REALTIME1]
ARCH_TYPE = REALTIME #实时归档类型
ARCH_DEST = GRP1_RT_02 #实时归档目标实例名

3.1.3创建dmmal.ini

MAL_CHECK_INTERVAL = 5 #MAL 链路检测时间间隔
MAL_CONN_FAIL_INTERVAL = 5 #判定 MAL 链路断开的时间
MAL_TEMP_PATH = /dbdata/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_RT_01 #实例名,和 dm.ini 的 INSTANCE_NAME 一致
MAL_HOST = 192.168.182.135 #MAL 系统监听 TCP 连接的 IP 地址,内网IP,根据实际IP地址配置
MAL_PORT = 61141 #MAL 系统监听 TCP 连接的端口
MAL_INST_HOST = 192.168.182.135 #实例的对外服务 IP 地址
MAL_INST_PORT = 5236 #实例对外服务端口,和 dm.ini 的 PORT_NUM 一致
MAL_DW_PORT = 52141 #实例对应的守护进程监听 TCP 连接的端口
MAL_INST_DW_PORT =33141 #实例监听守护进程 TCP 连接的端口

[MAL_INST2]
MAL_INST_NAME = GRP1_RT_02
MAL_HOST = 192.168.182.136 #MAL 系统监听 TCP 连接的 IP 地址,内网IP,根据实际IP地址配置
MAL_PORT = 61142
MAL_INST_HOST = 192.168.182.136 #实例的对外服务 IP 地址,外网IP,根据实际IP配置
MAL_INST_PORT = 5236
MAL_DW_PORT = 52142
MAL_INST_DW_PORT = 33142

3.1.4创建 dmwatcher.ini

[GRP1]
DW_TYPE = GLOBAL #全局守护类型
DW_MODE = auto #MANUAL:故障手切 AUTO:故障自切
DW_ERROR_TIME = 10 #远程守护进程故障认定时间
INST_ERROR_TIME = 10 #本地实例故障认定时间
INST_RECOVER_TIME = 60 #主库守护进程启动恢复的间隔时间
INST_OGUID = 250731 #守护系统唯一 OGUID 值,默认值453331
INST_INI = /dbdata/dmdata/GRP1_RT/dm.ini #dm.ini 文件路径
INST_AUTO_RESTART = 1 #打开实例的自动启动功能
INST_STARTUP_CMD = /home/dmdba/dmdbms/bin/dmserver #命令行方式启动
RLOG_SEND_THRESHOLD = 0 #指定主库发送日志到备库的时间阈值,默认关闭
RLOG_APPLY_THRESHOLD = 0 #指定备库重演日志的时间阈值,默认关闭
#INST_SERVICE_IP_CHECK=1
#DW_RECONNECT = 2 用于指定守护进程和实例的通信链路断开后,守护进程的处理策略

3.1.5拷贝备份文件

##拷贝备份文件到 B 机器
[dmdba@~]$ scp -r /dbbak/dmbak/BACKUP_FILE dmdba@192.168.182.136:/dbbak/dmbak/BACKUP_FILE

3.1.6注册服务

[root@~]# /home/dmdba/dmdbms/script/root/dm_service_installer.sh -t dmserver -p GRP1_RT_01 -dm_ini /dbdata/dmdata/GRP1_RT/dm.ini -m mount
[root@~]# /home/dmdba/dmdbms/script/root/dm_service_installer.sh -t dmwatcher -p Watcher -watcher_ini /dbdata/dmdata/GRP1_RT/dmwatcher.ini
禁用数据守护进程开机自启
systemctl disable DmServiceGRP1_RT_01.service
systemctl disable DmWatcherServiceWatcher.service
若要删除自启,可利用如下方式:
[root@~]# /home/dmdba/dmdbms/script/root/dm_service_uninstaller.sh -n DmServiceGRP1_RT_01
[root@~]# /home/dmdba/dmdbms/script/root/dm_service_uninstaller.sh -n DmWatcherServiceWatcher

3.2备机

3.2.1初始化实例

[dmdba@~]$ /opt/dmdbms/bin/dminit PATH=/opt/dmdbms/data/ INSTANCE_NAME=GRP1_RT_02 PAGE_SIZE=32 EXTENT_SIZE=16 case_sensitive=y log_size=2048 CHARSET=1 LOG_SIZE=2048 SYSDBA_PWD=damengdba SYSAUDITOR_PWD=damengdba
SYSDBA_PWD 和 SYSAUDITOR_PWD 为配置数据库 SYSDBA 用户和 SYSAUDITOR 用户的登录密码,需要用户自定义配置,且需保证一定的密码强度。

3.2.2恢复数据

##恢复数据库文件
/home/dmdba/dmdbms/bin/dmrman CTLSTMT=“RESTORE DATABASE ‘/dbdata/dmdata/GRP1_RT/dm.ini’ FROM BACKUPSET ‘/dbbak/dmbak/BACKUP_FILE’”
#介质恢复,使其达到一致状态。
/home/dmdba/dmdbms/bin/dmrman CTLSTMT=“RECOVER DATABASE ‘/dbdata/dmdata/GRP1_RT/dm.ini’ FROM BACKUPSET ‘/dbbak/dmbak/BACKUP_FILE’”
#恢复后更新 DB_MAGIC
/home/dmdba/dmdbms/bin/dmrman CTLSTMT=“RECOVER DATABASE ‘/dbdata/dmdata/GRP1_RT/dm.ini’ UPDATE DB_MAGIC”

3.2.3替换 dmarch.ini

ARCH_WAIT_APPLY = 1
[ARCHIVE_LOCAL1]
ARCH_TYPE = LOCAL
ARCH_DEST = /dbarch/dmarch
ARCH_FILE_SIZE = 2048
ARCH_SPACE_LIMIT = 204800
ARCH_FLUSH_BUF_SIZE = 2
ARCH_HANG_FLAG = 1
[ARCHIVE_REALTIME1]
ARCH_TYPE = REALTIME #实时归档类型
ARCH_DEST = GRP1_RT_01 #实时归档目标实例名

3.2.4 配置 dm.ini、dmmal.ini 和 dmwatcher.ini

1.配置 dm.ini
在备机上配置备库的实例名为 GRP1_RT_02,dm.ini 参数修改如下:
INSTANCE_NAME = GRP1_RT_02
PORT_NUM = 5236 #数据库实例监听端口
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.配置 dmmal.ini 和 dmwatcher.ini
备机里 dmmal.ini、dmwatcher.ini 与 主 机器 GRP1_RT_01 的 dmmal.ini、dmwatcher.ini 相同,参照主机器 dmmal.ini、dmwatcher.ini 文件进行配置。

3.2.5 注册服务

[root@~]# /home/dmdba/dmdbms/script/root/dm_service_installer.sh -t dmserver -p GRP1_RT_02 -dm_ini /dbdata/dmdata/GRP1_RT/dm.ini -m mount
[root@~]# /home/dmdba/dmdbms/script/root/dm_service_installer.sh -t dmwatcher -p Watcher -watcher_ini /dbdata/dmdata/GRP1_RT/dmwatcher.ini
#禁用数据守护进程开机自启
systemctl disable DmServiceGRP1_RT_02.service
systemctl disable DmWatcherServiceWatcher.service
若要删除自启,可利用如下方式:
[root@~]# /home/dmdba/dmdbms/script/root/dm_service_uninstaller.sh -n DmServiceGRP1_RT_02
[root@~]# /home/dmdba/dmdbms/script/root/dm_service_uninstaller.sh -n DmWatcherServiceWatcher

3.3配置确认监视器

在第三台机器192.168.182.133上配置确认监视器,存放确认监视器配置文件,并注册后台自启服务。

3.3.1 创建 dmmonitor.ini

[dmdba@~]$ vi /home/dmdba/dmdbms/bin/dmmonitor.ini
MON_DW_CONFIRM = 1 #0:非确认(故障手切) 1:确认(故障自切)
MON_LOG_PATH = /home/dmdba/dm/log #监视器日志文件存放路径
MON_LOG_INTERVAL = 10 #每隔 60s 定时记录系统信息到日志文件
MON_LOG_FILE_SIZE = 512 #单个日志大小,单位 MB
MON_LOG_SPACE_LIMIT = 2048 #日志上限,单位 MB

[GRP1]
MON_INST_OGUID = 250731 #组 GRP1 的唯一 OGUID 值
MON_DW_IP = 192.168.182.135:5436 #IP 对应 MAL_HOST,PORT 对应 MAL_DW_PORT
MON_DW_IP = 192.168.182.136:5436
配置非确认监视器:集群各节点的 bin 目录中,存放非确认监视器配置文件。
在配置监视器时,一般配置好确认监视器后,建议再配置一个非确认监视器的配置文件,在主备发生切换时,可以通过前台的方式启动非确认监视器进行手动切换。非确认监视器是通过将监视器配置文件中 MON_DW_CONFIRM 参数值修改为 0 来实现,示例如下:
[dmdba@~]$ vi /home/dmdba/dmdbms/bin/dmmonitor_manual.ini
MON_DW_CONFIRM = 0 #0:非确认(故障手切) 1:确认(故障自切)
MON_LOG_PATH = /home/dmdba/dm/log #监视器日志文件存放路径
MON_LOG_INTERVAL = 60 #每隔 60s 定时记录系统信息到日志文件
MON_LOG_FILE_SIZE = 512 #单个日志大小,单位 MB
MON_LOG_SPACE_LIMIT = 2048 #日志上限,单位 MB

[GRP1]
MON_INST_OGUID = 250731 #组 GRP1 的唯一 OGUID 值
MON_DW_IP = 192.168.182.135:5436 #IP 对应 MAL_HOST,PORT 对应 MAL_DW_PORT
MON_DW_IP = 192.168.182.136:5436

3.3.2注册服务

[root@~]# /home/dmdba/dmdbms/script/root/dm_service_installer.sh -t dmmonitor -p Monitor -monitor_ini /opt/dmdbms/bin/dmmonitor.ini
#禁用监视器进程开机自启
systemctl disable DmMonitorServiceMonitor.service
非确认监视器无需注册服务。
若要删除自启服务,可利用如下方式:
[root@~]# /home/dmdba/dmdbms/script/root/dm_service_uninstaller.sh -n DmMonitorServiceMonitor

3.4启动服务及查看信息

3.4.1 启动数据库并修改参数

##主机
[dmdba@~]$ /home/dmdba/dmdbms/bin/DmServiceGRP1_RT_01 /dbdata/dmdata/GRP1_RT/dm.ini mount --mount状态
[dmdba@~]$ /home/dmdba/dmdbms/bin/disql SYSDBA/damengdba@192.168.182.135:5236
SP_SET_PARA_VALUE(1, ‘ALTER_MODE_STATUS’, 1);
SP_SET_OGUID(250731);
ALTER DATABASE PRIMARY;
SP_SET_PARA_VALUE(1, ‘ALTER_MODE_STATUS’, 0);

##备机
[dmdba@~]$ /home/dmdba/dmdbms/bin/DmServiceGRP1_RT_02 /dbdata/dmdata/GRP1_RT/dm.ini mount --mount状态
[dmdba@~]$ /home/dmdba/dmdbms/bin/disql SYSDBA/damengdba@192.168.182.136:5236
SQL>SP_SET_PARA_VALUE(1, ‘ALTER_MODE_STATUS’, 1);
SQL> SP_SET_OGUID(250731);
SQL> ALTER DATABASE STANDBY;
SQL>SP_SET_PARA_VALUE(1, ‘ALTER_MODE_STATUS’, 0);

3.4.2启动守护进程

./DmWatcherServiceWatcher start
./DmWatcherServiceWatcher start

3.4.3启动监视器

./DmMonitorServiceMonitor start

3.4.5 查看数据库状态:

#另开一个窗口操作
/home/dmdba/dmdbms/bin/disql SYSDBA/damengdba@192.168.182.135:5236

select STATUS$ from v$instance; 

 SELECT
    CASE
        WHEN "STATUS$" = '1' THEN 'Startup'
        WHEN "STATUS$" = '2' THEN 'After Redo'
        WHEN "STATUS$" = '3' THEN 'MOUNT'
        WHEN "STATUS$" = '4' THEN 'OPEN'
        WHEN "STATUS$" = '5' THEN 'SUSPEND'
    END "库状态" ,
    CASE
        WHEN "ROLE$" = '0' THEN 'Normal'
        WHEN "ROLE$" = '1' THEN 'Parmary'
        WHEN "ROLE$" = '2' THEN 'Standby'
    END "模式" 
FROM
    v$database;

监视器:192.168.182.133
启动监视器:查看主备集群运行情况:
show global info
show state
show

问题1:启动发现Monitor可以连接到SECONDARY节点,但是却接收不到任何内容。通过查阅~/dmdbms/log/dm_dmwatcher_SECONDARY_202507.log,发现如下内容:
2025-07-31 01:11:24.589 [INFO] dmwatcher P0000026559 T0000000000000027230 Instance: 守护进程状态(STARTUP) 实例状态(OK) 实例名(PRIMARY) 模式(PRIMARY) 实例状态(MOUNT) 归档状态(INVALID) POCNT(1) FLSN(46026) CLSN(46
026) SLSN(46026) SSLSN(46026)
2025-07-31 01:11:24.909 [INFO] dmwatcher P0000026559 T0000000000000026564 dw2_tcp_conn_startup, oguid(45331) configured in dmwatcher.ini not equal with local dmserver’s oguid(0)!
原因:在 dmwatcher.ini 配置的 OGUID = 250731,但启动的 dmserver 实例中,并没有设置这个 OGUID。
解决:
##进入 disql 连接备机:
SP_SET_PARA_VALUE(1, ‘ALTER_MODE_STATUS’, 1);
SP_SET_OGUID(250731);
ALTER DATABASE STANDBY;
SP_SET_PARA_VALUE(1, ‘ALTER_MODE_STATUS’, 0);

评论
后发表回复

作者

文章

阅读量

获赞

扫一扫
联系客服