达梦数据库守护进程搭建(实时主备)
目录
一. 环境说明 3
二. 数据准备 5
三. 脱机备份和还原 7
四. 配置主库GREP01 8
4.1 配置DM.INI 8
4.2 配置 DMMAL.INI 8
4.3 配置 DMARCH.INI 9
4.4 配置 DMWATCHER.INI 9
4.5 启动主库 10
4.6 设置 OGUID 10
4.7 修改数据库模式 11
五. 配置备库 GREP02 12
5.1 配置 DM.INI 12
5.2 配置 DMMAL.INI 12
5.3 配置 DMARCH.INI 13
5.4 配置 DMWATCHER.INI 13
5.5 启动备库 14
5.6 设置 OGUID 14
5.7 修改数据库模式 15
六. 配置监视器 15
七. 启动守护进程 16
八. 启动监视器 17
九. 验证主备功能 18
一. 环境说明
实时主备由一个主库以及一个或者多个配置了实时(Realtime)归档的备库组成,其主要目的是保障数据库可用性,提高数据安全性。实时主备系统中,主库提供完整的数据库功能,备库提供只读服务。主库修改数据产生的Redo日志,通过实时归档机制,在写入联机Redo日志文件之前发送到备库,实时备库通过重演Redo日志与主库保持数据同步。当主库出现故障时,备库在将所有Redo日志重演结束后,就可以切换为主库对外提供数据库服务。
准备三台机器 DB_F、 DB_S、 DB_M, DB_F 和 DB_S 用来部署主备库, DB_M 用来部署确认监视器。其中 DB_F 和 DB_S 配置两块网卡,一块接入内部网络交换模块,一块接入到外部交换机, DB_M 接入内部网络。
下列机器事先都安装了 DM,安装路径为’ /dm8/dmdbms/’,执行程序保存在’ /dm8/dmdbms/bin’目录中,数据存放路径为’ /dm8/data’。本示例中配置为实时主备, 主库命名为“GREP01”,备库命名为“GREP02”。
机器名 IP地址 初始状态 操作系统 备注
DB_F 10.10.10.13
192.168.58.22 主库
GREP01 CentOS Linux release 7.5.1804 (Core) 192.168.58.22
外部通信IP
10.10.10.13
内部通信ip
DB_S 10.10.10.14
192.168.58.25 备库
GREP02 CentOS Linux release 7.5.1804 (Core) 192.168.58.25
外部通信IP
10.10.10.14
内部通信ip
DB_M 10.10.10.15 确认监视器 CentOS Linux release 7.5.1804 (Core)
实例名 PORT_NUM MAL_INST_DW_PORT
MAL_HOST MAL_PORT MAL_DW_PORT
GREP01 6234 6334 10.10.10.13 54321 44321
GREP02 6235 6335 10.10.10.14 54322 44322
二. 数据准备
配置数据守护之前,必须先通过备份还原方式同步各数据库的数据,确保各数据的数据保持完全一致。 主库可以是新初始化的数据库,也可以是正在生产、使用中的数据库。不能使用分别初始化库或者直接拷贝数据文件的方法,原因如下:
1. 每个库都有一个永久魔数(permenant_magic), 一经生成,永远不会改变, 主库传送日志时会判断这个值是否一样,确保是来自同一个数据守护环境中的库,否则传送不了日志。
2. 由于 dminit 初始化数据库时,会生成随机密钥用于加密,每次生成的密钥都不相同,备库无法解析采用主库密钥加密的数据。
3. 每个库都有一个数据库魔数(DB_MAGIC), 每经过一次还原、恢复操作, DB_MAGIC就会产生变化,需要通过这种方式来区分同一个数据守护环境中各个不同的库。
如果需要使用 Huge 表,在初始化库时需要将建库参数 HUGE_WITH_DELTA 和RLOG_GEN_FOR_HUGE 都配置为 1。对于新初始化的库,首次启动不允许使用 Mount 方式,需要先正常启动并正常退出,然后才允许 Mount 方式启动。
准备数据时,如果主库是新初始化的库,先正常启动并正常退出,然后再使用
备份还原方式准备备库数据。
如果是初始搭建环境,可以通过对主库脱机备份、对备库脱机还原的方式来准备数据,如果主库已经处于运行状态,则可以对主库进行联机备份、对备库脱机还原的方式来准备数据。两种方式都需要服务器配置本地归档,本地归档配置方式如下:
1.配置 dm.ini,打开 ARCH_INI 参数
ARCH_INI = 1 #打开归档配置

