利用之前文章中搭建的两个节点的DSC集群,我们可以尝试更进一步为其增加一个实时主备与一个异步主备。实现DMDSC数据守护,关于其理论知识,之后会再想办法对有关集群、数据守护相关内容进行总结与阐述。
目录
1. 基本信息
由于此次操作所涉及的机器过多,端口更是数不胜数,这里先整理各机器上的信息:
机器名称 | 角色 | 实例名 | Ip地址:对外/对内 |
DW_DSC0 | 主库节点 | DSC0 | 192.168.127.141/131 |
DW_DSC1 | 主库节点 | DSC1 | 192.168.127.148/138 |
DW_RT | 实时备库 | GRP_RT_01 | 192.168.127.149/139 |
DW_LC | 异步备库 | GRP_LC_01 | 192.168.127.150/140 |
各实例与端口:
实例名 | 端口类型 | 端口号 |
---|---|---|
ASM0 | DCR_EP_PORT | 9349 |
ASM1 | DCR_EP_PORT | 9351 |
CSS0 | DCR_EP_PORT | 9341 |
CSS1 | DCR_EP_PORT | 9343 |
DSC0 | DCR_EP_PORT | 11451 |
DCR_CHECK_PORT | 9741 | |
DSC1 | DCR_EP_PORT | 11451 |
DCR_CHECK_PORT | 9742 | |
GRP_RT_01 | DCR_EP_PORT | 11451 |
GRP_LC_01 | DCR_EP_PORT | 11451 |
ASM0MAL | MAL_PORT | 7236 |
ASM1MAL | MAL_PORT | 7237 |
DW_DSC0_MAL | MAL_PORT | 9340 |
DW_DSC1_MAL | MAL_PORT | 9341 |
DW_RT_MAL | MAL_PORT | 8738 |
DW_LC_MAL | MAL_PORT | 8739 |
DW_DSC0 | MAL_INST_DW_PORT | 3567 |
MAL_DW_PORT | 4567 | |
DW_DSC1 | MAL_INST_DW_PORT | 3568 |
MAL_DW_PORT | 4568 | |
DW_RT | MAL_INST_DW_PORT | 3569 |
MAL_DW_PORT | 4569 | |
DW_LC | MAL_INST_DW_PORT | 3570 |
MAL_DW_PORT | 4570 |
总体原则说明:
- DMDSC 集群各个节点分别部署守护进程(dmwatcher)。
- DMDSC 集群数据库控制节点的守护进程,称为控制守护进程,普通节点的守护进 程称为普通守护进程,如果控制节点发生变化,则控制守护进程也相应变化。
- 守护进程会连接 DMDSC 集群所有实例,但只有控制守护进程会发起 OPEN、故障 处理、故障恢复等各种命令。普通守护进程不处理用户命令,但接收其他库的控制 守护进程消息。
- 主备实时同步数据时,DMDSC 集群主库各个节点将各自产生的联机日志发送到备 库进行重演。
2. 配置2节点DSC +1实时主备
2.1 配置 dmarch.ini
分别编辑DSC0和DSC1的dmmarch.ini文件。 dmarch.ini 文件放在各自 dm.ini 中指定的 CONFIG_PATH 目录下。
2.1.1 DSC0
ARCH_LOCAL_SHARE = 1
[ARCHIVE_LOCAL1]
ARCH_TYPE = LOCAL
ARCH_DEST = +DMDATA/DSC/DSC0/arch
ARCH_FILE_SIZE = 128
ARCH_SPACE_LIMIT = 0
[ARCHIVE_REMOTE]
ARCH_TYPE = REMOTE
ARCH_DEST = DSC1
ARCH_FILE_SIZE = 128
ARCH_SPACE_LIMIT = 0
ARCH_INCOMING_PATH = +DMDATA/DSC/DSC1/arch
2.1.2 DSC1
ARCH_LOCAL_SHARE = 1
[ARCHIVE_LOCAL1]
ARCH_TYPE = LOCAL
ARCH_DEST = +DMDATA/DSC/DSC1/arch
ARCH_FILE_SIZE = 128
ARCH_SPACE_LIMIT = 0
[ARCHIVE_REMOTE]
ARCH_TYPE = REMOTE
ARCH_DEST = DSC0
ARCH_FILE_SIZE = 128
ARCH_SPACE_LIMIT = 0
ARCH_INCOMING_PATH = +DMDATA/DSC/DSC0/arch
2.1.3 dm.ini
当然,配置了dmarch.ini,意味着DSC0与DSC1的dm.ini中的ARCH_INI也要置为1。
#将ARCH_INI修改为1
ARCH_INI ==1
2.2 数据准备
2.2.1 重启实例与关闭
重启两个节点数据库实例然后正常关闭,当然,也可以顺便检查以下上一步配置的两个归档:
2.2.2 数据备份
在数据库脱机的情况下,对其中一个节点使用dmrman工具进行备份。
在/dm/bin目录下:
./dmrman use_ap=2 dcr_ini=/dm/data/dmdcr.ini
随后执行:
RMAN>BACKUP DATABASE '/dm/data/dsc0_config/dm.ini' FULL BACKUPSET '/dm/data/dsc0_config/bak/db_full_bak_for_DSC';
RMAN>EXIT
2.2.3 备库还原
将上述的备份复制到备库机DW_RT上,然后在/dm/bin下:
cd /dm/bin
./dminit path=/dm/data/ #先初始化一个备库
./dmrman use_ap=2
RMAN>RESTORE DATABASE '/dm/data/DAMENG/dm.ini' FROM BACKUPSET '/dm/data/DSC/DSC01/bak/db_full_bak_for_DSC';
RMAN>RECOVER DATABASE '/dm/data/DAMENG/dm.ini' FROM BACKUPSET '/dm/data/DSC/DSC01/bak/db_full_bak_for_DSC';
RMAN>RECOVER DATABASE '/dm/data/DAMENG/dm.ini' UPDATE DB_MAGIC;
2.3 配置dm.ini
依次配置 DMDSC 主库所有节点和单节点备库的 dm.ini 文件,修改数据守护相关的参数配置。
2.3.1 DSC0
INSTANCE_NAME = DSC0
PORT_NUM = 11451 ##数据库实例监听端口
ALTER_MODE_STATUS = 0 ##不允许手工方式修改实例模式/状态/OGUID
ENABLE_OFFLINE_TS = 2 ##不允许备库OFFLINE表空间
MAL_INI = 1 ##打开MAL系统
ARCH_INI = 1 ##打开归档配置,这个之前应该设置过才对
2.3.2 DSC1
INSTANCE_NAME = DSC1 #各含义同上
PORT_NUM = 11451
ALTER_MODE_STATUS = 0
ENABLE_OFFLINE_TS = 2
MAL_INI = 1
ARCH_INI = 1
2.3.3 GRP_RT_01
INSTANCE_NAME = GRP_RT_01
PORT_NUM = 11451
ALTER_MODE_STATUS = 0
ENABLE_OFFLINE_TS = 2
MAL_INI = 1
ARCH_INI = 1
2.4 配置dmmal.ini
在 DMDSC 集群的 dmmal.ini 文件基础上,增加备库 GRP_RT_01 的配置项.。所有节点实例的 dmmal.ini 文件内容是一致的 。
[mal_inst0]
mal_inst_name = DSC0
mal_host = 192.168.127.131
mal_port = 9340
MAL_INST_HOST = 192.168.127.141 ##实例的对外服务IP地址
MAL_INST_PORT = 11451 ##实例的对外服务端口,和dm.ini中的PORT_NUM一致
MAL_DW_PORT = 3567 ##实例本地的守护进程监听TCP连接的端口
MAL_INST_DW_PORT = 4567 ##实例监听守护进程TCP连接的端口
[mal_inst1]
mal_inst_name = DSC1
mal_host = 192.168.127.138
mal_port = 9341
MAL_INST_HOST = 192.168.127.148
MAL_INST_PORT = 11451
MAL_DW_PORT = 3568
MAL_INST_DW_PORT = 4568
[mal_inst2]
MAL_INST_NAME = GRP_RT_01
MAL_HOST = 192.168.127.139
MAL_PORT = 8738
MAL_INST_HOST = 192.168.127.149
MAL_INST_PORT = 11451
MAL_DW_PORT = 3569
MAL_INST_DW_PORT = 4569
一台机器的dmmal.ini配置完毕后,直接复制到其他机器的对应位置即可。
2.5 配置dmarch.ini
再次编辑各个节点的 dmarch.ini 文件,增加实时归档配置。
2.5.1 DSC0
ARCH_LOCAL_SHARE = 1
[ARCHIVE_LOCAL1]
ARCH_TYPE = LOCAL
ARCH_DEST = +DMDATA/DSC/DSC0/arch
ARCH_FILE_SIZE = 128
ARCH_SPACE_LIMIT = 0
[ARCHIVE_REMOTE]
ARCH_TYPE = REMOTE
ARCH_DEST = DSC1
ARCH_FILE_SIZE = 128
ARCH_SPACE_LIMIT = 0
ARCH_INCOMING_PATH = +DMDATA/DSC/DSC1/arch
[ARCHIVE_REALTIME]
ARCH_TYPE = REALTIME
ARCH_DEST = GRP_RT_01
2.5.2 DSC1
ARCH_LOCAL_SHARE = 1
[ARCHIVE_LOCAL1]
ARCH_TYPE = LOCAL
ARCH_DEST = +DMDATA/DSC/DSC1/arch
ARCH_FILE_SIZE = 128
ARCH_SPACE_LIMIT = 0
[ARCHIVE_REMOTE]
ARCH_TYPE = REMOTE
ARCH_DEST = DSC0
ARCH_FILE_SIZE = 128
ARCH_SPACE_LIMIT = 0
ARCH_INCOMING_PATH = +DMDATA/DSC/DSC0/arch
[ARCHIVE_REALTIME]
ARCH_TYPE = REALTIME
ARCH_DEST = GRP_RT_01
2.5.3 GRP_RT_01
[ARCHICE_LOCAL1]
ARCH_TYPE = LOCAL
ARCH_DEST = /dm/data/EP01/DAMENG/arch
ARCH_FILE_SIZE = 128
ARCH_SPACE_LIMIT = 0
[ARCHIVE_REALTIME1]
ARCH_TYPE = REALTIME
ARCH_DEST = DSC0/DSC1
2.6 配置dmwatcher.ini
依次配置每个节点实例的 dmwatcher.ini 文件,放到各自 dm.ini 中指定的 CONFIG_PATH 目录下。
2.6.1 DSC0
[GRP1]
DW_TYPE = GLOBAL ##全局守护类型
DW_MODE = MANUAL ##手动切换模式
DW_ERROR_TIME = 60 ##远程守护进程故障认定时间
INST_RECOVER_TIME = 60 ##主库守护进程启动恢复的间隔时间
INST_ERROR_TIME = 35 ##本地实例故障认定时间
INST_INI = /dm/data/dsc0_config/dm.ini ##dm.ini配置文件路径
DCR_INI = /dm/data/dmdcr.ini ##dmdcr.ini配置文件路径
INST_OGUID = 1000 ##守护系统唯一OGUID值
INST_STARTUP_CMD = /dm/bin/dmserver ##命令行方式启动
INST_AUTO_RESTART = 0 ##关闭实例的自动启动功能
RLOG_SEND_THRESHOLD = 0 ##指定主库发送日志到备库的时间阈值,默认关闭
RLOG_APPLY_THRESHOLD = 0 ##指定备库重演日志的时间阈值,默认关闭
2.6.2 DSC1
[GRP1]
DW_TYPE = GLOBAL
DW_MODE = MANUAL
DW_ERROR_TIME = 60
INST_RECOVER_TIME = 60
INST_ERROR_TIME = 35
INST_INI = /dm/data/dsc1_config/dm.ini
DCR_INI = /dm/data/dmdcr.ini
INST_OGUID = 1000
INST_STARTUP_CMD = /dm8/bin/dmserver
INST_AUTO_RESTART = 0
RLOG_SEND_THRESHOLD = 0
RLOG_APPLY_THRESHOLD = 0
2.6.3 GRP_RT_01
[GRP1]
DW_TYPE = GLOBAL
DW_MODE = MANUAL
DW_ERROR_TIME = 60
INST_RECOVER_TIME = 60
INST_ERROR_TIME = 35
INST_INI = /dm/data/EP01/DAMENG/dm.ini
INST_OGUID = 1000
INST_STARTUP_CMD = /dm/bin/dmserver
INST_AUTO_RESTART = 0
RLOG_SEND_THRESHOLD = 0
RLOG_APPLY_THRESHOLD = 0
2.7 配置dmmonitor.ini
在GRP_RT_01上配置dmmonitor.ini,将其放在/dm/data目录下。具体信息如下:
MON_LOG_PATH = /dm/data/log
MON_LOG_INTERVAL = 60
MON_LOG_FILE_SIZE = 64
MON_LOG_SPACE_LIMIT = 0
MON_DW_CONFIRM = 0
[GRP1]
MON_INST_OGUID = 1000
MON_DW_IP = 192.168.127.131:3567/192.168.127.138:3568
MON_DW_IP = 192.168.127.139:3569
2.8 启动主备库
注意实例都要使用 Mount 方式启动。 分别在DSC0,DSC1,GRP_RT_01上的/dm/bin下执行:
./dmserver /dm/data/dsc0_config/dm.ini DCR_INI=/dm/data/dmdcr.ini mount
./dmserver /dm/data/dsc1_config/dm.ini DCR_INI=/dm/data/dmdcr.ini mount
./dmserver /dm/data/EP01/DAMENG/dm.ini mount
2.9 设置OGUID与修改主备库模式
启动命令行工具 disql,连接 DMDSC 集群中的任意一个节点,设置 DMDSC 主库的 OGUID 值 ,并修改DMDSC库为Primary模式。
以DSC0为例:
disql SYSDBA/SYSDBA:11451
SQL>SP_SET_PARA_VALUE(1, 'ALTER_MODE_STATUS', 1);
SQL>SP_SET_OGUID(1000);
SQL>ALTER DATABASE PRIMARY;
SQL>SP_SET_PARA_VALUE(1, 'ALTER_MODE_STATUS', 0);
随后,在备库GRP_RT_01启动disql,同样修改OGUID值,这次将库修改为Standby模式:
disql SYSDBA/SYSDBA:11451
SQL>SP_SET_PARA_VALUE(1, 'ALTER_MODE_STATUS', 1);
SQL>SP_SET_OGUID(1000);
SQL>ALTER DATABASE STANDBY;
SQL>SP_SET_PARA_VALUE(1, 'ALTER_MODE_STATUS', 0);
2.10 启动守护进程与监视器
启动 DMDSC 主库的所有守护进程:
./dmwatcher /dm/data/dsc0_config/dmwatcher.ini #DSC0
./dmwatcher /dm/data/dsc1_config/dmwatcher.ini #DSC1
./dmwatcher /dm/data/EP01/DAMENG/dmwatcher.ini #GRP_RT_01
./dmmonitor path=/dm/data/dmmonitor.ini #GRP_RT_01
监视器提供一系列命令,支持当前守护系统状态查看以及故障处理,可输入 help 命令, 查看各种命令使用说明,结合实际情况选择使用。
2.11 测试与验证
至此 DMDSC 集群的实时数据守护系统搭建完毕,在搭建步骤和各项配置都正确的情况 下,在监视器上执行 show 命令,可以监控到所有实例都处于 Open 状态,所有守护进程也 都处于 Open 状态,即为正常运行状态。
在主库任意节点上使用disql连接到数据库,插入数据,然后在备库上同样使用disql连接,查看数据是否存在:
/*主库*/
CREATE SCHEMA TEST AUTHORIZATION SYSDBA;
CREATE TABLE TEST.T1(ID INTEGER,NAME CHAR(10));
INSERT INTO TEST.T1 VALUES(1,'A');
COMMIT;
/*备库*/
select * from TEST.T1;
3. 异步备机
在实际应用中,如果数据库规模很大,并且对数据的实时性要求不是很严格,则可以配 置多个异步备库用于分担统计报表等任务。
异步备库支持多源配置,目的是在实时或即时主备环境中,当主备库切换或者主库故障 时,备库接管以后可以继续向同一个异步备库同步数据,因此如果主库配置了异步备库,在 所有备库上也需要配置相同的异步备库,备库只有在切换为主库时才会向其同步数据。
3.1 数据准备
同样,在开始配置之前,需要将主库进行备份,然后在异步的备库上还原。
3.1.1 数据备份
在与2.2.2节内容相同,在数据库脱机的情况下,使用dmrman工具进行脱机备份。
./dmrman use_ap=2 dcr_ini=/dm/data/dmdcr.ini
RMAN>BACKUP DATABASE '/dm/data/dsc0_config/dm.ini' FULL BACKUPSET '/dm/data/dsc0_config/bak/db_full_bak2_for_DSC';
RMAN>EXIT
3.1.2 数据还原
将备份文件拷贝到异步备机DW_LC,然后进行初始化库、还原操作。
#在备机上运行
cd /dm/bin
./dminit path=/dm/data/
#在备份的主机上运行
scp -r /dm/data/dsc0_config/bak/db_full_bak2_for_DSC/ dmdba@192.168.127.140:/dm/data/DAMENG/bak
#回到备机DW_LC,打开dmrman进行还原恢复
./dmrman use_ap=2
RESTORE DATABASE '/dm/data/DAMENG/dm.ini' FROM BACKUPSET '/dm/data/DAMENG/bak/db_full_bak2_for_DSC';
RECOVER DATABASE '/dm/data/DAMENG/dm.ini' FROM BACKUPSET '/dm/data/DAMENG/bak/db_full_bak2_for_DSC';
RECOVER DATABASE '/dm/data/DAMENG/dm.ini' UPDATE DB_MAGIC;
3.2 配置dm.ini
只需在因为之前配置实时主备的时候已经将DSC0、DSC1与GRP_RT_01的dm.ini(包括下文配置到的其他配置文件)配置的差不多了,而异步备库GRP_LC_01是我们刚刚还原得到的,还有很多没有配置,因此前三者改动较小,后者修改较多。
3.2.1 两个主库与实时备库
在DSC0、DSC1、GRP_RT_01上进行:
TIMER_INI = 1
3.2.2 异步备库
在刚还原得到的备库上配置dm.ini:
INSTANCE_NAME = GRP_LC_01
PORT_NUM = 11451 ##数据库实例监听端口
ALTER_MODE_STATUS = 0 ##不允许手工方式修改实例模式/状态/OGUID
ENABLE_OFFLINE_TS = 2 ##不允许备库OFFLINE表空间
MAL_INI = 1 ##打开MAL系统
ARCH_INI = 1 ##打开归档配置
3.3 配置dmmal.ini
就像之前所说的,所有的实例中的dmmal.ini都是一致的,但是由于之前的dmmal.ini没有配置新备机信息,因此需要在之前的dmma.ini的基础上增加:
#在上文的dmmal.ini中增加以下信息,然后直接复制到GRP_LC_01即可
[mal_inst3]
MAL_INST_NAME = GRP_LC_01
MAL_HOST = 192.168.127.140 ##MAL系统监听TCP连接的IP地址
MAL_PORT = 8739 ##MAL系统监听TCP连接的端口
MAL_INST_HOST = 192.168.127.150 ##实例的对外服务IP地址
MAL_INST_PORT = 11451 ##实例的对外服务端口,和dm.ini中的PORT_NUM一致
MAL_DW_PORT = 3670 ##实例对应的守护进程监听TCP连接的端口
MAL_INST_DW_PORT = 4570 ##实例监听守护进程TCP连接的端口
3.4 配置dmarch.ini
3.4.1 两个主库与实时备库上
在之前配置的三个库,只需要在dmarch.ini上增加异步归档配置项。
#增加内容:
[ARCHIVE_ASYNC]
ARCH_TYPE = ASYNC ##异步归档
ARCH_DEST = GRP_LC_01 ##异步归档目标实例名
ARCH_TIMER_NAME = RT_TIMER ##定时器名称,和dmtimer.ini中的名称一致
3.4.2 异步备库GRP_LC_01上
该备库尚未配置dmarch.ini。配置信息如下:
[ARCHIVE_LOCAL1]
ARCH_TYPE = LOCAL ##本地归档类型
ARCH_DEST = /dm/data/DAMENG/arch ##本地归档文件路径
ARCH_FILE_SIZE = 128 ##单位Mb,本地单个归档文件最大值
ARCH_SPACE_LIMIT = 0 ##单位Mb,0表示无限制
3.5 配置dmtimer.ini
本配置只要在两个主库与实时备库GRP_RT_01上进行, 用于定时触发实例发送归档日志到异步备库。 放到各自 dm.ini 中指定的 CONFIG_PATH 目录下。
##定时器配置为每天 00:00:00 触发主库发送归档日志到异步备库,可以根据实际情况再做调整。
[RT_TIMER] ##和dmarch.ini中的ARCH_TIMER_NAME一致
TYPE = 2
FREQ_MONTH_WEEK_INTERVAL = 1
FREQ_SUB_INTERVAL = 0
FREQ_MINUTE_INTERVAL = 0
START_TIME = 00:00:00
END_TIME = 00:00:00
DURING_START_DATE = 2016-02-11 17:36:09
DURING_END_DATE = 9999-12-31 23:59:59
NO_END_DATE_FLAG = 1
DESCRIBE = RT TIMER
IS_VALID = 1
3.6 配置dmwatcher.ini
因为配置异步备库前,实时主备环境已经配置完成,这里对主库不需要再做其他配置。对异步备库上则需配置:dmwatcher.ini
[GRP1]
DW_TYPE = LOCAL ##本地守护类型
DW_MODE = MANUAL ##故障手动切换模式
DW_ERROR_TIME = 10 ##远程守护进程故障认定时间
INST_ERROR_TIME = 10 ##本地实例故障认定时间
INST_OGUID = 1000 ##守护系统唯一OGUID值
INST_INI = /dm/data/DAMENG/dm.ini ##dm.ini配置文件路径
INST_AUTO_RESTART = 1 ##打开实例的自动启动功能
INST_STARTUP_CMD = /dm/bin/dmserver ##命令行方式启动
3.7 启动主备库
根据之前的流程来看,是时候启动主备库了。同样地,一定要以mount方式启动。
#DSC0
./dmserver /dm/data/dsc0_config/dm.ini DCR_INI=/dm/data/dmdcr.ini mount
#DSC1
./dmserver /dm/data/dsc1_config/dm.ini DCR_INI=/dm/data/dmdcr.ini mount
#GRP_RT_01
./dmserver /dm/data/EP01/DAMENG/dm.ini mount
#GRP_LC_01
./dmserver /dm/data/DAMENG/dm.ini mount
3.8 设置OGUID与备库模式
没错,根据之前的流程,轮到设置OGUID与主备库模式了。但是前三者我们上文已经设置完毕,这里只需设置GRP_LC_01即可。
在异步备库GRP_LC_01上启动disql,然后运行。
./disql SYSDBA/SYSDBA:11451
SQL>SP_SET_PARA_VALUE(1, 'ALTER_MODE_STATUS', 1);
SQL>SP_SET_OGUID(1000);
SQL>ALTER DATABASE STANDBY;
SQL>SP_SET_PARA_VALUE(1, 'ALTER_MODE_STATUS', 0);
3.9 启动守护进程及监视器
在四台机器上分别运行:
#DSC0
./dmwatcher /dm/data/dsc0_config/dmwatcher.ini
#DSC1
./dmwatcher /dm/data/dsc1_config/dmwatcher.ini
#GRP_RT_01
./dmwatcher /dm/data/EP01/DAMENG/dmwatcher.ini
#GRP_LC_01
./dmwatcher /dm/data/DAMENG/dmwatcher.ini
#GRP_RT_01
./dmmonitor path=/dm/data/dmmonitor.ini
启动完监视器后,我们就可以使用show命令查看状态了:
至此,配置了一个实时备库与一个异步备库的DMDSC数据守护就配置完毕了!
如果需要手动关闭的话,要严格按照以下顺序:
- 如果启动了确认监视器,先关闭确认监视器(防止自动接管)
- 关闭备库守护进程(防止重启实例)
- 关闭主库守护进程(防止重启实例)
- Shutdown 主库
- Shutdown 备库
更多关于DM数据库的资讯请移步: 达梦数据库 - 新一代大型通用关系型数据库 | 达梦在线服务平台