数据守护DW
实现原理:将主库产生的redo日志传输到备库,备库接收并重演redo日志,实现备库与主库的数据同步。
数据守护结构图
主库、备库、redo日志、redo日志传输dmmal、redo日志重演、数据守护进程dmwatcher、监视器dmmonitor
部署规划
配置项 | dm01 | dm02 |
---|---|---|
业务IP | 192.168.44.11/24 | 192.168.44.12/24 |
心跳IP | 192.168.1.11/24 | 192.168.1.12/24 |
实例名 | GRP1_RT_01 | GRP1_RT_02 |
实例端口 | 5236 | 5236 |
MAL端口 | 5336 | 5336 |
MAL守护进程端口 | 5436 | 5436 |
守护进程端口 | 5536 | 5536 |
OGUID | 45331 | 45331 |
守护组 | GRP1 | GRP1 |
安装目录 | /opt/dmdba | /opt/dmdba |
实例目录 | /opt/dmdba/data | /opt/dmdba/data |
归档上限 | 51200 | 51200 |
确认监视器IP |
主库
提供数据库服务的实例
初始化、开启归档与备份数据库
[dmdba@localhost ~]$ dminit PATH=/opt/dmdba/data/ INSTANCE_NAME=GRP1_RT_01 PAGE_SIZE=32 EXTENT_SIZE=32 LOG_SIZE=2048 initdb V8 db version: 0x7000c file dm.key not found, use default license! License will expire on 2024-01-03 Normal of FAST Normal of DEFAULT Normal of RECYCLE Normal of KEEP Normal of ROLL log file path: /opt/dmdba/data/DAMENG/DAMENG01.log log file path: /opt/dmdba/data/DAMENG/DAMENG02.log write to dir [/opt/dmdba/data/DAMENG]. create dm database success. 2023-04-04 17:09:53 [dmdba@localhost ~]$ ## 启动服务 [dmdba@primary01 ~]$ dmserver /opt/dmdba/data/DAMENG/dm.ini
归档
redo日志写入联机日志文件后,再执行归档线程 ,将redo日志写入归档日志文件。
涉及的归档类型:
本地归档(LOCAL):将redo日志写入本地归档日志文件中
实时归档(REALTIME):主库在redo日志ROLG_PKG写入联机日志文件之前,将redo日志发送到备库;备库收到redo日志后标记为KEEP_PKG,将原KEEP_PKG加入日志重演任务系统中,并马上响应主库,不需要等待redo日志重演结束后再响应主库。
## 开启归档 [dmdba@primary01 ~]$ disql SYSDBA/SYSDBA 服务器[LOCALHOST:5236]:处于普通打开状态 登录使用时间 : 7.422(ms) disql V8 SQL> ALTER DATABASE MOUNT; 操作已执行 已用时间: 4.850(毫秒). 执行号:0. SQL> ALTER DATABASE ARCHIVELOG; 操作已执行 已用时间: 4.872(毫秒). 执行号:0. SQL> ALTER DATABASE ADD ARCHIVELOG 'DEST=/opt/dmdba/data/DAMENG/arch,TYPE=LOCAL,FILE_SIZE=1024,SPACE_LIMIT=51200'; 操作已执行 已用时间: 1.230(毫秒). 执行号:0. SQL> ALTER DATABASE OPEN; 操作已执行 已用时间: 5.556(毫秒). 执行号:0.
备份数据
# 方式一:联机备份 SQL> BACKUP DATABASE BACKUPSET '/opt/dmdba/data/DAMENG/bak/BACKUP_FILE'; 操作已执行 已用时间: 00:00:07.292. 执行号:700. SQL> # 方式二:脱机备份 [dmdba@primary01 ~]$ dmrman RMAN> BACKUP DATABASE '/opt/dmdba/data/DAMENG/dm.ini' BACKUPSET '/opt/dmdba/data/DAMENG/bak/BACKUP_FILE';
dm.ini
数据库的关键参数设置:
参数 | 含义 | 值 |
MAL_INI | 是否打开MAL系统 | 0,1 |
DW_INACTIVE_INTERVAL | 接收守护进程消息超时时间 | 60 |
ALTER_MODE_STATUS | 是否允许手工方式修改实例模式/状态/OGUID | 0,1 |
ENABLE_OFFLINE_TS | 是否允许备库OFFLINE表空间 | 0,1,2 |
RLOG_SEND_APPLY_MON | 统计最近n次的日志发送信息 | 1~1024 |
## 修改dm.ini参数 SQL> SP_SET_PARA_VALUE(2,'PORT_NUM',5236); DMSQL 过程已成功完成 已用时间: 5.255(毫秒). 执行号:701. SQL> SP_SET_PARA_VALUE(2,'DW_INACTIVE_INTERVAL',60) # 单位:秒 DMSQL 过程已成功完成 已用时间: 4.904(毫秒). 执行号:702. SQL> SP_SET_PARA_VALUE(2,'ALTER_MODE_STATUS',0); DMSQL 过程已成功完成 已用时间: 6.090(毫秒). 执行号:703. SQL> SP_SET_PARA_VALUE(2,'ENABLE_OFFLINE_TS',2); #备库不允许 DMSQL 过程已成功完成 已用时间: 4.603(毫秒). 执行号:704. SQL> SP_SET_PARA_VALUE(2,'MAL_INI',1); DMSQL 过程已成功完成 已用时间: 4.894(毫秒). 执行号:705. SQL> SP_SET_PARA_VALUE(2,'RLOG_SEND_APPLY_MON',64); DMSQL 过程已成功完成 已用时间: 8.088(毫秒). 执行号:706. SQL> exit
dmarch.ini
归档配置,增加实时归档配置
[dmdba@primary01 DAMENG]$ more dmarch.ini #DaMeng Database Archive Configuration file #this is comments ## 0-高性能,故障手动切换;1-事务一致性,故障自动切换 ARCH_WAIT_APPLY = 0 [ARCHIVE_LOCAL1] ARCH_TYPE = LOCAL ARCH_DEST = /opt/dmdba/data/DAMENG/arch ARCH_FILE_SIZE = 1024 ARCH_SPACE_LIMIT = 51200 ARCH_FLUSH_BUF_SIZE = 0 ARCH_HANG_FLAG = 1 [ARCHIVE_REALTIME1] ARCH_TYPE = REALTIME ARCH_DEST = GRP1_RT_02 #实时归档目标实例名
dmmal.ini
基于TCP协议实现的一种内部通信机制,具有可靠、灵活、高效的特性。
DM通过MAL系统实现redo日志传输以及一些实例间的信息通信。
MAL_CHECK_INTERVAL = 10 #MAL 链路检测时间间隔 MAL_CONN_FAIL_INTERVAL = 10 #判定 MAL 链路断开的时间 MAL_TEMP_PATH = /opt/dmdba/data/malpath/ #临时文件目录 MAL_BUF_SIZE = 512 #单个 MAL 缓存大小,单位 MB MAL_SYS_BUF_SIZE = 2048 #MAL 总大小限制,单位 MB MAL_COMPRESS_LEVEL = 0 #MAL 消息压缩等级,0 表示不压缩 [MAL_INST1] MAL_INST_NAME = GRP1_RT_01 #实例名,和 dm.ini 的 INSTANCE_NAME 一致 MAL_HOST = 192.168.1.11 #MAL 系统监听 TCP 连接的 IP 地址 MAL_PORT = 5336 #MAL 系统监听 TCP 连接的端口 MAL_INST_HOST = 191.168.44.11 #实例的对外服务 IP 地址 MAL_INST_PORT = 5236 #实例对外服务端口,和 dm.ini 的 PORT_NUM 一致 MAL_DW_PORT = 5436 #实例对应的守护进程监听 TCP 连接的端口 MAL_INST_DW_PORT = 5536 #实例监听守护进程 TCP 连接的端口 [MAL_INST2] MAL_INST_NAME = GRP1_RT_02 MAL_HOST = 192.168.1.12 MAL_PORT = 5336 MAL_INST_HOST = 192.168.44.12 MAL_INST_PORT = 5236 MAL_DW_PORT = 5436 MAL_INST_DW_PORT = 5536
dmwatcher.ini
守护进程是DM数据守护系统的核心组件,是数据库实例与监视器之间信息传输的桥梁
数据库实例向本地守护进程发送消息,接收本地守护进程的消息和命令
数据守护类型:
本地守护:监视本地数据库实例
全局守护:实时主备/读写分离集群中设置
[GRP1] DW_TYPE = GLOBAL #全局守护类型 DW_MODE = MANUAL #MANUAL:故障手切 AUTO:故障自切 DW_ERROR_TIME = 20 #远程守护进程故障认定时间 INST_ERROR_TIME = 20 #本地实例故障认定时间 INST_RECOVER_TIME = 60 #主库守护进程启动恢复的间隔时间 INST_OGUID = 45331 #守护系统唯一 OGUID 值 INST_INI = /opt/dmdba/data/DAMENG/dm.ini #dm.ini 文件路径 INST_AUTO_RESTART = 1 #打开实例的自动启动功能 INST_STARTUP_CMD = /opt/dmdba/bin/dmserver #命令行方式启动 RLOG_SEND_THRESHOLD = 0 #指定主库发送日志到备库的时间阈值,默认关闭 RLOG_APPLY_THRESHOLD = 0 #指定备库重演日志的时间阈值,默认关闭
拷贝备份文件到备库
[root@dm01 ~]# scp -r /opt/dmdba/data/DAMENG/bak/BACKUP_FILE dmdba@192.168.44.12:/opt/dmdba/data/DAMENG/bak
注册服务--以mount方式注册服务
[root@primary01 ~]# /opt/dmdba/script/root/dm_service_installer.sh -t dmserver -p GRP1_RT_01 -dm_ini /opt/dmdba/data/DAMENG/dm.ini -m mount Created symlink from /etc/systemd/system/multi-user.target.wants/DmServiceGRP1_RT_01.service to /usr/lib/systemd/system/DmServiceGRP1_RT_01.service. 创建服务(DmServiceGRP1_RT_01)完成 [root@primary01 ~]# /opt/dmdba/script/root/dm_service_installer.sh -t dmwatcher -p Watcher -watcher_ini /opt/dmdba/data/DAMENG/dmwatcher.ini Created symlink from /etc/systemd/system/multi-user.target.wants/DmWatcherServiceWatcher.service to /usr/lib/systemd/system/DmWatcherServiceWatcher.service. 创建服务(DmWatcherServiceWatcher)完成 [root@primary01 ~]#
备库
主要作用:容灾、备份、只读
[dmdba@localhost ~]$ dminit PATH=/opt/dmdba/data/ INSTANCE_NAME=GRP1_RT_02 PAGE_SIZE=32 EXTENT_SIZE=32 LOG_SIZE=2048 initdb V8 db version: 0x7000c file dm.key not found, use default license! License will expire on 2024-01-03 Normal of FAST Normal of DEFAULT Normal of RECYCLE Normal of KEEP Normal of ROLL log file path: /opt/dmdba/data/DAMENG/DAMENG01.log log file path: /opt/dmdba/data/DAMENG/DAMENG02.log write to dir [/opt/dmdba/data/DAMENG]. create dm database success. 2023-04-04 17:37:47
数据还原与恢复
[dmdba@localhost ~]$ dmrman CTLSTMT="RESTORE DATABASE '/opt/dmdba/data/DAMENG/dm.ini' FROM BACKUPSET '/opt/dmdba/data/DAMENG/bak/BACKUP_FILE'" dmrman V8 RESTORE DATABASE '/opt/dmdba/data/DAMENG/dm.ini' FROM BACKUPSET '/opt/dmdba/data/DAMENG/bak/BACKUP_FILE' file dm.key not found, use default license! Normal of FAST Normal of DEFAULT Normal of RECYCLE Normal of KEEP Normal of ROLL [Percent:100.00%][Speed:0.00M/s][Cost:00:00:02][Remaining:00:00:00] restore successfully. time used: 00:00:03.190 [dmdba@localhost ~]$ dmrman CTLSTMT="RECOVER DATABASE '/opt/dmdba/data/DAMENG/dm.ini' FROM BACKUPSET '/opt/dmdba/data/DAMENG/bak/BACKUP_FILE'" dmrman V8 RECOVER DATABASE '/opt/dmdba/data/DAMENG/dm.ini' FROM BACKUPSET '/opt/dmdba/data/DAMENG/bak/BACKUP_FILE' file dm.key not found, use default license! Database mode = 2, oguid = 0 Normal of FAST Normal of DEFAULT Normal of RECYCLE Normal of KEEP Normal of ROLL EP[0]'s cur_lsn[37784], file_lsn[37784] [Percent:100.00%][Speed:0.00PKG/s][Cost:00:00:00][Remaining:00:00:00] recover successfully! time used: 00:00:02.664 [dmdba@localhost ~]$ dmrman CTLSTMT="RECOVER DATABASE '/opt/dmdba/data/DAMENG/dm.ini' UPDATE DB_MAGIC" dmrman V8 RECOVER DATABASE '/opt/dmdba/data/DAMENG/dm.ini' UPDATE DB_MAGIC file dm.key not found, use default license! Database mode = 2, oguid = 0 Normal of FAST Normal of DEFAULT Normal of RECYCLE Normal of KEEP Normal of ROLL EP[0]'s cur_lsn[37785], file_lsn[37785] recover successfully! time used: 00:00:01.199 [dmdba@localhost ~]$
dmarch.ini
ARCH_WAIT_APPLY = 0 #0:高性能(故障手切) 1:事务一致(故障自切) [ARCHIVE_LOCAL] ARCH_TYPE = LOCAL #本地归档类型 ARCH_DEST = /opt/dmdba/data/DAMENG/arch/ #本地归档存放路径 ARCH_FILE_SIZE = 1024 #单个归档大小,单位 MB ARCH_SPACE_LIMIT = 51200 #归档上限,单位 MB [ARCHIVE_REALTIME1] ARCH_TYPE = REALTIME #实时归档类型 ARCH_DEST = GRP1_RT_01 #实时归档目标实例名
dm.ini参数修改
INSTANCE_NAME = GRP1_RT_02 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
注:主备库的MAL配置一致
MAL_CHECK_INTERVAL = 10 MAL_CONN_FAIL_INTERVAL = 10 MAL_TEMP_PATH = /opt/dmdba/data/malpath/ MAL_BUF_SIZE = 512 MAL_SYS_BUF_SIZE = 2048 MAL_COMPRESS_LEVEL = 0 [MAL_INST1] MAL_INST_NAME = GRP1_RT_01 MAL_HOST = 192.168.1.11 MAL_PORT = 5336 MAL_INST_HOST = 191.168.44.11 MAL_INST_PORT = 5236 MAL_DW_PORT = 5436 MAL_INST_DW_PORT = 5536 [MAL_INST2] MAL_INST_NAME = GRP1_RT_02 MAL_HOST = 192.168.1.12 MAL_PORT = 5336 MAL_INST_HOST = 192.168.44.12 MAL_INST_PORT = 5236 MAL_DW_PORT = 5436 MAL_INST_DW_PORT = 5536
dmwatcher.ini
[GRP1] DW_TYPE = GLOBAL DW_MODE = MANUAL DW_ERROR_TIME = 20 INST_ERROR_TIME = 20 INST_RECOVER_TIME = 60 INST_OGUID = 45331 INST_INI = /opt/dmdba/data/DAMENG/dm.ini INST_AUTO_RESTART = 1 INST_STARTUP_CMD = /opt/dmdba/bin/dmserver RLOG_SEND_THRESHOLD = 0 RLOG_APPLY_THRESHOLD = 0
服务注册
[root@localhost ~]# /opt/dmdba/script/root/dm_service_installer.sh -t dmserver -p GRP1_RT_02 -dm_ini /opt/dmdba/data/DAMENG/dm.ini -m mount Created symlink from /etc/systemd/system/multi-user.target.wants/DmServiceGRP1_RT_02.service to /usr/lib/systemd/system/DmServiceGRP1_RT_02.service. 创建服务(DmServiceGRP1_RT_02)完成 [root@localhost ~]# /opt/dmdba/script/root/dm_service_installer.sh -t dmwatcher -p Watcher -watcher_ini /opt/dmdba/data/DAMENG/dmwatcher.ini Created symlink from /etc/systemd/system/multi-user.target.wants/DmWatcherServiceWatcher.service to /usr/lib/systemd/system/DmWatcherServiceWatcher.service. 创建服务(DmWatcherServiceWatcher)完成 [root@localhost ~]#
dmmonitor.ini
数据库实例与监视器没有直接的消息交互
监视数据守护系统的运行状态,获取主备库情况、守护进程状态以及主备库数据同步情况
监视器类型:
非确认监视器
确认监视器:还具备状态确认与故障自动切换的功能。建议在单独一台机器上配置确认监视器
# 非确认监视器,主备库上都需要配置 vim /opt/dmdba/bin/dmmonitor.ini MON_DW_CONFIRM = 0 #0:非确认(故障手切) 1:确认(故障自切) MON_LOG_PATH = /opt/dmdba/log #监视器日志文件存放路径,需要手动创建该目录 MON_LOG_INTERVAL = 60 #每隔 60s 定时记录系统信息到日志文件 MON_LOG_FILE_SIZE = 512 #单个日志大小,单位 MB MON_LOG_SPACE_LIMIT = 2048 #日志上限,单位 MB [GRP1] MON_INST_OGUID = 45331 #组 GRP1 的唯一 OGUID 值 MON_DW_IP = 192.168.1.11:5436 #IP 对应 MAL_HOST,PORT 对应 MAL_DW_PORT MON_DW_IP = 192.168.1.12:5436
启动集群
启动顺序为:
数据库服务-->数据守护进程-->监视器
# 主库 [dmdba@primary01 ~]$ /opt/dmdba/bin/DmServiceGRP1_RT_01 start Starting DmServiceGRP1_RT_01: [ OK ] [dmdba@primary01 ~]$ [dmdba@primary01 ~]$ disql SYSDBA/SYSDBA 服务器[LOCALHOST:5236]:处于普通配置状态 登录使用时间 : 48.332(ms) disql V8 SQL> SP_SET_OGUID(45331); DMSQL 过程已成功完成 已用时间: 154.169(毫秒). 执行号:0. SQL> ALTER DATABASE PRIMARY; 操作已执行 已用时间: 162.544(毫秒). 执行号:0. SQL> SQL> EXIT # 备库 [dmdba@localhost ~]$ /opt/dmdba/bin/DmServiceGRP1_RT_02 start Starting DmServiceGRP1_RT_02: [ OK ] [dmdba@localhost ~]$ [dmdba@localhost ~]$ disql SYSDBA/SYSDBA 服务器[LOCALHOST:5236]:处于普通配置状态 登录使用时间 : 10.426(ms) disql V8 SQL> SP_SET_OGUID(45331); DMSQL 过程已成功完成 已用时间: 21.840(毫秒). 执行号:0. SQL> ALTER DATABASE STANDBY; 操作已执行 已用时间: 8.222(毫秒). 执行号:0. SQL> EXIT # 启动守护进程 [dmdba@primary01 ~]$ /opt/dmdba/bin/DmWatcherServiceWatcher start Starting DmWatcherServiceWatcher: [ OK ] [dmdba@primary02 ~]$ /opt/dmdba/bin/DmWatcherServiceWatcher start Starting DmWatcherServiceWatcher: [ OK ] #启动监视器 dmmonitor /opt/dmdba/bin/dmmonitor.ini
邮箱:cdb@dameng.com
24 小时免费服务热线:400 991 6599
达梦技术社区:https://eco.dameng.com