2.配置 dmarch.ini

三. 脱机备份和还原
本次测试,采用脱机备份、还原的方式进行。
- 正常关闭数据库
[dmdba@grep1 DAMENG]$ service DmServiceDMSERVER stop
Redirecting to /bin/systemctl stop DmServiceDMSERVER.service - 进行脱机备份
[dmdba@grep1 bin]$ ./dmrman CTLSTMT=“BACKUP DATABASE ‘/dm8/data/DAMENG/dm.ini’ FULL TO BACKUP_FILE1 BACKUPSET ‘/dm8/data/BACKUP_FILE_01’”
[dmdba@grep1 dm8]$ cd data/
[dmdba@grep1 data]$ ls
BACKUP_FILE_01 DAMENG
[dmdba@grep1 data]$ cd BACKUP_FILE_01/
[dmdba@grep1 BACKUP_FILE_01]$ ls
BACKUP_FILE_01.bak BACKUP_FILE_01.meta
- 拷贝备份文件到备库所在机器
[dmdba@grep1 data]$ scp -r BACKUP_FILE_01/ 192.168.58.25:/dm8/data/
[dmdba@grep2 data]$ ls
BACKUP_FILE_01 DAMENG - 执行脱机数据库还原与恢复
[dmdba@grep2 bin]$ ./dmrman CTLSTMT=“RESTORE DATABASE ‘/dm8/data/DAMENG/dm.ini’ FROM BACKUPSET ‘/dm8/data/BACKUP_FILE_01’”
[dmdba@grep2 bin]$ ./dmrman CTLSTMT=“RECOVER DATABASE ‘/dm8/data/DAMENG/dm.ini’ FROM BACKUPSET ‘/dm8/data/BACKUP_FILE_01’”
[dmdba@grep2 bin]$ ./dmrman CTLSTMT=“RECOVER DATABASE ‘/dm8/data/DAMENG/dm.ini’ UPDATE DB_MAGIC”
四. 配置主库GREP01
4.1 配置dm.ini
在 DB_F 机器上配置主库的实例名为 GREP01, dm.ini 参数修改如下:
INSTANCE_NAME = GREP01
PORT_NUM = 6234 #数据库实例监听端口
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 次的日志发送信息
4.2 配置 dmmal.ini
配置 MAL系统,各主备库的 dmmal.ini 配置必须完全一致, MAL_HOST 使用内部网络 IP, MAL_PORT 与 dm.ini 中 PORT_NUM 使用不同的端口值, MAL_DW_PORT 是各实例对应的守护进程之间,以及守护进程和监视器之间的通信端口,配置如下:

4.3 配置 dmarch.ini
修改 dmarch.ini,配置本地归档和实时归档。除了本地归档外,其他归档配置项中的 ARCH_DEST 表示实例是 Primary 模式时,需要同步归档数据的目标实例名。当前实例 GREP01 是主库,需要向 GREP02(实时备库)同步数据,因此实时归档的 ARCH_DEST 配置为 GREP02。

4.4 配置 dmwatcher.ini

修改 dmwatcher.ini 配置守护进程,配置为全局守护类型,使用自动切换模式。
4.5 启动主库
以 Mount 方式启动主库
[dmdba@grep1 bin]$ ./dmserver /dm8/data/DAMENG/dm.ini mount
一定要以 Mount 方式启动数据库实例,否则系统启动时会重构回滚表空间,生
成 Redo 日志;并且,启动后应用可能连接到数据库实例进行操作,破坏主备
库的数据一致性。数据守护配置结束后,守护进程会自动 Open 数据库。
4.6 设置 OGUID
启动命令行工具 DIsql,登录主库设置 OGUID 值。
[dmdba@localhost bin]$ ./disql SYSDBA/123456789:6234

