注册
手工部署实时主备集群
技术分享/ 文章详情 /

手工部署实时主备集群

,,, 2025/12/12 58 0 0

实时主备集群部署

目录:

  1. 概要
  2. 基本概念
    1. 守护进程
    2. 监视器
  3. 主备部署
    1. 备份还原
    2. 配置端口
    3. 配置主库
    4. 配置备库
    5. 配置确认监视器
  4. 测试主备

概要

实时主备集群是达梦数据守护集群的一种集群方式,用来确保数据库的高可用。

实时主备的主要功能包括:

  • 实时数据同步
  • 主备库切换
  • 故障自动切换主备库
  • 读写分离

实时主备系统由主库、实时备库、守护进程和监视器组成。本文将使用一台主机和虚拟机,部署主库,备库和监视器,构成实时主备系统。

主机:Windows 11

虚拟机:CentOS 7

达梦数据库:DM8

基本概念

守护进程

是数据库实例和监视器之间的桥梁。

守护进程解析并执行监视器发起的各种命令,必要时通知数据库实例执行相关操作。

守护进程提供了数据库监控、故障检测、故障处理、故障恢复等各种功能。

监视器

监控多个(一组)守护进程,后两个功能为确认监视器特有。

  • 监控数据守护系统

接收守护进程发送的消息,显示主、备数据库状态变化,以及故障切换过程中,数据库模式、状态变化的完整过程。

  • 管理数据守护系统

用户可以在监视器上输入命令,启动、停止守护进程的监控功能,执行主备库切换、备库故障接管等操作。

  • 确认状态信息

用于故障自动切换的数据守护系统中,主、备库进行故障处理之前,需要通过监视器进行信息确认,确保对应的备库或者主库是真的产生异常了,避免主备库之间网络故障引发脑裂。

  • 发起故障自动接管命令

用于故障自动切换的数据守护系统中,主库发生故障时,挑选符合接管条件的备库,并通知备库执行接管操作。

主备部署

备份还原

详细操作参考 备份与还原

  1. 正常关闭数据库
  2. 进行脱机备份
./dmrman CTLSTMT="BACKUP DATABASE '/dm/data/DAMENG/dm.ini' FULL TO BACKUP_FILE1 BACKUPSET  '/dm/data/BACKUP_FILE_01'"
  1. 拷贝备份文件到备库所在机器
  2. 执行脱机数据库还原与恢复

数据库还原:

./dmrman CTLSTMT="RESTORE DATABASE '/dm/data/DAMENG/dm.ini' FROM BACKUPSET '/dm/data/BACKUP_FILE_01'"

因为脱机备份没有产生任何 REDO 日志,所以恢复这一步此处省略。

数据库更新:

./dmrman CTLSTMT="RECOVER DATABASE '/dm/data/DAMENG/dm.ini' UPDATE DB_MAGIC"

配置端口

原则上来讲,主备库和监视器应该分别使用一台机器,且需要对网络进行分区,mal使用内部网,其他使用外部网。

鉴于练习的目的,本次采取一台主机和一台虚拟机,也不对网络进行分区,也可以全部都部署在同一台设备上,只要确保端口不冲突。

主机部署主库DMSERVER_P和确认监视器。

主机为windows系统

主机ip:192.168.3.84

虚拟机部署备库DMSERVER_S。

虚拟机为centos 7系统

虚拟机ip:192.168.221.130

实例名 PORT_NUM MAL_INST_DW_PORT MAL_HOST MAL_PORT MAL_DW_PORT
DMSERVER_P 5236 33141 192.168.3.84 61141 52141
DMSERVER_S 5236 33142 192.168.221.130 61142 52142

配置主库

修改dm.ini

##实例名,建议使用“组名_守护环境_序号”的命名方式,总长度不能超过16

INSTANCE_NAME = DMSERVER_P

PORT_NUM = 5236 ##数据库实例监听端口,按需修改

ALTER_MODE_STATUS = 0 ##不允许手工方式修改实例模式/状态/OGUID

ENABLE_OFFLINE_TS = 2 ##不允许备库OFFLINE表空间

MAL_INI = 1 ##打开MAL系统

ARCH_INI = 1 ##打开归档配置

修改dmmal.ini

MAL_CHECK_INTERVAL = 5 				##MAL链路检测时间间隔

MAL_CONN_FAIL_INTERVAL = 5 			##判定MAL链路断开的时间

