DM 数据守护(DM Data Watch)的实现原理非常简单:将主库(生产库)产生的 Redo 日志传输到备库,备库接收并重新应用 Redo 日志,从而实现备库与主库的数据同步。DM数据守护的核心思想是监控数据库状态,获取主、备库数据同步情况,为 Redo 日志传输与重演过程中出现的各种异常情况提供一系列的解决方案。
DM 数据守护系统结构主要由主库、备库、Redo 日志、Redo 日志传输、Redo 日志重演、守护进程(dmwatcher)、监视器(dmmonitor)组成。
DM数据守护提供多种解决方案,可以配置成实时主备、MPP主备、DMDSC主备或读写分离集群,满足用户关于系统可用性、数据安全性、性能等方面的综合需求。
DM 数据守护(Data Watch)是一种集成化的高可用、高性能数据库解决方案,是数据库异地容灾的首选方案。通过部署 DM 数据守护,可以在硬件故障(如磁盘损坏)、自然灾害(地震、火灾)等极端情况下,避免数据损坏、丢失,保障数据安全,并且可以快速恢复数据库服务,满足用户不间断提供数据库服务的要求。与常规的数据库备份(Backup)、还原( Restore)技术相比,数据守护可以更快地恢复数据库服务。随着数据规模不断增长,通过还原手段恢复数据,往往需要数个小时、甚至更长时间,而数据守护基本不受数据规模的影响,只需数秒时间就可以将备库切换为主库对外提供数据库服务。
本文档主要是在虚拟机中实现达梦数据守护集群实时主备(1主1备)的搭建。
Windwos 环境下载虚拟机软件并安装,我使用是的 VMware Workstation 16 Pro ,在虚拟机中下载并安装麒麟 V10 操作系统,并在达梦数据库官网下载对应版本的 DM8 数据库软件包,安装包是根据 CPU 类型选择,如 X86、飞腾2000、龙芯3000、海光等。安装包的类型如果下载不对,会造成DM8数据库安装报错。
在虚拟机中克隆出 3 个相同的环境。
环境配置表 | |||
---|---|---|---|
名称 | 主库 | 备库 | 监视器 |
主机名 | TEST1 | TEST2 | TEST3 |
数据库名 | DW_P | DW_S1 | - |
实例名 | GRP1_RT_01 | GRP1_RT_02 | - |
业务IP | 192.168.235.144 | 192.168.235.160 | 192.168.235.164 |
心跳IP | 192.168.235.144 | 192.168.235.160 | - |
实例端口 | 5666 | 5777 | - |
MAL_PORT | 15236 | 15236 | - |
MAL_DW_PORT | 25236 | 25236 | - |
MAL_INST_DW_PORT | 35236 | 35236 | - |
OGUID | 45331 | 45331 | - |
主要查看硬盘空间、内存、系统参数是否达到要求,权限设置是否设置正确。
具体参考达梦服务在线服务平台 Linux 环境下达梦数据库的安装
https://eco.dameng.com/document/dm/zh-cn/start/dm-install-linux.html
(1)所有关于操作系统层面的操作要使用 root 用户操作,数据库层面的操作要使用 dmdba 用户操作,避免文件权限出现问题,导致数据库无法运行。
(2)小技巧为了避免用户切换比较麻烦且容易混乱,建议开 2 个或者多个终端窗口,固定操作只在固定窗口操作。
注册实例后,dm.ini 文件会在实例的安装目录下自动生成,我的主库dm.ini文件在 /dm/data/DW_P 目录下。
在 dm.ini 文件中找到下列参数,并更改成以下参数。
PORT_NUM = 5777 #数据库实例监听端⼝
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 次的⽇志发送信息
由于数据库安装后并不会生成 dmmal.ini 这个配置文件,所以需要手动新建这个文件,本文件存放位置跟 dm.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.235.144 #MAL 系统监听 TCP 连接的 IP 地址
MAL_PORT = 15236 #MAL 系统监听 TCP 连接的端⼝
MAL_INST_HOST = 192.168.235.144 #实例的对外服务 IP 地址
MAL_INST_PORT = 5666 #实例的对外服务端⼝,和 dm.ini 中的 PORT_NUM ⼀致
MAL_DW_PORT = 25236 #实例本地的守护进程监听 TCP 连接的端⼝
MAL_INST_DW_PORT = 35236 #实例监听守护进程 TCP 连接的端⼝
[MAL_INST2]
MAL_INST_NAME = GRP1_RT_02
MAL_HOST = 192.168.235.160
MAL_PORT = 15236
MAL_INST_HOST = 192.168.235.160
MAL_INST_PORT = 5777
MAL_DW_PORT = 25236
MAL_INST_DW_PORT = 35236
由于数据库安装后并不会生成 dmarch.ini 这个配置文件,所以需要手动新建这个文件,本文件存放位置跟 dm.ini 文件在同一目录下。
[ARCHIVE_LOCAL1]
ARCH_TYPE = LOCAL #本地归档类型
ARCH_DEST = /dm/data/arch #本地归档⽂件存放路径
ARCH_FILE_SIZE = 1024 #单位 Mb,本地单个归档⽂件最⼤值
ARCH_SPACE_LIMIT = 20480 #单位 Mb,0 表示⽆限制,范围 1024~2147483647M
[ARCHIVE_REALTIME1]
ARCH_TYPE = REALTIME #实时归档
ARCH_DEST = GRP1_RT_02
由于数据库安装后并不会生成 dmwatcher.ini 这个配置文件,所以需要手动新建这个文件,本文件存放位置跟 dm.ini 文件在同一目录下。
[GRP1]
DW_TYPE = GLOBAL #全局守护类型
DW_MODE = AUTO #⾃动切换模式
DW_ERROR_TIME = 10 #远程守护进程故障认定时间
INST_RECOVER_TIME = 60 #主库守护进程启动恢复的间隔时间
INST_ERROR_TIME = 10 #本地实例故障认定时间
INST_OGUID = 45331 #守护系统唯⼀ OGUID 值
INST_INI = /dm/data/DW_P/dm.ini #dm.ini 配置⽂件路径
INST_AUTO_RESTART = 1 #打开实例的⾃动启动功能
INST_STARTUP_CMD = /dm/bin/dmserver #命令⾏⽅式启动
RLOG_SEND_THRESHOLD = 0 #指定主库发送⽇志到备库的时间阈值,默认关闭
RLOG_APPLY_THRESHOLD = 0 #指定备库重演⽇志的时间阈值,默认关闭
注册实例后,dm.ini 文件会在实例的安装目录下自动生成,我的备库 dm.ini 文件在 /dm/data/DW_S1 目录下。
在 dm.ini 文件中找到下列参数,并更改成以下参数。
PORT_NUM = 5777 #数据库实例监听端⼝
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 次的⽇志发送信息
由于数据库安装后并不会生成 dmmal.ini 这个配置文件,所以需要手动新建这个文件,本文件存放位置跟 dm.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.235.144 #MAL 系统监听 TCP 连接的 IP 地址
MAL_PORT = 15236 #MAL 系统监听 TCP 连接的端⼝
MAL_INST_HOST = 192.168.235.144 #实例的对外服务 IP 地址
MAL_INST_PORT = 5666 #实例的对外服务端⼝,和 dm.ini 中的 PORT_NUM ⼀致
MAL_DW_PORT = 25236 #实例本地的守护进程监听 TCP 连接的端⼝
MAL_INST_DW_PORT = 35236 #实例监听守护进程 TCP 连接的端⼝
[MAL_INST2]
MAL_INST_NAME = GRP1_RT_02
MAL_HOST = 192.168.235.160
MAL_PORT = 15236
MAL_INST_HOST = 192.168.235.160
MAL_INST_PORT = 5777
MAL_DW_PORT = 25236
MAL_INST_DW_PORT = 35236
由于数据库安装后并不会生成 dmarch.ini 这个配置文件,所以需要手动新建这个文件,本文件存放位置跟 dm.ini 文件在同一目录下。
[ARCHIVE_LOCAL1]
ARCH_TYPE = LOCAL #本地归档类型
ARCH_DEST = /dm/data/arch #本地归档⽂件存放路径
ARCH_FILE_SIZE = 1024 #单位 Mb,本地单个归档⽂件最⼤值
ARCH_SPACE_LIMIT = 20480 #单位 Mb,0 表示⽆限制,范围 1024~2147483647M
[ARCHIVE_REALTIME1]
ARCH_TYPE = REALTIME #实时归档
ARCH_DEST = GRP1_RT_01
由于数据库安装后并不会生成 dmwatcher.ini 这个配置文件,所以需要手动新建这个文件,文件存放位置跟 dm.ini 文件在同一目录下。
[GRP1]
DW_TYPE = GLOBAL #全局守护类型
DW_MODE = AUTO #⾃动切换模式
DW_ERROR_TIME = 10 #远程守护进程故障认定时间
INST_RECOVER_TIME = 60 #主库守护进程启动恢复的间隔时间
INST_ERROR_TIME = 10 #本地实例故障认定时间
INST_OGUID = 45331 #守护系统唯⼀ OGUID 值
INST_INI = /dm/data/DW_S1/dm.ini #dm.ini 配置⽂件路径
INST_AUTO_RESTART = 1 #打开实例的⾃动启动功能
INST_STARTUP_CMD = /dm/bin/dmserver #命令⾏⽅式启动
RLOG_SEND_THRESHOLD = 0 #指定主库发送⽇志到备库的时间阈值,默认关闭
RLOG_APPLY_THRESHOLD = 0 #指定备库重演⽇志的时间阈值,默认关闭
由于数据库安装后并不会生成 dmwatcher.ini 这个配置文件,所以需要手动新建这个文件,本文件可以存放在达梦数据库的目录下,我的存放在 /dm 目录下。
MON_DW_CONFIRM = 1 #确认监视器模式
MON_LOG_PATH = /dm/log #监视器⽇志⽂件存放路径
MON_LOG_INTERVAL = 60 #每隔 60s 定时记录系统信息到⽇志⽂件
MON_LOG_FILE_SIZE = 32 #每个⽇志⽂件最⼤ 32M
MON_LOG_SPACE_LIMIT = 0 #不限定⽇志⽂件总占⽤空间
[GRP1]
MON_INST_OGUID = 45331 #组 GRP1 的唯⼀ OGUID 值
#以下x配置为监视器到组 GRP1 的守护进程的连接信息,以―IP:PORT‖的形式配置
#IP 对应 dmmal.ini 中的 MAL_HOST,PORT 对应 dmmal.ini 中的 MAL_DW_PORT
MON_DW_IP = 192.168.235.144:25236
MON_DW_IP = 192.168.235.160:25236
注意:
(1)前面配置完成后记得重启数据库让参数生效。
(2)从主库备份到备库还原这个步骤不能省略。
进入查看主库和备库的数据库是否开启归档
SQL> select arch_mode from v$database;
使用 dmrman 工具备份主库,dmrman 是脱机备份工具,所以需要停止主库的运行状态,使用 root 用户执行
systemctl stop DmServiceGRP1_RT_01.service
命令停止主库。
使用 dmdba 用户在 /dm/bin 目录下执行以下命令备份主库:
./dmrman CTLSTMT="BACKUP DATABASE '/dm/data/DW_P/dm.ini' FULL TO BACKUP_FILE1 BACKUPSET '/dm/BACKUP_FULL_FILE_01'""
使用 dmdba 用户执行以下命令将主库备份文件拷贝到备库:
scp -r /dm/BACKUP_FULL_FILE_01/ dmdba@192.168.235.160:/dm/data/BACKUP
(1)停止备库
使用 root 用户执行以下命令,确保备库停止运行。
systemctl stop DmServiceGRP1_RT_01.service
(2)还原备库
使用 dmdba 用户执行以下命令:
1)备库还原:
./dmrman CTLSTMT="RESTORE DATABASE '/dm/data/DW_S1/dm.ini' FROM BACKUPSET'/dm/data/BACKUP/BACKUP_FULL_FILE_01'"
2)恢复一致性:
./dmrman CTLSTMT="RECOVER DATABASE '/dm/data/DW_S1/dm.ini' FROM BACKUPSET'/dm/data/BACKUP/BACKUP_FULL_FILE_01'"
3)更新 DB_MAGIC:
./dmrman CTLSTMT="RECOVER DATABASE '/dm/data/DW_S1/dm.ini' UPDATE DB_MAGIC"
注意:达梦主备集群启动顺序是先启动数据库实例,在启动数据守护进程,最后启动监控器。关闭主备集群反之,先关闭监视器,在关闭数据守护进程,最后关闭数据库实例。
(1)以 mount 方式启动主库
一定要以 mount 方式启动数据库实例,否则系统启动时会重构回滚表空间,生成 Redo 日志;并且,启动后应用可能连接到数据库实例进行操作,破坏主备库的数据一致性。数据守护配置结束后,守护进程会自动 Open 数据库。
使用 dmdba 用户到 /dm/bin 目录输入以下命令让主库进入 mount 运行状态,
./dmserver /dm/data/DW_P/dm.ini mount
使用 disql 工具登录数据库建检查数据库是否为配置状态。
./disql SYSDBA/SYSDBA:5666
登录数据库看到数据库处于配置状态就说明成功。
检查成功后输入以下命令,用于设置 OGUID 和设置修改数据库模式。
SQL> SP_SET_PARA_VALUE(1,'ALTER_MODE_STATUS',1);
SQL> sp_set_oguid(45331);
SQL> alter database primary;
SQL> SP_SET_PARA_VALUE(1, 'ALTER_MODE_STATUS', 0);
(2)以 mount 方式启动备库
使用 dmdba 用户到 /dm/bin 目录输入以下命令让备库进入 mount 运行状态:
./dmserver /dm/data/DW_S1/dm.ini mount
使用disql工具登录数据库建检查数据库是否为配置状态。
./disql SYSDBA/SYSDBA:5777
检查成功后输入以下命令,用于设置 OGUID 和设置修改数据库模式。
SQL>SP_SET_PARA_VALUE(1,'ALTER_MODE_STATUS',1);
SQL>sp_set_oguid(45331);
SQL> alter database standby;
SQL> SP_SET_PARA_VALUE(1, 'ALTER_MODE_STATUS', 0);
使用 root 用户在 /dm/script/root 下执行以下脚本,用于注册数据守护进程。
/dm_service_installer.sh -t dmwatcher -p WATCHER -watcher_ini /dm/data/DW_P/dmwatcher.ini
使用 root 用户在 /dm/script/root 下执行以下脚本,用于注册数据守护进程
./dm_service_installer.sh -t dmwatcher -p WATCHER -watcher_ini /dm/data/DW_S1/dmwatcher.ini
使用root用户在/dm/script/root下执行以下脚本,用于注册监控服务
./dm_service_installer.sh -t dmmonitor -p MONITOR -monitor_ini /dm/dmmonitor.ini
使用 root 用户执行以下命令,用于取消实例及数据守护进程的开机自启动服务。
systemctl disable DmServiceGRP1_RT_01.service
systemctl disable DmWatcherServiceWATCHER.service
使用 root 用户执行以下命令,用于取消实例及数据守护进程的开机自启动服务
systemctl disable DmServiceGRP1_RT_02.service
systemctl disable DmWatcherServiceWATCHER.service
使用 root 用户执行以下命令,用于取消监视器的开机自启动服务
systemctl disable DmMonitorServiceMONITOR.service
在启动数据守护进程前先确保主库、备库已经停止。
(1)启动数据守护
主库备库上分别执行以下命令,用于开启数据守护功能。
systemctl start DmWatcherServiceWATCHER
(2)启动监视器进程
使用 root 用户在监视器上执行以下命令,用于开机监视器进程。
systemctl start DmMonitorServiceMONITOR
如果想看数据库运行状态,需要将 dmmonitor.ini 中的 MON_DW_CONFIRM 参数由1改成0,因为如果不是设置了主备监视器的话,一个集群中只能有 1 个确认监视器。
前台启动监视器可以使用 dmdba 用在 /dm/bin 下执行以下命令:
./dmmonitor /dm/tool/dmmonitor.ini
执行成功入下图所示:
主库建表插入数据:
备库查询:
验证主备正常。
达梦数据守集群搭建需要学习DM8安装手册、DM8备份与还原、DM8数据守护与读写分离集群这三本手册,学习完成后再去实践操作就会简单很多,在搭建中最难的位置应该就是主备库的参数那里需要仔细的去填写,不要将实例号与数据库名称搞混了。归档的目录要根据自己的实际存放位置。如果数据库起不来,可以使用前台命令启动,看看什么地方报错,或者查看 log 日志,仔细分析出现问题点,这样才能快速的解决问题。
文章
阅读量
获赞