注册
达梦数据守护集群搭建过程分享
专栏/培训园地/ 文章详情 /

达梦数据守护集群搭建过程分享

独孤求败 2024/10/25 436 0 0
摘要

一、 达梦数据守护集群简介

1.1 概述

DM 数据守护(DM Data Watch)的实现原理非常简单:将主库(生产库)产生的 Redo 日志传输到备库,备库接收并重新应用 Redo 日志,从而实现备库与主库的数据同步。DM数据守护的核心思想是监控数据库状态,获取主、备库数据同步情况,为 Redo 日志传输与重演过程中出现的各种异常情况提供一系列的解决方案。
DM 数据守护系统结构主要由主库、备库、Redo 日志、Redo 日志传输、Redo 日志重演、守护进程(dmwatcher)、监视器(dmmonitor)组成。

1.2 支持多种方案

DM数据守护提供多种解决方案,可以配置成实时主备、MPP主备、DMDSC主备或读写分离集群,满足用户关于系统可用性、数据安全性、性能等方面的综合需求。

1.3 应用场景

DM 数据守护(Data Watch)是一种集成化的高可用、高性能数据库解决方案,是数据库异地容灾的首选方案。通过部署 DM 数据守护,可以在硬件故障(如磁盘损坏)、自然灾害(地震、火灾)等极端情况下,避免数据损坏、丢失,保障数据安全,并且可以快速恢复数据库服务,满足用户不间断提供数据库服务的要求。与常规的数据库备份(Backup)、还原( Restore)技术相比,数据守护可以更快地恢复数据库服务。随着数据规模不断增长,通过还原手段恢复数据,往往需要数个小时、甚至更长时间,而数据守护基本不受数据规模的影响,只需数秒时间就可以将备库切换为主库对外提供数据库服务。

2 环境规划

本文档主要是在虚拟机中实现达梦数据守护集群实时主备(1主1备)的搭建。

2.1 基础环境准备

Windwos 环境下载虚拟机软件并安装,我使用是的 VMware Workstation 16 Pro ,在虚拟机中下载并安装麒麟 V10 操作系统,并在达梦数据库官网下载对应版本的 DM8 数据库软件包,安装包是根据 CPU 类型选择,如 X86、飞腾2000、龙芯3000、海光等。安装包的类型如果下载不对,会造成DM8数据库安装报错。
在虚拟机中克隆出 3 个相同的环境。

2.2 环境规划

环境配置表
名称 主库 备库 监视器
主机名 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 -

3数据库安装

3.1安装前准备

主要查看硬盘空间、内存、系统参数是否达到要求,权限设置是否设置正确。
具体参考达梦服务在线服务平台 Linux 环境下达梦数据库的安装
https://eco.dameng.com/document/dm/zh-cn/start/dm-install-linux.html

3.2 注意事项

(1)所有关于操作系统层面的操作要使用 root 用户操作,数据库层面的操作要使用 dmdba 用户操作,避免文件权限出现问题,导致数据库无法运行。
(2)小技巧为了避免用户切换比较麻烦且容易混乱,建议开 2 个或者多个终端窗口,固定操作只在固定窗口操作。

4 达梦数据守护主备环境搭建

4.1 主库

4.1.1 dm.ini 配置

注册实例后,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 次的⽇志发送信息

4.1.2 dmmal.ini 配置

由于数据库安装后并不会生成 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

4.1.3 dmarch.ini修改

由于数据库安装后并不会生成 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

4.1.4 dmwatcher.ini 配置

由于数据库安装后并不会生成 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 #指定备库重演⽇志的时间阈值,默认关闭

4.2 备库

4.2.1 dm.ini 配置

注册实例后,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 次的⽇志发送信息

4.2.2 dmmal.ini 配置

由于数据库安装后并不会生成 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

4.2.3 dmarch.ini 配置

由于数据库安装后并不会生成 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

4.2.4 dmwatcher.ini 配置

由于数据库安装后并不会生成 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 #指定备库重演⽇志的时间阈值,默认关闭

