一.环境描述
准备3台虚拟机,安装数据库并初始化数据库。
参考: https://blog.csdn.net/qq_34984126/article/details/119784436
ip | 实例名 | 端口号 | 安装目录 |
---|---|---|---|
192.168.26.50 | GRP1_RT_01 | 5236 | /dm/data |
192.168.26.60 | GRP1_RT_02 | 5236 | /dm/data |
192.168.26.70 | GRP1_LOCAL_01 | 5236 | /dm/data |
在实时主备集群的基础上增加一个异步备库,可参考:
https://blog.csdn.net/qq_34984126/article/details/119868374
关闭所有节点的防火墙(会影响集群各节点间的通讯,正式环境可以在防火墙上开通对应端口)
systemctl stop firewalld 临时关闭,重启后仍开启
systemctl disable firewalld 在开机时禁用服务
二.数据准备
1.关闭主库GRP1_RT_01
[dmdba@localhost bin]$ ./DmServiceDM stop
2.脱机备份主库
[dmdba@localhost bin]$ ./dmrman CTLSTMT="BACKUP DATABASE '/dm/data/GRP1_RT_01/dm.ini' FULL TO backup BACKUPSET '/dm/data/backup'"
3.拷贝备份文件到备库GRP1_RT_02、GRP1_LOCAL_01
[dmdba@localhost bin]$ scp -r /dm/data/backup/* 192.168.26.60:/dm/data/backup
[dmdba@localhost bin]$ scp -r /dm/data/backup/* 192.168.26.70:/dm/data/backup
4.关闭备库GRP1_RT_02
[dmdba@localhost bin]$ ./DmServiceDM stop
5.还原和恢复备库GRP1_RT_02
[dmdba@localhost bin]$ ./dmrman CTLSTMT="RESTORE DATABASE '/dm/data/GRP1_RT_02/dm.ini' FROM BACKUPSET
'/dm/data/backup'"
[dmdba@localhost bin]$ #因为脱机备份没有产生任何 REDO 日志,所以恢复这一步此处省略
[dmdba@localhost bin]$ ./dmrman CTLSTMT="RECOVER DATABASE '/dm/data/GRP1_RT_02/dm.ini' UPDATE DB_MAGIC"
6.关闭备库GRP1_LOCAL_01
[dmdba@localhost bin]$ ./DmServiceDM stop
7.还原和恢复备库GRP1_LOCAL_01
[dmdba@localhost bin]$ ./dmrman CTLSTMT="RESTORE DATABASE '/dm/data/GRP1_LOCAL_01/dm.ini' FROM BACKUPSET
'/dm/data/backup'"
[dmdba@localhost bin]$ #因为脱机备份没有产生任何 REDO 日志,所以恢复这一步此处省略
[dmdba@localhost bin]$ ./dmrman CTLSTMT="RECOVER DATABASE '/dm/data/GRP1_LOCAL_01/dm.ini' UPDATE DB_MAGIC"
三.配置主库GRP1_RT_01
1.配置dm.ini文件
根据以下内容修改dm.ini文件:
INSTANCE_NAME = GRP1_RT_01 #实例名,建议使用―组名_守护环境_序号‖的命名方式,总长度不能超过 16
PORT_NUM = 5236 #数据库实例监听端口
DW_INACTIVE_INTERVAL = 60 #接收守护进程消息超时时间
ALTER_MODE_STATUS = 0 #不允许手工方式修改实例模式/状态/OGUID
ENABLE_OFFLINE_TS = 2 #不允许备库 OFFLINE 表空间
MAL_INI = 1 #打开 MAL 系统
ARCH_INI = 1 #打开归档配置
TIMER_INI = 1 #配置有异步归档时,打开定时器,定时同步归档到异备库
RLOG_SEND_APPLY_MON = 64 #统计最近 64 次的日志发送信息
2.配置dmmal.ini文件
集群各节点的dmmal文件应该保持一致,在主库配置好后,可拷贝到各节点。
[dmdba@localhost GRP1_RT_01]$ vi dmmal.ini
MAL_CHECK_INTERVAL = 5 #MAL 链路检测时间间隔
MAL_CONN_FAIL_INTERVAL = 5 #判定 MAL 链路断开的时间
[MAL_INST1]
MAL_INST_NAME = GRP1_RT_01 #实例名,和 dm.ini 中的 INSTANCE_NAME 一致
MAL_HOST = 192.168.26.50 #MAL 系统监听 TCP 连接的 IP 地址
MAL_PORT = 61141 #MAL 系统监听 TCP 连接的端口
MAL_INST_HOST = 192.168.26.50 #实例的对外服务 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.26.60
MAL_PORT = 61142
MAL_INST_HOST = 192.168.26.60
MAL_INST_PORT = 5236
MAL_DW_PORT = 52142
MAL_INST_DW_PORT = 33142
[MAL_INST3]
MAL_INST_NAME = GRP1_LOCAL_01
MAL_HOST = 192.168.26.70
MAL_PORT = 61143
MAL_INST_HOST = 192.168.26.70
MAL_INST_PORT = 5236
MAL_DW_PORT = 52143
MAL_INST_DW_PORT = 33143
3.配置dmarch.ini文件
[dmdba@localhost GRP1_RT_01]$ vi dmarch.ini
[ARCHIVE_REALTIME]
ARCH_TYPE = REALTIME #实时归档类型
ARCH_DEST = GRP1_RT_02 #实时归档目标实例名
[ARCHIVE_LOCAL1]
ARCH_TYPE = LOCAL #本地归档类型
ARCH_DEST = /dm/data/GRP1_RT_01/arch #本地归档文件存放路径
ARCH_FILE_SIZE = 128 #单位 Mb,本地单个归档文件最大值
ARCH_SPACE_LIMIT = 0 #单位 Mb,0 表示无限制,范围 1024~2147483647M
[ARCHIVE_ASYNC]
ARCH_TYPE = ASYNC #异步归档类型
ARCH_DEST = GRP1_LOCAL_01 #异步归档目标实例名
ARCH_TIMER_NAME = RT_TIMER #定时器名称,和 dmtimer.ini 中的名称一致
4.配置dmwatcher.ini文件
[dmdba@localhost GRP1_RT_01]$ vi dmwatcher.ini
[GRP1]
DW_TYPE = GLOBAL #全局守护类型
DW_MODE = AUTO #自动切换模式
DW_ERROR_TIME = 10 #远程守护进程故障认定时间
INST_RECOVER_TIME = 60 #主库守护进程启动恢复的间隔时间
INST_ERROR_TIME = 10 #本地实例故障认定时间
INST_OGUID = 453331 #守护系统唯一 OGUID 值
INST_INI = /dm/data/GRP1_RT_01/dm.ini #dm.ini 配置文件路径
INST_AUTO_RESTART = 1 #打开实例的自动启动功能
INST_STARTUP_CMD = /dm/bin/dmserver #命令行方式启动
RLOG_SEND_THRESHOLD = 0 #指定主库发送日志到备库的时间阈值,默认关闭
RLOG_APPLY_THRESHOLD = 0 #指定备库重演日志的时间阈值,默认关闭
5.配置dmtimer.ini文件
用于定时触发实例发送归档日志到异步备库。
下面示例中定时器配置为每天 00:00:00 触发主库发送归档日志到异步备库,可以根据实际情况再做调整。
[dmdba@localhost GRP1_RT_01]$ cat dmtimer.ini
[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 = 2021-08-13 17:36:09
DURING_END_DATE = 9999-12-31 23:59:59
NO_END_DATE_FLAG = 1
DESCRIBE = RT TIMER
IS_VALID = 1
6.启动主库
需以mount方式启动数据库,除首次启动数据库外不可以open启动数据库。
一定要以 Mount 方式启动数据库实例,否则系统启动时会重构回滚表空间,生
成 Redo 日志;并且,启动后应用可能连接到数据库实例进行操作,破坏主备
库的数据一致性。数据守护配置结束后,守护进程会自动 Open 数据库。
[dmdba@localhost bin] ./dmserver /dm/data/GRP1_RT_01/dm.ini mount
前台进程,不可关闭。
7.设置OGUID,并修改数据库为 Primary 模式
系统通过 OGUID 值确定一个守护进程组,由用户保证 OGUID 值的唯一性,并
确保数据守护系统中,数据库、守护进程和监视器配置相同的 OGUID 值。
[dmdba@localhost bin] ./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);
四.配置备库GRP1_RT_02
1.配置dm.ini文件
根据以下内容修改dm.ini文件:
INSTANCE_NAME = GRP1_RT_02 #实例名,建议使用―组名_守护环境_序号‖的命名方式,总长度不能超过 16
PORT_NUM = 5236 #数据库实例监听端口
DW_INACTIVE_INTERVAL = 60 #接收守护进程消息超时时间
ALTER_MODE_STATUS = 0 #不允许手工方式修改实例模式/状态/OGUID
ENABLE_OFFLINE_TS = 2 #不允许备库 OFFLINE 表空间
MAL_INI = 1 #打开 MAL 系统
ARCH_INI = 1 #打开归档配置
TIMER_INI = 1 #配置有异步归档时,打开定时器,定时同步归档到异备库
RLOG_SEND_APPLY_MON = 64 #统计最近 64 次的日志发送信息
2.配置dmmal.ini文件
[dmdba@localhost GRP1_RT_02]$ vi dmmal.ini
MAL_CHECK_INTERVAL = 5 #MAL 链路检测时间间隔
MAL_CONN_FAIL_INTERVAL = 5 #判定 MAL 链路断开的时间
[MAL_INST1]
MAL_INST_NAME = GRP1_RT_01 #实例名,和 dm.ini 中的 INSTANCE_NAME 一致
MAL_HOST = 192.168.26.50 #MAL 系统监听 TCP 连接的 IP 地址
MAL_PORT = 61141 #MAL 系统监听 TCP 连接的端口
MAL_INST_HOST = 192.168.26.50 #实例的对外服务 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.26.60
MAL_PORT = 61142
MAL_INST_HOST = 192.168.26.60
MAL_INST_PORT = 5236
MAL_DW_PORT = 52142
MAL_INST_DW_PORT = 33142
[MAL_INST3]
MAL_INST_NAME = GRP1_LOCAL_01
MAL_HOST = 192.168.26.70
MAL_PORT = 61143
MAL_INST_HOST = 192.168.26.70
MAL_INST_PORT = 5236
MAL_DW_PORT = 52143
MAL_INST_DW_PORT = 33143
3.配置dmarch.ini文件
[dmdba@localhost GRP1_RT_02]$ vi dmarch.ini
[ARCHIVE_REALTIME]
ARCH_TYPE = REALTIME #实时归档类型
ARCH_DEST = GRP1_RT_01 #实时归档目标实例名
[ARCHIVE_LOCAL1]
ARCH_TYPE = LOCAL #本地归档类型
ARCH_DEST = /dm/data/GRP1_RT_02/arch #本地归档文件路径
ARCH_FILE_SIZE = 128 #单位 Mb,本地单个归档文件最大值
ARCH_SPACE_LIMIT = 0 #单位 Mb,0 表示无限制,范围 1024~2147483647M
[ARCHIVE_ASYNC]
ARCH_TYPE = ASYNC #异步归档类型
ARCH_DEST = GRP1_LOCAL_01 #异步归档目标实例名
ARCH_TIMER_NAME = RT_TIMER #定时器名称,和 dmtimer.ini 中的名称一致
4.配置dmwatcher.ini文件
[dmdba@localhost GRP1_RT_02]$ vi dmwatcher.ini
[GRP1]
DW_TYPE = GLOBAL #全局守护类型
DW_MODE = AUTO #自动切换模式
DW_ERROR_TIME = 10 #远程守护进程故障认定时间
INST_RECOVER_TIME = 60 #主库守护进程启动恢复的间隔时间
INST_ERROR_TIME = 10 #本地实例故障认定时间
INST_OGUID = 453331 #守护系统唯一 OGUID 值
INST_INI = /dm/data/GRP1_RT_02/dm.ini #dm.ini 配置文件路径
INST_AUTO_RESTART = 1 #打开实例的自动启动功能
INST_STARTUP_CMD = /dm/bin/dmserver #命令行方式启动
RLOG_APPLY_THRESHOLD = 0 #指定备库重演日志的时间阈值,默认关闭
5.配置dmtimer.ini文件
用于定时触发实例发送归档日志到异步备库。
下面示例中定时器配置为每天 00:00:00 触发主库发送归档日志到异步备库,可以根据实际情况再做调整。
[dmdba@localhost GRP1_RT_02]$ vi dmtimer.ini
[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 = 2021-08-13 17:36:09
DURING_END_DATE = 9999-12-31 23:59:59
NO_END_DATE_FLAG = 1
DESCRIBE = RT TIMER
IS_VALID = 1
6.启动备库
需以mount方式启动数据库,除首次启动数据库外不可以open启动数据库。
一定要以 Mount 方式启动数据库实例,否则系统启动时会重构回滚表空间,生
成 Redo 日志;并且,启动后应用可能连接到数据库实例进行操作,破坏主备
库的数据一致性。数据守护配置结束后,守护进程会自动 Open 数据库。
[dmdba@localhost bin] ./dmserver /dm/data/GRP1_RT_02/dm.ini mount
前台进程,不可关闭。
7.设置OGUID,并修改数据库为 Standby 模式
系统通过 OGUID 值确定一个守护进程组,由用户保证 OGUID 值的唯一性,并
确保数据守护系统中,数据库、守护进程和监视器配置相同的 OGUID 值。
[dmdba@localhost bin] ./disql
SQL>SP_SET_PARA_VALUE(1, 'ALTER_MODE_STATUS', 1);
SQL>sp_set_oguid(453331);
SQL>alter database standby;
SQL>SP_SET_PARA_VALUE(1, 'ALTER_MODE_STATUS', 0);
五.配置备库GRP1_LOCAL_01
1.配置dm.ini文件
根据以下内容修改dm.ini文件:
INSTANCE_NAME = GRP1_RT_02 #实例名,建议使用―组名_守护环境_序号‖的命名方式,总长度不能超过 16
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文件
[dmdba@localhost GRP1_RT_02]$ vi dmmal.ini
MAL_CHECK_INTERVAL = 5 #MAL 链路检测时间间隔
MAL_CONN_FAIL_INTERVAL = 5 #判定 MAL 链路断开的时间
[MAL_INST1]
MAL_INST_NAME = GRP1_RT_01 #实例名,和 dm.ini 中的 INSTANCE_NAME 一致
MAL_HOST = 192.168.26.50 #MAL 系统监听 TCP 连接的 IP 地址
MAL_PORT = 61141 #MAL 系统监听 TCP 连接的端口
MAL_INST_HOST = 192.168.26.50 #实例的对外服务 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.26.60
MAL_PORT = 61142
MAL_INST_HOST = 192.168.26.60
MAL_INST_PORT = 5236
MAL_DW_PORT = 52142
MAL_INST_DW_PORT = 33142
[MAL_INST3]
MAL_INST_NAME = GRP1_LOCAL_01
MAL_HOST = 192.168.26.70
MAL_PORT = 61143
MAL_INST_HOST = 192.168.26.70
MAL_INST_PORT = 5236
MAL_DW_PORT = 52143
MAL_INST_DW_PORT = 33143
3.配置dmarch.ini文件
本地守护类型的备库只需要配置本地归档。
[dmdba@localhost GRP1_LOCAL_01]$ vi dmarch.ini
[ARCHIVE_LOCAL1]
ARCH_TYPE = LOCAL #本地归档类型
ARCH_DEST = /dm/data/GRP1_LOCAL_01/arch #本地归档文件路径
ARCH_FILE_SIZE = 128 #单位 Mb,本地单个归档文件最大值
ARCH_SPACE_LIMIT = 0 #单位 Mb,0 表示无限制,范围 1024~4294967294M
4.配置dmwatcher.ini文件
修改 dmwatcher.ini 配置守护进程,配置为本地守护类型,异步备库不具备故障自动切换等功能,DW_MODE 配置并不起作用,此处配置为 MANUAL 即可。
[dmdba@localhost GRP1_LOCAL_01]$ vi dmwatcher.ini
[GRP1]
DW_TYPE = LOCAL #本地守护类型
DW_MODE = MANUAL #故障手动切换模式
DW_ERROR_TIME = 10 #远程守护进程故障认定时间
INST_ERROR_TIME = 10 #本地实例故障认定时间
INST_OGUID = 453331 #守护系统唯一 OGUID 值
INST_INI = /dm/data/GRP1_LOCAL_01/dm.ini #dm.ini 配置文件路径
INST_AUTO_RESTART = 1 #打开实例的自动启动功能
INST_STARTUP_CMD = /dm/bin/dmserver #命令行方式启动
5.启动备库
需以mount方式启动数据库,除首次启动数据库外不可以open启动数据库。
一定要以 Mount 方式启动数据库实例,否则系统启动时会重构回滚表空间,生
成 Redo 日志;并且,启动后应用可能连接到数据库实例进行操作,破坏主备
库的数据一致性。数据守护配置结束后,守护进程会自动 Open 数据库。
[dmdba@localhost bin] ./dmserver /dm/data/GRP1_LOCAL_01/dm.ini mount
前台进程,不可关闭。
6.设置OGUID,并修改数据库为 Standby 模式
系统通过 OGUID 值确定一个守护进程组,由用户保证 OGUID 值的唯一性,并
确保数据守护系统中,数据库、守护进程和监视器配置相同的 OGUID 值。
[dmdba@localhost bin] ./disql
SQL>SP_SET_PARA_VALUE(1, 'ALTER_MODE_STATUS', 1);
SQL>sp_set_oguid(453331);
SQL>alter database standby;
SQL>SP_SET_PARA_VALUE(1, 'ALTER_MODE_STATUS', 0);
六.配置监视器
配置单实例监视器
选择节点GRP1_RT_02配置监视器,目录为/dm/data/GRP1_RT_02/ 下
[dmdba@localhost GRP1_RT_02]$ vi dmmonitor.ini
MON_DW_CONFIRM = 1 #确认监视器模式
MON_LOG_PATH = /dm/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.26.50:52141
MON_DW_IP = 192.168.26.60:52142
MON_DW_IP = 192.168.26.70:52143
七.启动守护进程和监视器
1.启动守护进程
守护进程启动后,进入 Startup 状态,此时实例都处于 Mount 状态。守护进程开始
广播自身和其监控实例的状态信息,结合自身信息和远程守护进程的广播信息,守护进程将
本地实例 Open,并切换为 Open 状态。
GRP1_RT_01
[dmdba@localhost bin] ./dmwatcher /dm/data/GRP1_RT_01/dmwatcher.ini
GRP1_RT_02
[dmdba@localhost bin] ./dmwatcher /dm/data/GRP1_RT_02/dmwatcher.ini
GRP1_LOCAL_01
[dmdba@localhost bin] ./dmwatcher /dm/data/GRP1_LOCAL_01/dmwatcher.ini
2.启动监视器
[dmdba@localhost bin] ./dmmonitor /dm/data/GRP1_RT_02/dmmonitor.ini
在监视器启动后,就会打印集群相关信息。
监视器提供一系列命令,支持当前守护系统状态查看以及故障处理,可输入 help 命令,查看各种命令说明使用,结合实际情况选择使用。
至此1主库+1实时备库+1异步备库集群搭建完毕,可通过show命令查看详细信息。
八.测试集群
登陆主库创建表test
登录实时备库查看test表
插入数据验证,并简单测试实时备库和异步备库的延迟
验证脚本:
begin
print (sysdate());
insert into test select level , level connect by level <=10000 ;
commit;
print (sysdate());
end
declare
num int;
begin
For i in 1 .. 70 loop
select count(1) into num from test;
print('当前时间:'||to_char(CURTIME(6))||'; 数量:'||num);
sleep(1);
End loop;
end;
实时备库测试
-
主库插入一条数据
实时备库循环查询test表,每次睡眠0.1秒
可以看到在插入一条数据时,实时备库的延迟在1秒左右。 -
批量插入10000条数据
实时备库循环查询test表,每次睡眠0.1秒
可以看到在插入10000条数据时,实时备库的延迟在2秒左右。 -
批量插入1000000条数据
实时备库循环查询test表,每次睡眠0.1秒
可以看到在插入1000000条数据时,实时备库的延迟在6秒左右。
异步备库测试
4. 主库插入一条数据
异步备库循环查询test表,循环间隔1秒
可以看到在插入1条数据时,异步备库的延迟在4秒左右。
- 主库插入10000条数据
异步备库循环查询test表,循环间隔1秒
可以看到在插入10000条数据时,异步备库的延迟在45秒左右。 - 主库插入100万数据
异步备库循环查询test表,循环间隔1秒
可以看到在插入1000000条数据时,异步备库的延迟在46秒左右。
参考文件:
官方文档:DM8数据守护与读写分离集群V4.0.pdf
想更多了解达梦数据库,请关注达梦云适配中心。
https://eco.dameng.com/