一、数据守护Data Watch介绍
DM 数据守护 (Data Watch) 是一种集成化的高可用、高性能数据库解决方案,是数据库异地容灾的首选方案。通过部署 DM 数据守护,可以在硬件故障(如磁盘损坏)、自然灾害(地震、火灾)等极端情况下,避免数据损坏、丢失,保障数据安全,并且可以快速恢复数据库服务,满足用户不间断提供数据库服务的要求。其实现原理非常简单:将主库(生产库)产生的 REDO 日志传输到备库,备库接收并重新应用 REDO 日志,从而实现备库与主库的数据同步。
DM 数据守护的核心思想是监控数据库状态,获取主、备库数据同步情况,为 REDO 日志传输与重演过程中出现的各种异常情况提供一系列的解决方案,其解决方案可以配置成实时主备、MPP 主备或读写分离集群,满足用户关于系统可用性、数据安全性、性能等方面的综合需求。
二、实验环境
操作系统 + 数据库:RedHat6 + DM7
主库机器(两块网卡)
192.168.134.138(外网)
192.168.116.133(内网)
备库机器(两块网卡)
192.168.134.141(外网)
192.168.116.134(内网)
监控机器
192.168.116.132(内网)
三、实验步骤
1、三台机器均安装DM7数据库,数据库安装,可以查看达梦官网文档
2、配置各种服务文件
数据库配置文件dm.ini(主备除实例名端口配置外一致)
数据库控制文件dm.ctl(主备一致,可以复制拷贝)
mal配置文件dmmal.ini(主备一致,可以复制拷贝)
归档配置文件dmarch.ini(主备除实例名外均一致)
守护进程配置文件dmwatcher.ini(主备一致,可以复制拷贝)
确认监视器配置文件dmmonitor.ini(监视机器上)
2.1数据库配置文件dm.ini(主备均需要配置调整)
需要注意的参数主要有以下几个:
INSTANCE_NAME:数据库实例名,本次实验主库配置为DMDW_1,备库配置为DMDW_2
PORT_NUM:数据库对外访问提供的端口号,默认5236,本次实验使用默认5236端口
DW_INACTIVE_INTERVAL:接收守护进程超时时间,默认60
ALTER_MODE_STATUS:是否允许手工修改数据库模式和状态,默认为0,表示不允许修改,本次实例采用默认0,实验中有SQL命令调整该参数
ENABLE_OFFLINE_TS:是否允许offline表空间,1表示允许,0表示不允许,2表示禁止备库,其他放开,守护环境建议配置2,本次实验配置为2
MAL_INI:系统配置开关,0表示不启用MAL配置系统,1表示启用,本次实验配置为1
ARCH_INI:归档日志配置开关,1表示启用redo归档配置,0表示不启用,本次实验配置为1
RLOG_SEND_APPLY_MON:统计最近日志发送消息次数,默认配置64,本次配置为64
DW_PORT:与dmmal.ini中参数MAL_INS_DW_PORT一致,本次实验主库配置为33141,备库配置为33142
2.2 配置dmmal.ini参数(主备均配置,需要一致)
cat /dm/data/DAMENG/dmmal.ini
MAL_CHECK_INTERVAL = 5 ##MAL链路检测时间间隔
MAL_CONN_FAIL_INTERVAL = 5 ##判定MAL链路断开的时间
[MAL_INST1]
MAL_INST_NAME = DMDW_1 ##实例名,和dm.ini中的INSTANCE_NAME一致
MAL_HOST = 192.168.116.133 ##MAL系统监听TCP连接的IP地址
MAL_PORT = 61141 ##MAL系统监听TCP连接的端口
MAL_INST_HOST = 192.168.134.138 ##实例的对外服务IP地址
MAL_INST_PORT = 5236 ##实例的对外服务端口,和dm.ini中的PORT_NUM一致
MAL_DW_PORT = 52141 ##实例本地的守护进程监听TCP连接的端口
#MAL_INST_DW_PORT = 33141 ##实例监听守护进程TCP连接的端口,守护V4.0配置,V3.0在dm.ini中配置DW_PORT,本次实验在dm.ini中配置了DW_PORT
[MAL_INST2]
MAL_INST_NAME = DMDW_2
MAL_HOST = 192.168.116.134
MAL_PORT = 61142
MAL_INST_HOST = 192.168.134.141
MAL_INST_PORT = 5236
MAL_DW_PORT = 52142
#MAL_INST_DW_PORT = 33142 ##实例监听守护进程TCP连接的端口,守护V4.0配置,V3.0在dm.ini中配置DW_PORT,本次实验在dm.ini中配置了DW_PORT
2.3配置归档dmarch.ini参数(主备均配置,一般情况下均一致)
[root@localhost bin]# cat /dm/data/DAMENG/dmarch.ini
#DaMeng Database Archive Configuration file
#this is comments
[ARCHIVE_REALTIME]
ARCH_TYPE=REALTIME
ARCH_DEST=DMDW_2
[ARCHIVE_LOCAL1]
ARCH_TYPE = LOCAL
ARCH_DEST = /dm/arch
ARCH_FILE_SIZE = 64
ARCH_SPACE_LIMIT = 102400
注意:ARCH_TYPE=REALTIME,读写分离集群配置此参数为TIMELY;
ARCH_DEST=DMDW_2,主库配置指向备库的INSTANCE_NAME;备库此参数修改为DMDW_1,即备库配置指向主库INSTANCE_NAME;
2.4 配置dmwatcher.ini参数(主备均配置一致)
[root@localhost bin]# cat /dm/data/DAMENG/dmwatcher.ini
[DMDW_1]
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/DAMENG/dm.ini #dm.ini 配置文件路径
INST_AUTO_RESTART = 1 #打开实例的自动启动功能
INST_STARTUP_CMD = /dm/bin/dmserver #命令行方式启动
RLOG_SEND_THRESHOLD = 0 #指定主库发送日志到备库的时间阀值,默认关闭
RLOG_APPLY_THRESHOLD = 0 #指定备库重演日志的时间阀值,默认关闭
2.5 配置dmwatcher.ctl(主库生成,拷贝到主备库对应路径)
dmwatcher.ctl配置文件需要用命令生成(守护V4.0不需要生成该配置文件,此次实验需要),主库上生成该配置文件后,拷贝复制到主备库的/dm/data/DAMENG子目录下即可
[dmdba@localhost bin]$ ./dmctlcvt t2dwctl /dm/data/DAMENG/dmwatcher.ini /dm/data/
DMCTLCVT V7.6.1.108-Build(2021.06.30-142705-10017)ENT
convert txt to ctl success!
[dmdba@localhost bin]$ ls /dm/data/DMDW_1/
dmwatcher.ctl
[dmdba@localhost bin]$ cp /dm/data/DMDW_1/dmwatcher.ctl /dm/data/DAMENG/
[dmdba@localhost bin]$ scp /dm/data/DMDW_1/dmwatcher.ctl root@192.168.134.141:/dm/data/DAMENG/
root@192.168.134.141's password:
dmwatcher.ctl 100% 512 0.5KB/s 00:00
3、以mount方式启动主备库(主备库都是mount启动)
数据库安装目录的bin子目录下执行命令:
./dmserver /dm/data/DAMENG/dm.ini mount
4、设置主备库的OGUID值(主备库都执行,设置的值一致)
sp_set_oguid(453331)
5、设置主库模式为primary,备库设置为standbay
配置主库:
服务器[LOCALHOST:5236]:处于主库配置状态
登录使用时间: 40.766(毫秒)
SQL>
SQL> SP_SET_PARA_VALUE(1, 'ALTER_MODE_STATUS', 1);
DMSQL 过程已成功完成
已用时间: 171.166(毫秒). 执行号:1.
SQL> alter database primary;
操作已执行
已用时间: 63.868(毫秒). 执行号:0.
SQL> SP_SET_PARA_VALUE(1, 'ALTER_MODE_STATUS', 0);
DMSQL 过程已成功完成
已用时间: 22.902(毫秒). 执行号:2.
SQL> exit
配置备库:
SQL> SP_SET_PARA_VALUE(1, 'ALTER_MODE_STATUS', 1);
DMSQL 过程已成功完成
已用时间: 456.975(毫秒). 执行号:2.
SQL> alter database standby;
操作已执行
已用时间: 95.950(毫秒). 执行号:0.
SQL> SP_SET_PARA_VALUE(1, 'ALTER_MODE_STATUS', 0);
DMSQL 过程已成功完成
已用时间: 22.918(毫秒). 执行号:3.
SQL> exit
6、确认以上配置归档日志、oguid、mal配置是否生效(主备库均查询确认):
select arch_mode from v$database;
select arch_name,arch_type,arch_dest from v$DM_arch_ini;
select oguid from v$instance;
select * from v$DM_mal_ini;
7、配置监视器 (监视机器上操作)
编辑dmmonitor.ini配置监视器,在监视机器上配置监视器,dmmonitor.ini配置文件中的配置项的值,要与守护进程配置文件dmwatcher.ini对应配置项保持一致,具体配置如下:
[dmdba@localhost ~]$ cat /dm/data/DAMENG/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 ##不限定日志文件总占用空间
[DMDW_1]
MON_INST_OGUID = 453331 ##组GRP1的唯一OGUID值
#以下配置为监视器到组GRP1的守护进程的连接信息,以“IP:PORT”的形式配置
#IP对应dmmal.ini中的MAL_HOST,PORT对应dmmal.ini中的MAL_DW_PORT,本次实验对应的是dm.ini中的DW_PORT
MON_DW_IP = 192.168.116.133:52141
MON_DW_IP = 192.168.116.134:52142
8、配置守护进程开机自启(注册服务,主备库均需要操作,和安装数据库时注册服务一样)
/dm/script/root/dm_service_installer.sh -t dmwatcher -p QHK -i /dm/data/DAMENG/dmwatcher.ini
-t:服务类型
-p: 服务名
-i:配置文件路径
[root@localhost bin]# /dm/script/root/dm_service_installer.sh -t dmwatcher -p QHK -i /dm/data/DAMENG/dmwatcher.ini
移动服务脚本文件(/dm/bin/DmWatcherServiceQHK 到 /etc/rc.d/init.d/DmWatcherServiceQHK)
创建服务(DmWatcherServiceQHK)完成
9、启动守护进程服务(主备库均操作):
10、启动monitor监视器查询确认主备(监视机器上操作):
./monitor /dm/data/DAMENG/dmmonitor.ini
11、主备数据同步测试:
至此 ,Data Watch数据守护主备模式完成,关于数据守护读写分离等其他功能,后续另做介绍,了解更多,可访问达梦官网文档
数据守护和读写分离集群 | 达梦技术文档