系统通过 OGUID 值确定一个守护进程组,由用户保证 OGUID 值的唯一性,并确保数据守护系统中,数据库、守护进程和监视器配置相同的 OGUID 值。
4.7 修改数据库模式
启动命令行工具 DIsql,登录主库修改数据库为 Primary 模式
SQL> alter database primary;
操作已执行
已用时间: 3.648(毫秒). 执行号:0.
五. 配置备库 GREP02
5.1 配置 dm.ini
在 DB_S机器上配置备库的实例名为 GREP02, dm.ini 参数修改如下:
INSTANCE_NAME = GREP02
PORT_NUM = 6235 #数据库实例监听端口
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 次的日志重演信息
5.2 配置 dmmal.ini
配置 MAL 系统,各主备库的 dmmal.ini 配置必须完全一致, MAL_HOST 使用内部网络 IP, MAL_PORT 与 dm.ini 中 PORT_NUM 使用不同的端口值, MAL_DW_PORT 是各实例对应的守护进程之间,以及守护进程和监视器之间的通信端口,配置如下:

5.3 配置 dmarch.ini
修改 dmarch.ini,配置本地归档和实时归档。除了本地归档外,其他归档配置项中的 ARCH_DEST 表示实例是 Primary 模式时,需要同步归档数据的目标实例名。当前实例 GREP02 是备库,守护系统配置完成后,可能在各种故障处理中,GREP02 切换为新的主库,正常情况下, GREP01 会切换为新的备库,需要向GREP01 同步数据,因此实时归档的 ARCH_DEST 配置为 GREP01。

5.4 配置 dmwatcher.ini
修改 dmwatcher.ini 配置守护进程,配置为全局守护类型,使用自动切换模式。

5.5 启动备库
以 Mount 方式启动备库
[dmdba@localhost bin]$ ./dmserver /dm8/data/DAMENG/dm.ini mount
一定要以 Mount 方式启动数据库实例,否则系统启动时会重构回滚表空间,
生成 Redo 日志;并且,启动后应用可能连接到数据库实例进行操作,破坏主
备库的数据一致性。数据守护配置结束后,守护进程会自动 Open 数据库。
5.6 设置 OGUID
启动命令行工具 DIsql,登录备库设置 OGUID 值为 453331
[dmdba@grep2 bin]$ ./disql SYSDBA/123456789:6235

系统通过 OGUID 值确定一个守护进程组,由用户保证 OGUID 值的唯一性,并
确保数据守护系统中,数据库、守护进程和监视器配置相同的 OGUID 值。
5.7 修改数据库模式
启动命令行工具 DIsql,登录备库修改数据库为 Standby 模式。
如果当前数据库不是 Normal 模式,需要先修改 dm.ini 中 ALTER_MODE_STATUS 值为 1,允许修改数据库模式,修改 Standby 模式成功后再改回为 0。如果是 Normal 模式,请忽略下面的第 1 步和第 3 步。

六. 配置监视器
由于主库和实时备库的守护进程配置为自动切换模式,因此这里选择配置确认监视器。和普通监视器相比,确认监视器除了相同的命令支持外,在主库发生故障时,能够自动通知实时备库接管为新的主库,具有自动故障处理的功能。
故障自动切换模式下,必须配置确认监视器,且确认监视器最多只能配置一个。修改 dmmonitor.ini 配置确认监视器,其中 MON_DW_IP 中的 IP 和 PORT 和dmmal.ini 中的 MAL_HOST 和 MAL_DW_PORT 配置项保持一致。

七. 启动守护进程
启动各个主备库上的守护进程:


守护进程启动后,进入 Startup 状态,此时实例都处于 Mount 状态。守护进程开始广播自身和其监控实例的状态信息,结合自身信息和远程守护进程的广播信息,守护进程将本地实例 Open,并切换为 Open 状态。
把守护进程注册到系统服务:
[root@DM_P ~]# /dm8/dmdbms/script/root/dm_service_ installer.sh -t dmwatcher -watcher_ini /dm8/data/DAMENG/dmwatcher.ini -p VALLEY
八. 启动监视器
启动监视器:

监视器提供一系列命令,支持当前守护系统状态查看以及故障处理,可输入 help 命令,查看各种命令说明使用,结合实际情况选择使用。至此一主一备的实时数据守护系统搭建完毕,在搭建步骤和各项配置都正确的情况下,在监视器上执行 show 命令,可以监控到所有实例都处于 Open 状态,所有守护进程也都处于 Open 状态,即为正常运行状态。

九. 验证主备功能
登录主库:

登录备库:

通过验证,证明实时主备已生效。
居右




