DM数据守护集群搭建之读写分离集群
指路==》对于数据守护集群原理及概念不理解的可以查看这篇博客:
https://blog.csdn.net/qq_44619675/article/details/126032148
文章目录
搭建之前注意事项:
① 数据库启动关闭:数据库前台后台确保正常启动,并在启动之后正常关闭,然后再进行后面的脱机备份还原操作
② 组:dmdba用户所在组,在安装DM数据时,配置时要注意组名
③ 内网网段: 主库、备库和监视器的内网处于同一网段,如我的就都是192.168.146.xx(怎么配呢:就是都用同一个虚拟网卡)
④ 端口:主库、备库和监视器除了实例服务端口之外,其他的端口设置为不一样的端口(待)
⑤ 配置文件(ini文件):确保ini文件配置是正确且生效的,也就是说配置结束之后再次打开时,显示的是修改之后的正确的配置内容
⑥ 测试:主库备库搭建完成之后,先测试下主备库之间是否正常通信且数据同步
⑦ 省时做法:搭建一台成功安装dm8的虚拟机作为模板,然后进行克隆,克隆之后进行网卡配置(多网卡配置),配置成功之后就可以进行搭建。
一、环境说明
1、准备四台机器DW_P(主)、DW_S1(备1)、DW_S2(备2)、DW_M(监视器)。
2、其中DW_P、DW_S1和DW_S2三台机器配置双网卡。
指路==》虚拟机双网卡配置教程:
https://blog.csdn.net/qq_44619675/article/details/125914854
3、四台机器都提前安装好DM,此次教程分享的安装路径为’/dm8’,执行程序保存在’/dm8/bin’目录中,数据存放路径为’/dm8/data’。
4、配置环境说明
机器名 | IP地址 | 初始状态 | 操作系统 |
---|---|---|---|
DW_P | 外网:192.168.175.11 内网:192.168.146.11 | 主库DMDB1 | CentOS-7-x86_64-DVD-2009 |
DW_S1 | 外网:192.168.175.12 内网:192.168.146.12 | 备库DMDB2 | CentOS-7-x86_64-DVD-2009 |
DW_S2 | 外网:192.168.175.13 内网:192.168.146.13 | 备库DMDB3 | CentOS-7-x86_64-DVD-2009 |
DW_M | 内网:192.168.146.14 | 确认监视器 | CentOS-7-x86_64-DVD-2009 |
5、端口规划
实例名 | PORT_NUM | MAL_INST_DW_PORT | MAL_HOST | MAL_PORT | MAL_DW_PORT |
---|---|---|---|---|---|
DMDB1 | 5236 | 33141 | 192.168.146.11 | 61141 | 52141 |
DMDB2 | 5236 | 33142 | 192.168.146.12 | 61142 | 52142 |
DMDB3 | 5236 | 33143 | 192.168.146.13 | 61143 | 52143 |
二、数据准备
配置数据守护之前,必须先通过备份还原方式来同步各数据库数据,确保各数据的数据保持完全一致。主库可以是新初始化的数据库,也可以是正在生产、使用中的数据库。备库在备份还原之前,需要先准备初始化一个新库。
注:
① 如果是初始化搭建环境,可以通过对主库脱机备份、对备库脱机还原的方式来准备数据。
② 如果主库已经处于运行状态,则可以对主库进行联机备份、对备库脱机还原的方式来准备数据。
下面是通过脱机备份还原的方式进行搭建的。
1、脱机备份还原
说在前面,备份还原必须都是在dmdba用户下进行,所以后面在还原备份文件时需要给dmdba用户授权。
(1)正常关闭数据库
在进行搭建之前,必须确保主备库的数据库是可以正常启动关闭。
① 后台正常关闭数据库
- 后台关闭方式一:
systemctl status DmServerDMSERVER.service //先查看数据库后台运行状态 systemctl stop DmServiceDMSERVER.service //若数据库正在运行,则将其关闭
- 后台关闭方式二:
进入安装目录的bin目录下,然后输入:./DmServiceDMSERVER status ./DmServiceDMSERVER stop
② 前台正常关闭数据库
进入数据库安装目录的bin目录下:
./dmserver /dm8/data/DAMENG/dm.ini //前台启动数据库
在成功开启之后,按Ctrl+c 关闭前台数据库
(2)主库进行脱机备份
1、 进入DM安装目录的bin目录下
cd /dm8/bin
2、 执行bin目录下的dmrman工具,进行脱机备份
- 打开dmrman工具
./dmrman.sh
- 脱机备份
backup database '/dm8/data/DAMENG/dm.ini' full backupset '/dm8/fullbak';
(3)备库拷贝主库备份文件
scp -r 192.168.175.111:/dm8/fullbak /dm8/
IP地址是配置的主库的外网IP地址(192.168.175.111)
IP地址后面的路径是主库备份的文件路径(/dm8/fullbak)
最后的路径是拷贝在当前库的文件保存路径(/dm8/)
注:这种是备库远程拷贝主库的方式,还有从本地拷贝至远程主机的方式,教程指路:https://blog.csdn.net/phmatthaus/article/details/124674393
(4)备库进行脱机数据还原与恢复
注:进行脱机还原与恢复之前必须保证备库的数据库是正常关闭的状态
① 进入DM安装目录下的bin目录下
② 执行bin目录下的dmrman工具,进行备份还原与恢复
restore database '/dm8/data/DAMENG/dm.ini' from backsupset '/dm8/fullbak';
recover database '/dm8/data/DAMENG/dm.ini' from backupset '/dm8/fullbak';
recover database '/dm8/data/DAMENG/dm.ini' update db_magic;
(4)授权给dmdba用户
备库脱机还原的备份文件要授权给dmdba用户,
切换至root用户下,
注:GRP1是dmdba用户所在组
chown dmdba:GRP1 -R /dm8 chmod -R 755 /dm8
三、配置主库RW_P
1、配置dm.ini
在RW_P机器上配置备库的实例名为DMDB1
vi /dm8/data/DAMENG/dm.ini
注:主要修改前面四项即可
MAL_INI = 1 #打开 MAL 系统 ARCH_INI = 1 #打开 归档 ALTER_MODE_SATUS= 0 #不允许手工方式修改实例模式/状态/OGUID ENABLE_OFFLINE_TS= 2 #不允许备库 OFFLINE 表空间 RLOG_SEND_APPLY_MON = 64 #统计最近 64 次的日志发送信息 INSTANCE_NAME = DMDB1 #实例名 PORT_NUM = 5236 #数据库实例监听端口 DW_INACTIVE_INTERVAL = 60 #接收守护进程消息超时时间
2、配置dmmal.ini
-
配置 MAL 系统,各主备库的 dmmal.ini 配置必须完全一致,
-
MAL_HOST 使用内部网络 IP,
-
MAL_PORT 与 dm.ini 中 PORT_NUM 使用不同的端口值,
-
MAL_DW_PORT 是各实例对应的守护进程之间,以及守护进程和监视器之间的通信端口,
配置如下:
MAL_CHECK_INTERVAL = 5 #MAL 链路检测时间间隔 MAL_CONN_FAIL_INTERVAL = 5 #判定 MAL 链路断开的时间 [MAL_INST1] MAL_INST_NAME = DMDB1 #实例名,和 dm.ini 中的 INSTANCE_NAME 一致 MAL_HOST = 192.168.146.11 #MAL 系统监听 TCP 连接的 IP 地址 MAL_PORT = 61141 #MAL 系统监听 TCP 连接的端口 MAL_INST_HOST = 192.168.175.11 #实例的对外服务 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 = DMDB2 #实例名,和 dm.ini 中的 INSTANCE_NAME 一致 MAL_HOST = 192.168.146.12 MAL_PORT = 61142 MAL_INST_HOST = 192.168.175.12 #实例的对外服务 IP 地址 MAL_INST_PORT = 5236 MAL_DW_PORT = 52142 #实例本地的守护进程监听 TCP 连接的端口 MAL_INST_DW_PORT = 33142 #实例监听守护进程 TCP 连接的端口 [MAL_INST3] MAL_INST_NAME = DMDB3 #实例名,和 dm.ini 中的 INSTANCE_NAME 一致 MAL_HOST = 192.168.146.13 #MAL 系统监听 TCP 连接的 IP 地址 MAL_PORT = 61143 #MAL 系统监听 TCP 连接的端口 MAL_INST_HOST = 192.168.175.13 #实例的对外服务 IP 地址 MAL_INST_PORT = 5236 #实例的对外服务端口,和 dm.ini 中的 PORT_NUM 一致 MAL_DW_PORT = 52143 #实例本地的守护进程监听 TCP 连接的端口 MAL_INST_DW_PORT = 33143 #实例监听守护进程 TCP 连接的端口
3、配置dmarch.ini
- 修改dmarch.ini,配置本地归档和即时归档。
- 除了本地归档之外,其他归档配置项中的ARCH_DEST表示实例是Primary模式时,需要同步归档数据的目标实例名。
- 当前实例DMDB1是主库,需要向即时备库DMDB2/DMDB3同步数据,因此即时归档的ARCH_DEST分别配置为DMDB2和DMDB3。
vi /dm8/data/DAMENG/dmarch.ini
[ARCHIVE_TIMELY1] ARCH_TYPE = TIMELY #即时归档类型 ARCH_DEST = DMDB2 #即时归档目标实例名 [ARCHIVE_TIMELY2] ARCH_TYPE = TIMELY #即时归档类型 ARCH_DEST = DMDB3 #即时归档目标实例名 [ARCHIVE_LOCAL1] ARCH_TYPE = LOCAL #本地归档类型 ARCH_DEST = /dm8/data/DAMENG/arch #本地归档文件存放路径 ARCH_FILE_SIZE = 128 #单位 Mb,本地单个归档文件最大值 ARCH_SPACE_LIMIT = 0 #单位 Mb, 0 表示无限制,范围 1024~4294967294M
4、配置dmwatcher.ini
修改dmwatcher.ini配置守护进程,配置为全局守护类型,使用自动切换模式。
vi /dm8/data/DAMENG/dmwatcher.ini
[GRP1] DW_TYPE = GLOBAL #全局守护类型 DW_MODE = AUTO #自动切换模式 DW_ERROR_TIME = 10 #远程守护进程故障认定时间 INST_RECOVER_TIME = 60 #主库守护进程启动恢复的间隔时间 INST_ERROR_TIME = 10 #本地实例故障认定时间 INST_OGUID = 453332 #守护系统唯一 OGUID 值 INST_INI = /dm8/data/DAMENG/dm.ini #dm.ini 配置文件路径 INST_AUTO_RESTART = 1 #打开实例的自动启动功能 INST_STARTUP_CMD = /dm8/bin/dmserver #命令行方式启动 RLOG_SEND_THRESHOLD = 0 #指定主库发送日志到备库的时间阀值,默认关闭 RLOG_APPLY_THRESHOLD = 0 #指定备库重演日志的时间阀值,默认关闭
5、以mount方式启动
以Mount方式启动主库:
./dmserver /dm8/data/DAMENG/dm.ini mount
注:一定要以 Mount 方式启动数据库实例, 否则系统启动时会重构回滚表空间,生成 Redo 日志; 并且, 启动后应用可能连接到数据库实例进行操作,破坏主备库的数据一致性。数据守护配置结束后,守护进程会自动 Open 数据库。
6、设置OGUID值
启动命令行工具Disql,登录主库设置OGUID值。
SQL>SP_SET_PARA_VALUE(1, ‘ALTER_MODE_STATUS’, 1);
SQL>sp_set_oguid(453332);
SQL>SP_SET_PARA_VALUE(1, ‘ALTER_MODE_STATUS’, 0);
注:系统通过 OGUID 值确定一个守护进程组,由用户保证 OGUID 值的唯一性,并确保数据守护系统中,数据库、守护进程和监视器配置相同的 OGUID 值。
7、修改数据库模式
启动命令行工具Disql,登录主库修改数据库为Primar模式
SQL>alter database primary;
四、配置备库RW_S1
1、配置dm.ini
在RW_S1机器上配置备库的实例名为DMDB2
vi /dm8/data/DAMENG/dm.ini
注:主要修改前面四项即可
MAL_INI = 1 #打开 MAL 系统 ARCH_INI = 1 #打开 归档 ALTER_MODE_SATUS= 0 #不允许手工方式修改实例模式/状态/OGUID ENABLE_OFFLINE_TS= 2 #不允许备库 OFFLINE 表空间 RLOG_SEND_APPLY_MON = 64 #统计最近 64 次的日志发送信息 INSTANCE_NAME = DMDB2 #实例名 PORT_NUM = 5236 #数据库实例监听端口 DW_INACTIVE_INTERVAL = 60 #接收守护进程消息超时时间
2、配置dmmal.ini
-
配置MAL系统,各主备库的dmmal.ini配置必须完全一致
-
MAL_HOST使用内部网络IP
-
MAL_PORT与dm.ini中的PORT_NUM使用不同的端口值
-
MAL_DW_PORT是各实例对应的守护进程之间,以及守护进程与监视器之间的通信端口
配置如下:
MAL_CHECK_INTERVAL = 5 #MAL 链路检测时间间隔 MAL_CONN_FAIL_INTERVAL = 5 #判定 MAL 链路断开的时间 [MAL_INST1] MAL_INST_NAME = DMDB1 #实例名,和 dm.ini 中的 INSTANCE_NAME 一致 MAL_HOST = 192.168.146.11 #MAL 系统监听 TCP 连接的 IP 地址 MAL_PORT = 61141 #MAL 系统监听 TCP 连接的端口 MAL_INST_HOST = 192.168.175.11 #实例的对外服务 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 = DMDB2 #实例名,和 dm.ini 中的 INSTANCE_NAME 一致 MAL_HOST = 192.168.146.12 MAL_PORT = 61142 MAL_INST_HOST = 192.168.175.12 #实例的对外服务 IP 地址 MAL_INST_PORT = 5236 MAL_DW_PORT = 52142 #实例本地的守护进程监听 TCP 连接的端口 MAL_INST_DW_PORT = 33142 #实例监听守护进程 TCP 连接的端口 [MAL_INST3] MAL_INST_NAME = DMDB3 #实例名,和 dm.ini 中的 INSTANCE_NAME 一致 MAL_HOST = 192.168.146.13 #MAL 系统监听 TCP 连接的 IP 地址 MAL_PORT = 61143 #MAL 系统监听 TCP 连接的端口 MAL_INST_HOST = 192.168.175.13 #实例的对外服务 IP 地址 MAL_INST_PORT = 5236 #实例的对外服务端口,和 dm.ini 中的 PORT_NUM 一致 MAL_DW_PORT = 52143 #实例本地的守护进程监听 TCP 连接的端口 MAL_INST_DW_PORT = 33143 #实例监听守护进程 TCP 连接的端口
3、配置dmarch.ini
- 修改dmarch.ini文档,配置本地归档和即时归档。
- 除本地归档之外,其他配置项中的ARCH_DEST表示实例是Primary模式时,需要同步归档数据的目标实例名。
- 当前实例DMDB2是备库,守护系统配置完成后,可能在各种故障处理中,DMDB2切换为新的主库,(正常情况下,DMDB1会切换为新的备库),需要向DMDB1和DMDB3同步数据,因此即时归档的ARCH_DEST分别配置为DMDB1和DMDB3。
[ARCHIVE_TIMELY1] ARCH_TYPE = TIMELY #即时归档类型 ARCH_DEST = DMDB1 #即时归档目标实例名 [ARCHIVE_TIMELY2] ARCH_TYPE = TIMELY #即时归档类型 ARCH_DEST = DMDB3 #即时归档目标实例名 [ARCHIVE_LOCAL1] ARCH_TYPE = LOCAL #本地归档类型 ARCH_DEST = /dm8/data/DAMENG/arch #本地归档文件存放路径 ARCH_FILE_SIZE = 128 #单位 Mb,本地单个归档文件最大值 ARCH_SPACE_LIMIT = 0 #单位 Mb, 0 表示无限制,范围 1024~4294967294M
4、配置dmwatcher.ini
vi /dm8/data/DAMENG/dmwatcher.ini
修改dmwatcher.ini配置守护进程,配置为全局守护类型,使用自动切换模式。
[GRP1] DW_TYPE = GLOBAL #全局守护类型 DW_MODE = AUTO #自动切换模式 DW_ERROR_TIME = 10 #远程守护进程故障认定时间 INST_RECOVER_TIME = 60 #主库守护进程启动恢复的间隔时间 INST_ERROR_TIME = 10 #本地实例故障认定时间 INST_OGUID = 453332 #守护系统唯一 OGUID 值 INST_INI = /dm8/data/DAMENG/dm.ini #dm.ini 配置文件路径 INST_AUTO_RESTART = 1 #打开实例的自动启动功能 INST_STARTUP_CMD = /dm8/bin/dmserver #命令行方式启动 RLOG_SEND_THRESHOLD = 0 #指定主库发送日志到备库的时间阀值,默认关闭 RLOG_APPLY_THRESHOLD = 0 #指定备库重演日志的时间阀值,默认关闭
5、启动数据库
进入安装目录的bin目录下,以mount的方式启动数据库
./dmserver /dm8/data/DAMENG/dm.ini mount
注:一定要以mount方式启动数据库实例,否则系统启动时会重构回滚表空间,生成Redo日志,启动后应用可能连接到数据库实例进行操作,破坏主备库的数据一致性。数据守护配置结束后,守护进程会自动Open数据库。
6、设置OGUID值
进入DM安装目录的bin目录下,启动命令行工具Disql,登录主库设置OGUID值。
SQL>SP_SET_PARA_VALUE(1, ‘ALTER_MODE_STATUS’, 1);
SQL>sp_set_oguid(453332);
SQL>SP_SET_PARA_VALUE(1, ‘ALTER_MODE_STATUS’, 0);
注:系统通过 OGUID 值确定一个守护进程组,由用户保证 OGUID 值的唯一性,并确保数据守护系统中,数据库、守护进程和监视器配置相同的 OGUID 值。
7、修改数据库模式
启动命令行工具disql,登录主库修改数据库为Standby模式
SQL>SP_SET_PARA_VALUE(1,‘ALTER_MODE_ATATUS’, 1); // 第一步
SQL>alter database standby; //第二步
SQL>SP_SET_PARA_VALUE(1,‘ALTER_MODE_ATATUS’, 0); //第三步
注:如果当前数据库不是Normal模式,需要先修改dm.ini中的ALTER_MODE_STATUS值为1,允许修改数据库模式,修改Standby模式成功后再改回0,。如果是Normal模式,请忽略上面的第一步和第三步。
五、配置备库RW_S2
1、配置dm.ini
在RW_S2机器上配置备库的实例名为DMDB3
vi /dm8/data/DAMENG/dm.ini
注:主要修改前面四项即可
MAL_INI = 1 #打开 MAL 系统 ARCH_INI = 1 #打开 归档 ALTER_MODE_SATUS= 0 #不允许手工方式修改实例模式/状态/OGUID ENABLE_OFFLINE_TS= 2 #不允许备库 OFFLINE 表空间 RLOG_SEND_APPLY_MON = 64 #统计最近 64 次的日志发送信息 INSTANCE_NAME = DMDB3 #实例名 PORT_NUM = 5236 #数据库实例监听端口 DW_INACTIVE_INTERVAL = 60 #接收守护进程消息超时时间
2、配置dmmal.ini
-
配置 MAL 系统,各主备库的 dmmal.ini 配置必须完全一致,
-
MAL_HOST 使用内部网络 IP,
-
MAL_PORT 与 dm.ini 中 PORT_NUM 使用不同的端口值,
-
MAL_DW_PORT 是各实例对应的守护进程之间,以及守护进程和监视器之间的通信端口,
配置如下:
vi /dm8/data/DAMENG/dmmal.ini
MAL_CHECK_INTERVAL = 5 #MAL 链路检测时间间隔 MAL_CONN_FAIL_INTERVAL = 5 #判定 MAL 链路断开的时间 [MAL_INST1] MAL_INST_NAME = DMDB1 #实例名,和 dm.ini 中的 INSTANCE_NAME 一致 MAL_HOST = 192.168.146.11 #MAL 系统监听 TCP 连接的 IP 地址 MAL_PORT = 61141 #MAL 系统监听 TCP 连接的端口 MAL_INST_HOST = 192.168.175.11 #实例的对外服务 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 = DMDB2 #实例名,和 dm.ini 中的 INSTANCE_NAME 一致 MAL_HOST = 192.168.146.12 MAL_PORT = 61142 MAL_INST_HOST = 192.168.175.12 #实例的对外服务 IP 地址 MAL_INST_PORT = 5236 MAL_DW_PORT = 52142 #实例本地的守护进程监听 TCP 连接的端口 MAL_INST_DW_PORT = 33142 #实例监听守护进程 TCP 连接的端口 [MAL_INST3] MAL_INST_NAME = DMDB3 #实例名,和 dm.ini 中的 INSTANCE_NAME 一致 MAL_HOST = 192.168.146.13 #MAL 系统监听 TCP 连接的 IP 地址 MAL_PORT = 61143 #MAL 系统监听 TCP 连接的端口 MAL_INST_HOST = 192.168.175.13 #实例的对外服务 IP 地址 MAL_INST_PORT = 5236 #实例的对外服务端口,和 dm.ini 中的 PORT_NUM 一致 MAL_DW_PORT = 52143 #实例本地的守护进程监听 TCP 连接的端口 MAL_INST_DW_PORT = 33143 #实例监听守护进程 TCP 连接的端口
3、配置dmarch.ini
- 修改dmarch.ini文档,配置本地归档和即时归档。
- 除本地归档之外,其他配置项中的ARCH_DEST表示实例是Primary模式时,需要同步归档数据的目标实例名。
- 当前实例DMDB2是备库,守护系统配置完成后,可能在各种故障处理中,DMDB2切换为新的主库,(正常情况下,DMDB1会切换为新的备库),需要向DMDB1和DMDB3同步数据,因此即时归档的ARCH_DEST分别配置为DMDB1和DMDB3。
vi /dm8/data/DAMENG/dmarch.ini
[ARCHIVE_TIMELY1] ARCH_TYPE = TIMELY #即时归档类型 ARCH_DEST = DMDB1 #即时归档目标实例名 [ARCHIVE_TIMELY2] ARCH_TYPE = TIMELY #即时归档类型 ARCH_DEST = DMDB2 #即时归档目标实例名 [ARCHIVE_LOCAL1] ARCH_TYPE = LOCAL #本地归档类型 ARCH_DEST = /dm8/data/DAMENG/arch #本地归档文件存放路径 ARCH_FILE_SIZE = 128 #单位 Mb,本地单个归档文件最大值 ARCH_SPACE_LIMIT = 0 #单位 Mb, 0 表示无限制,范围 1024~4294967294M
4、配置dmwatcher.ini
修改dmwatcher.ini配置守护进程,配置为全局守护类型,使用自动切换模式。
vi /dm8/data/DAMENG/dmwatcher.ini
[GRP1] DW_TYPE = GLOBAL #全局守护类型 DW_MODE = AUTO #自动切换模式 DW_ERROR_TIME = 10 #远程守护进程故障认定时间 INST_RECOVER_TIME = 60 #主库守护进程启动恢复的间隔时间 INST_ERROR_TIME = 10 #本地实例故障认定时间 INST_OGUID = 453332 #守护系统唯一 OGUID 值 INST_INI = /dm8/data/DAMENG/dm.ini #dm.ini 配置文件路径 INST_AUTO_RESTART = 1 #打开实例的自动启动功能 INST_STARTUP_CMD = /dm8/bin/dmserver #命令行方式启动 RLOG_SEND_THRESHOLD = 0 #指定主库发送日志到备库的时间阀值,默认关闭 RLOG_APPLY_THRESHOLD = 0 #指定备库重演日志的时间阀值,默认关闭
5、启动数据库
以mount方式启动备库
./dmserver /dm8/data/DAMENG/dm.ini mount
注:一定要以mount方式启动数据库实例,否则系统启动时会重构回滚表空间,生成Redo日志,并且启动后应用可能连接到数据库实例进行操作,破坏主备库数据一致性。数据守护配置结束后,守护进程会自动Open数据库。
6、设置OGUID值
进入DM安装目录的bin目录下,启动命令行工具Disql,登录主库设置OGUID值。
SQL>SP_SET_PARA_VALUE(1, ‘ALTER_MODE_STATUS’, 1);
SQL>sp_set_oguid(453332);
SQL>SP_SET_PARA_VALUE(1, ‘ALTER_MODE_STATUS’, 0);
注:系统通过 OGUID 值确定一个守护进程组,由用户保证 OGUID 值的唯一性,并确保数据守护系统中,数据库、守护进程和监视器配置相同的 OGUID 值。
7、修改数据库模式
启动命令行工具disql,登录主库修改数据库为Standby模式
SQL>SP_SET_PARA_VALUE(1,‘ALTER_MODE_ATATUS’, 1); // 第一步
SQL>alter database standby; //第二步
SQL>SP_SET_PARA_VALUE(1,‘ALTER_MODE_ATATUS’, 0); //第三步
注:如果当前数据库不是Normal模式,需要先修改dm.ini中的ALTER_MODE_STATUS值为1,允许修改数据库模式,修改Standby模式成功后再改回0。如果是Normal模式,请忽略上面的第一步和第三步。
六、配置监视器
配置监视器时可以选择配置单实例监视器或配置多实例监视器,我这里就配置单实例监视器。
由于主库和实时备库的守护进程配置为自动切换模式,因此这里选择配置确认监视器。和普通监视器相比,确认监视器除了相同的命令支持外,在主库发生故障时,能够自动通知实时备库接管为新的主库,具有自动故障处理的功能。
==注:==故障自动切换模式下,必须配置确认监视器,且确认监视器最多只能配置一 个。
vi /dm8/data/dmmonitor.ini
修改 dmmonitor.ini 配置确认监视器, 其中 MON_DW_IP 中的 IP 和 PORT 和dmmal.ini 中的 MAL_HOST 和 MAL_DW_PORT 配置项保持一致。
MON_DW_Confirm = 1 #确认监视器模式
MON_LOG_PATH = /dm8/data/log #监视器日志文件存放路径
MON_LOG_INTERVAL = 60 #每隔60s定时记录系统信息到日志文件
MON_LOG_FILE_SIZE = 32 #每个日志文件最大32M
MON_LOG_SPACE_LIMIT = 0 #不限定日志文件总占用空间
[GRP1]
MON_INST_OGUID = 453331 #组GRP1的唯一OGUID值
#以下配置为监视器到组GRP1的守护进程的连接信息,以“IP:PORT”的形式配置
#IP对应dmmal.ini中的MAL_HOST,PORT对应dmmal.ini中的MAL_DW_PORT
MON_DW_IP = 192.168.146.11:52141
MON_DW_IP = 192.168.146.12:52142
MON_DW_IP = 192.168.146.13:52143
七、启动主备守护进程
启动各个主备库上的守护进程:
./dmwatcher /dm8/data/DAMENG/dmwatcher.ini
守护进程启动后,进入 Startup 状态,此时实例都处于 Mount 状态。守护进程开始广播自身和其监控实例的状态信息,结合自身信息和远程守护进程的广播信息,守护进程将本地实例Open,并切换为 Open 状态。
八、启动监视器
启动监视器
./dmmonitor /dm8/data/dmmonitor.ini
监视器提供一系列命令,支持当前守护系统状态查看以及故障处理,可输入 help 命令,查看各种命令使用说明,结合实际情况选择使用。
至此一主一备的实时数据守护系统搭建完毕, 在搭建步骤和各项配置都正确的情况下,在监视器上执行 show 命令,可以监控到所有实例都处于 Open 状态, 所有守护进程也都处于 Open 状态,即为正常运行状态。
启动主库RW_P守护进程:启动备库RW_S1守护进程:
启动备库RW_S2守护进程:
启动监视器:
监视器提供一系列命令,支持当前守护系统状态查看以及故障处理,可输入help命令,查看各种命令说明使用,结合实际情况选择使用。 至此实时守护类型的数据守护系统搭建完毕,在搭建步骤和各项配置都正确的情况下,在监视器上执行show命令,可以监控到所有实例都处于Open状态,所有守护进程也都处于Open状态,即为正常运行状态。
九、关闭数据守护系统
关闭守护系统时必须按照一定的顺序来关闭守护进程和数据UK实例。特别是自动切换模式,如果退出守护进程或主备库的顺序不正确,可能会引起主备切换,甚至造成守护进程组分裂。
通过监视器执行Stop Group命令关闭数据守护系统,是最简单、安全的方式。
命令执行成功之后,数据库实例正常关闭,但守护进程并没有真正的退出,而是将讲台切换为Shutdown状态。
执行成功之后,接着就可以去手动关闭主备库的守护进程了。
注:在监视器执行Stop Group可能会遇到这样的一个情况:
怎么做:
- ① 输入help,查看指令,会看到logout和login
- ② 输入logout退出当前默认登录,接着login登录SYSDBA即可。
十、主备库是否数据同步
1、主库建表测试主备是否数据同步
启动命令行工具disql,然后执行如下语句
CREATE TABLE test1(ID INT);
INSERT INTO test1 VALUES(1);
COMMIT;
其中 COMMIT 操作将触发实时归档,发送 RLOG_PKG 到备库 DMDB2和DMDB3。 备库 收到 RLOG_PKG,响应主库 ,并启动日志重演。
2、备库RW_S1启动disql查看
3、备库RW_S2启动disql查看
数据存在,主备库数据同步成功。
十一、主备切换测试
登录监视器之后,查看当前监视库的状态
切换主备库,执行switchover DMDB2
查看切换之后的监视库的状态,此时DMDB2由之前的备库(standby)切换为了主库(primary),DMDB1则相反,说明主备切换成功了。
十二、搭建过程中的问题汇总
问题1:
(1)场景描述:在搭建完主备库及监视器之后,启动主备守护进程和监视器,结果监视器显示如下问题:
(2)排查思路:
- 查看dmwatcher的守护日志是否正常
- 测试主备数据是否同步
- 检查监视器dmmonitor.ini配置是否正确
(3)最终解决:
检查守护日志发现是主备库之间网络不通的原因导致,然后查看主备库的网络配置,发现是备库的网络配置中丢失了vibtr0(虚拟网络接口),所以导致主备库之间的网络连接是失败的,进而导致主备库之间无法通信。
linux virbr0:
virtr0是一种虚拟网络2113接口,这是由于安装和启用libvirt服务后生成5261的,4102libvirt在服务器(host)上生成一个1653virtualnetworkswitch(virbr0),host上所有的虚拟机通过这个virbr0连接起来。默认情况下virbr0使用的是NAT模式(采用IPMasquerade),所以这种情况下guest通过host才能访问外部。
问题2
(1)场景描述:搭建完成之后启动主备库的命令行工具disql,结果一直显示主库/备库处于配置状态(正常状态应该是:处于主库/备库打开状态)
(2)排查思路:
- 确保在数据准备部分是正常关闭掉了数据库的前后台
- 检查日志文件
- 检查网络配置及状态
- 还有其他很多可能,非常需要查看分析日志文件
(3)最终解决:
- 目前遇到的是在数据准备的时候没有正常关闭数据库或者网络配置有问题