[MAL_INST1]

	MAL_INST_NAME = DMSERVER_P 		##实例名,和dm.ini中的INSTANCE_NAME一致

	MAL_HOST =192.168.3.84 		##MAL系统监听TCP连接的IP地址

	MAL_PORT = 61141 				##MAL系统监听TCP连接的端口

	MAL_INST_HOST = 192.168.3.84	##实例的对外服务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 = DMSERVER_S

	MAL_HOST = 192.168.221.130

	MAL_PORT = 61142

	MAL_INST_HOST =192.168.221.130

	MAL_INST_PORT = 5236

	MAL_DW_PORT = 52142

	MAL_INST_DW_PORT = 33142

修改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 =F:\dmdbms\data\DAMENG\dm.ini 	##dm.ini配置文件路径

INST_AUTO_RESTART = 1 				##打开实例的自动启动功能

INST_STARTUP_CMD =F:\dmdbms\bin\dmserver.exe	##命令行方式启动

RLOG_SEND_THRESHOLD = 0 			##指定主库发送日志到备库的时间阈值,默认关闭

RLOG_APPLY_THRESHOLD = 0 			##指定备库重演日志的时间阈值,默认关闭

以 Mount 方式启动主库

F:\dmdbms\bin>dmserver.exe F:\dmdbms\data\DAMENG\dm.ini mount

使用dlsql修改OGUID和数据库模式为primary

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);

配置备库

dm.ini

##实例名,建议使用“组名_守护环境_序号”的命名方式,总长度不能超过16

INSTANCE_NAME = DMSERVER_S

PORT_NUM = 5236 ##数据库实例监听端口,按需修改

ALTER_MODE_STATUS = 0 ##不允许手工方式修改实例模式/状态/OGUID

ENABLE_OFFLINE_TS = 2 ##不允许备库OFFLINE表空间

MAL_INI = 1 ##打开MAL系统

ARCH_INI = 1 ##打开归档配置

dmmal.ini

与主库的完全相同

dmarch.ini

[ARCHIVE_REALTIME]

	ARCH_TYPE = REALTIME 				##实时归档类型

	ARCH_DEST = DAMENG_P 				##实时归档主库实例名

[ARCHIVE_LOCAL1]

	ARCH_TYPE = LOCAL 					##本地归档类型

	ARCH_DEST = /dm/data/DAMENG/arch	##本地归档文件路径

	ARCH_FILE_SIZE = 128 				##单位Mb,本地单个归档文件最大值

	ARCH_SPACE_LIMIT = 0 				##单位Mb,0表示无限制,范围1024~2147483647M

dmwatch.ini

与主库的基本相同,记得修改两个文件路径为对应的文件路径

以mount方式启动并修改OGUID和数据库模式,具体操作和主库类似,区别是数据库模式设为standby

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);

配置确认监视器

这里以较为简单的单实例做示范。

修改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.221.130:52142

	MON_DW_IP = 192.168.3.84:52141

之后启动各个主备库的守护进程和监视器。

./dmwatcher /dm/data/DAMENG/dmwatcher.ini
./dmmonitor /dm/data/dmmonitor.ini

屏幕截图 20251205 104248.png
屏幕截图 20251205 104553.png

启动后出现类似收到守护进程消息的提示则说明主备集群启动成功了。

屏幕截图 20251205 110037.png

测试主备集群

验证确认监视器自动切换主备库的功能。

按顺序exit 掉主库的守护进程和数据库实例,观察监视器输出。

屏幕截图 20251205 112133.png

说明主备集群功能正常,自动进行了主备库的切换。

重新启动原主库(DMSERVER_P)的守护进程,观察监视器输出。

屏幕截图 20251205 115554.png

可见重新连接上了原主库的守护进程,此时实例被守护进程自动拉起,原主库变为备库,可以在监视器执行切换主库指令来还原初始状态。

switchover [group_name[.]] [db_name]

至此,成功完成了主备集群的搭建和测试。

可能遇到的问题:

监视器无法连接到守护线程

在确保端口等填写正确的前提下,该问题可能是由于没有开放防火墙端口导致的,使用以下命令开启对应的端口。

[root@localhost ~]# firewall-cmd --permanent --add-port=52142/tcp success [root@localhost ~]# firewall-cmd --permanent --add-port=61142/tcp success [root@localhost ~]# firewall-cmd --permanent --add-port=33142/tcp success [root@localhost ~]# firewall-cmd --reload success
评论
后发表回复

作者

文章

阅读量

获赞

扫一扫
联系客服