4.3 监视器

4.3.1 dmmonitor.ini 配置

由于数据库安装后并不会生成 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

4.4 数据准备

注意:
(1)前面配置完成后记得重启数据库让参数生效。
(2)从主库备份到备库还原这个步骤不能省略。
进入查看主库和备库的数据库是否开启归档

SQL> select arch_mode from v$database;

图片1.png

4.4.1 备份主库

使用 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'""

4.4.2 将备份⽂件拷贝到备库

使用 dmdba 用户执行以下命令将主库备份文件拷贝到备库:

scp -r /dm/BACKUP_FULL_FILE_01/ dmdba@192.168.235.160:/dm/data/BACKUP

图片2.png

4.4.3备库还原

(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"

4.5 启动数据守护

注意:达梦主备集群启动顺序是先启动数据库实例,在启动数据守护进程,最后启动监控器。关闭主备集群反之,先关闭监视器,在关闭数据守护进程,最后关闭数据库实例。
(1)以 mount 方式启动主库
一定要以 mount 方式启动数据库实例,否则系统启动时会重构回滚表空间,生成 Redo 日志;并且,启动后应用可能连接到数据库实例进行操作,破坏主备库的数据一致性。数据守护配置结束后,守护进程会自动 Open 数据库。
使用 dmdba 用户到 /dm/bin 目录输入以下命令让主库进入 mount 运行状态,

./dmserver /dm/data/DW_P/dm.ini mount

使用 disql 工具登录数据库建检查数据库是否为配置状态。

./disql SYSDBA/SYSDBA:5666

登录数据库看到数据库处于配置状态就说明成功。
图片3.png
检查成功后输入以下命令,用于设置 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);

4.6 注册守护进程服务和监控服务

4.6.1 主库

使用 root 用户在 /dm/script/root 下执行以下脚本,用于注册数据守护进程。

/dm_service_installer.sh -t dmwatcher -p WATCHER -watcher_ini /dm/data/DW_P/dmwatcher.ini

4.6.2 备库

使用 root 用户在 /dm/script/root 下执行以下脚本,用于注册数据守护进程

./dm_service_installer.sh -t dmwatcher -p WATCHER -watcher_ini /dm/data/DW_S1/dmwatcher.ini

4.6.3 监视器

使用root用户在/dm/script/root下执行以下脚本,用于注册监控服务

./dm_service_installer.sh -t dmmonitor -p MONITOR -monitor_ini /dm/dmmonitor.ini

4.7 取消服务的⾃动启动

4.7.1主库

使用 root 用户执行以下命令,用于取消实例及数据守护进程的开机自启动服务。

 systemctl disable DmServiceGRP1_RT_01.service 
 systemctl disable DmWatcherServiceWATCHER.service 

4.7.2 备库

使用 root 用户执行以下命令,用于取消实例及数据守护进程的开机自启动服务

systemctl disable DmServiceGRP1_RT_02.service 
systemctl disable DmWatcherServiceWATCHER.service 

4.7.3 监视器

使用 root 用户执行以下命令,用于取消监视器的开机自启动服务

systemctl disable DmMonitorServiceMONITOR.service

4.8 启动数据守护

在启动数据守护进程前先确保主库、备库已经停止。
(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

执行成功入下图所示:
图片4.png

4.9 验证

主库建表插入数据:
图片5.png
备库查询:
图片6.png
验证主备正常。

5 总结

达梦数据守集群搭建需要学习DM8安装手册、DM8备份与还原、DM8数据守护与读写分离集群这三本手册,学习完成后再去实践操作就会简单很多,在搭建中最难的位置应该就是主备库的参数那里需要仔细的去填写,不要将实例号与数据库名称搞混了。归档的目录要根据自己的实际存放位置。如果数据库起不来,可以使用前台命令启动,看看什么地方报错,或者查看 log 日志,仔细分析出现问题点,这样才能快速的解决问题。

评论
后发表回复

作者

文章

阅读量

获赞

扫一扫
联系客服