DM8主备集群搭建
1.1、守护进程
守护进程(dmwatcher)是 DM 数据守护系统不可或缺的核心部件,是数据库实例和监视器之间信息流转的桥梁。数据库实例向本地守护进程发送信息,接收本地守护进程的消息和命令;监视器(dmmonitor)接收守护进程的消息,并向守护进程发送命令;数据库实例与监视器之间没有直接的消息交互;守护进程解析并执行监视器发起的各种命令(Switchover/Takeover/Open force 等),并在必要时通知数据库实例执行相应的操作
1.2、监视器
监视器(dmmonitor)是基于监视器接口实现的一个命令行工具,是 DM 数据守护系统的重要组成部分。
通过监视器,可以监控数据守护系统的运行情况,获取主备库状态、守护进程状态、以及主备库数据同步情况等信息。同时,监视器(dmmonitor)还提供了一系列命令来管理数据守护系统。
1.3、MAL 系统
MAL 系统是基于 TCP 协议实现的一种内部通信机制,具有可靠、灵活、高效的特性。DM 通过 MAL 系统实现 Redo 日志传输,以及其他一些实例间的消息通讯。
一、环境准备
192.168.82.205 主机
192.168.82.206 备机
192.168.82.207 监视器
端口规划:
PORT_NUM、MAL_INST_DW_PORT、MAL_DW_PORT是后续配置用到的几个主要参数
服务器类型 | 数据库名 | 实例名 | PORT_NUM | MAL_INST_DW_PORT | MAL_DW_PORT |
主机 | DM01 | DMSVR01 | 5236 | 45101 | 65101 |
备机 | DM01 | DMSVR02 | 5236 | 45121 | 65121 |
新建dmdba用户:
su - root
groupadd dinstall
useradd -g dinstall -m -d /home/dmdba -s /bin/bash dmdba
id dmdba
passwd dmdba
主机与备机数据库与实例安装:
拷贝和挂载iso安装文件 略过 挂载到mnt文件夹下
安装:
/mnt/dm/DMInstall.bin -i
主机与备机分别注册实例:(主机备机DN_NAME一致)
./dminit PATH=/dm8/data DB_NAME=DM01 INSTANCE_NAME=DMSVR01 PORT_NUM=5236 PAGE_SIZE=16 EXTENT_SIZE=32 LOG_SIZE=500 CASE_SENSITIVE=1 SYSDBA_PWD=DM01SYSDBA SYSAUDITOR_PWD=DM01SYSDBA
./dminit PATH=/dm8/data DB_NAME=DM01 INSTANCE_NAME=DMSVR02 PORT_NUM=5236 PAGE_SIZE=16 EXTENT_SIZE=32 LOG_SIZE=500 CASE_SENSITIVE=1 SYSDBA_PWD=DM01SYSDBA SYSAUDITOR_PWD=DM01SYSDBA
以上使用dmdba用户运行
二、配置主机
配置dm.ini
到安装目录下/data/DM01目录下打开dm.ini
确保实例名和端口号正确,并修改MAL_INI=1 ; ARCH_INI=1
INSTANCE_NAME = DMSVR01
PORT_NUM = 5236
DW_INACTIVE_INTERVAL = 60
ALTER_MODE_STATUS = 0
ENABLE_OFFLINE_TS = 2
MAL_INI = 1
ARCH_INI = 1
RLOG_SEND_APPLY_MON
192.168.82.205
= 64
以下文件同样都在该目录下新建
新建dmmal.ini
配置上端口规划中规划的各端口参数:
PORT_NUM、MAL_INST_DW_PORT、MAL_DW_PORT
[MAL_INST1]中填写主机的、
[MAL_INST2]中填写备机的
MAL_CHECK_INTERVAL = 5
MAL_CONN_FAIL_INTERVAL = 5
[MAL_INST1]
MAL_INST_NAME = DMSVR01
MAL_HOST = 192.168.82.205
MAL_PORT = 55101
MAL_INST_HOST = 192.168.82.205
MAL_INST_PORT = 5236
MAL_DW_PORT = 65101
MAL_INST_DW_PORT = 45101
[MAL_INST2]
MAL_INST_NAME = DMSVR02
MAL_HOST = 192.168.82.206
MAL_PORT = 55121
MAL_INST_HOST = 192.168.82.206
MAL_INST_PORT = 5236
MAL_DW_PORT = 65121
MAL_INST_DW_PORT = 45121
新建dmarch.ini
主机中ARCH_DEST填写备机的实例名,同理下面备机配置中填写主机实例名
[ARCHIVE_REALTIME]
ARCH_TYPE = REALTIME
ARCH_DEST = DMSVR02
[ARCHIVE_LOCAL1]
ARCH_TYPE = LOCAL
ARCH_DEST = /dm8/data/DM01/arch
ARCH_FILE_SIZE = 128
ARCH_SPACE_LIMIT = 0
新建dmwatcher.ini
[GRP1]
DW_TYPE = GLOBAL
DW_MODE = AUTO
DW_ERROR_TIME = 10
INST_RECOVER_TIME = 60
INST_ERROR_TIME = 10
INST_OGUID = 453331
INST_INI = /dm8/data/DM01/dm.ini
INST_AUTO_RESTART = 1
INST_STARTUP_CMD = /dm8/bin/dmserver
RLOG_SEND_THRESHOLD = 0
RLOG_APPLY_THRESHOLD = 0
三、配置备机
配置dm.ini
INSTANCE_NAME = DMSVR02
PORT_NUM = 5236
DW_INACTIVE_INTERVAL = 60
ALTER_MODE_STATUS = 0
ENABLE_OFFLINE_TS = 2
MAL_INI = 1
ARCH_INI = 1
RLOG_SEND_APPLY_MON = 64
新建dmmal.ini
与主机完全一致,可以直接从主机通过scp命令将整个ini文件复制到备机即可
MAL_CHECK_INTERVAL = 5
MAL_CONN_FAIL_INTERVAL = 5
[MAL_INST1]
MAL_INST_NAME = DMSVR01
MAL_HOST = 192.168.82.205
MAL_PORT = 55101
MAL_INST_HOST = 192.168.82.205
MAL_INST_PORT = 5236
MAL_DW_PORT = 65101
MAL_INST_DW_PORT = 45101
[MAL_INST2]
MAL_INST_NAME = DMSVR02
MAL_HOST = 192.168.82.206
MAL_PORT = 55121
MAL_INST_HOST = 192.168.82.206
MAL_INST_PORT = 5236
MAL_DW_PORT = 65121
MAL_INST_DW_PORT = 45121
新建dmarch.ini
[ARCHIVE_REALTIME]
ARCH_TYPE = REALTIME
ARCH_DEST = DMSVR01
[ARCHIVE_LOCAL1]
ARCH_TYPE = LOCAL
ARCH_DEST = /dm8/data/DM01/arch
ARCH_FILE_SIZE = 128
ARCH_SPACE_LIMIT = 0
新建dmwatcher.ini
[GRP1]
DW_TYPE = GLOBAL
DW_MODE = AUTO
DW_ERROR_TIME = 10
INST_RECOVER_TIME = 60
INST_ERROR_TIME = 10
INST_OGUID = 453331
INST_INI = /dm8/data/DM01/dm.ini
INST_AUTO_RESTART = 1
INST_STARTUP_CMD = /dm8/bin/dmserver
RLOG_APPLY_THRESHOLD = 0
四、监视机配置
监视机安装数据库即可,可以不用注册实例
/dm8/data/DM01
新建dmmonitor.ini
MON_DW_CONFIRM = 1
MON_LOG_PATH = /dm8/log
MON_LOG_INTERVAL = 60
MON_LOG_FILE_SIZE = 32
MON_LOG_SPACE_LIMIT = 0
[GRP1]
MON_INST_OGUID = 453331
##dmmal.ini####MAL_HOST:MAL_DW_PORT###################
MON_DW_IP = 192.168.82.205:65101
MON_DW_IP = 192.168.82.206:65121
五、备份主机数据库
先使用root用户关停dm服务再进行备份
./dmrman CTLSTMT="BACKUP DATABASE '/dm8/data/DM01/dm.ini' FULL TO fullbak01 BACKUPSET '/dm8/backup/fullbak01'"
然后将备份好的fullbak01文件拷贝到备机,
完成后先不要启动dm服务,后续需要以mount方式启动,否则无法完成集群
在备机还原数据库
./dmrman CTLSTMT="RESTORE DATABASE '/dm8/data/DM01/dm.ini' FROM BACKUPSET '/dm8/backup/fullbak01'"
./dmrman CTLSTMT="RECOVER DATABASE '/dm8/data/DM01/dm.ini' FROM BACKUPSET '/dm8/backup/fullbak01'"
./dmrman CTLSTMT="RECOVER DATABASE '/dm8/data/DM01/dm.ini' UPDATE DB_MAGIC"
同上,完成后先不要启动dm服务
主机与备机分别以mount方式启动数据库
dmserver /dm8/data/DM01/dm.ini mount
一定要以Mount方式启动数据库实例,否则系统启动时会重构回滚表空间,生成Redo日志;
并且,启动后应用可能连接到数据库实例进行操作,破坏主备库的数据一致性。
数据守护配置结束后,守护进程会自动Open数据库。
打开disql进行参数配置
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);
主机与备机都分别运行以上的命令
六、启动守护进程
在主机、备机分别启动watcher:
su - dmdba
/dm8/bin/dmwatcher /dm8/data/DM01/dmwatcher.ini
这里虽然启动,但是发现报错:dmwatcher.ini中配置的oguid与本机的oguid不一致
原因是先在disql中进行了参数的配置(SP_SET_OGUID(453331);)后,才还原的数据库,所以再重新执行一次SP_SET_OGUID(453331);
再次运行,成功启动:
启动监视器
在监视机中启动监视器
dmmonitor /dm8/dmmonitor.ini
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本
· Manus爆火,是硬核还是营销?
· 终于写完轮子一部分:tcp代理 了,记录一下
· 别再用vector<bool>了!Google高级工程师:这可能是STL最大的设计失误
· 单元测试从入门到精通