学完达梦DCP课程后简单梳理了达梦集群相关的几个概念——DSC、MPP、数据守护、读写分离,和数据守护的详细搭建方法,供参考。

DMdsc共享存储集群:

类似于oracle rac,具有高可用性和高伸缩性的特征,可提供横向扩展,实现超单一服务器的功能。其提升了错误恢复能力,并且随着系统增长而逐步扩展。一旦系统发生失败,该集群对用户保证最高可用性,保障关键业务数据不被丢失。拓扑图如下图所示:

达梦数据库集群在配置DMdsc时,需配置两套网络,一套用于提供对外服务,分配虚拟IP,并实现故障保障以及网络负载。另一套提供对内部节点的心跳检测,以便做故障检测,增强了系统的容错性。再则配置共享磁盘,该磁盘可以是网络附加磁盘(NAS)、存储区域磁盘(SAN)或SCSI磁盘。对于磁盘数据的读写,达梦数据库提供了DMASM,一个专用的分布式文件系统。

测试时发现,DSC集群运行时DMSERVER必须活动,如果服务停止,则集群服务停止,但端口停止活动,集群可以换节点运行。

DMmpp非共享存储集群:

DM7采用完全对等无共享(share-nothing)的MPP架构,支持SQL并行处理,可自动化分区数据和并行查询,无I/O冲突。MPP系统工作起来就像是一台单独的计算机,由于采用自动化的并行处理,执行速度比传统的单节点数据库大大提高。拓扑图如下图所示:

达梦数据库集群

DMmpp集群中,每个数据守护系统作为一个节点,每个节点分别有主服务器和备服务器两台机器,当主服务器挂掉之后,备服务器会承担起工作任务,直到主服务器恢复为止。与DMdsc不同,mpp集群数据不存储于共享存储,而存储在本地的磁盘。因此数据将分布于每个节点之中。

数据守护:

达梦数据守护的实现原理主要是将主库产生的Redo日志传输到备库,备库接收并重做应用Redo日志,从而实现备库与主库的数据同步。其主要核心思想在于监控数据库转态,获取主、备库数据同步情况,为Redo日志传输与重演过程中出现的各种异常情况提供一系列的解决方案。

读写分离:

读写分离集群由一个主库以及一个或者多个配置了即时归档的备库组成,其主要目标是保障数据库可用性基础上,实现读,写操作的自动分离,进一步提升数据库的业务支撑能力。读写分离集群通过即时归档机制保证主、备数据一致性,并配合达梦数据库管理系统的各种接口(JDBC、DPI等),将只读操作自动分流到备库,有效降低主库的负载,提升系统的吞吐量。

数据守护的具体搭建方法:

  • 数据守护部署前准备

需要保持主机网络互通,防火墙关闭,时间一致!

 

  • 关防火墙

iptables -F

service iptables status/stop

chkconfig iptables –list/off

用iptables -L检查,关闭后应为:

[[email protected] ~]# iptables -L

Chain INPUT (policy ACCEPT)

target     prot opt source               destination        

Chain FORWARD (policy ACCEPT)

target     prot opt source               destination        

Chain OUTPUT (policy ACCEPT)

target     prot opt source               destination  

 

  • 关闭selinux

vi /etc/selinux/config

SELINUX=disabled

 

  • 时间

date -s “2020-08-06 10:10:10

 

 

安装数据库

初始化实例

 

  • 规划

主机:192.168.170.135

备机:192.168.170.136

数据库名:DAMENG

 

实例名

Port_num

Dw_port

Mal_port

Mal_dw_port

主库

GRP1——RT——01

5236

5239

5237

5238

备库

GRP1——RT——02

5236

5239

5237

5238

 

  • 数据准备

主库安装好数据库实例,备库安装好数据库

将主库的数据备份还原到备机上

1. 正常关闭主数据库

2. 进行脱机备份

./dmrman CTLSTMT="BACKUP DATABASE '/dm7/data/DAMENG/dm.ini' FULL TO BACKUP_FILE1 BACKUPSET '/dm7/backup/BACKUP_FILE_01'"

3. 拷贝备份文件到备库所在机器

 scp /dm7/backup/BACKUP_FILE_01/*.*  192.168.170.135:/dm7/backup/BACKUP_FILE_01

第一个路径是主机,第二个路径是备机,把主机上的所有文件*.*拷贝到备机上

4. 在备机上执行脱机数据库还原与恢复

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

./dmrman CTLSTMT="RECOVER DATABASE '/dm7/data/DAMENG/dm.ini' FROM BACKUPSET

'/dm7/backup/BACKUP_FILE_01'"

这两步操作成功后有成功提示

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

正常操作,中间对数据库不操作,此步骤提示***魔数不更新

 

5 配置主库

5.1配置 dm.ini

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

INSTANCE_NAME = GRP1_RT_01

PORT_NUM = 5236 #数据库实例监听端口

DW_PORT = 5239 #守护环境下,监听守护进程连接端口

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

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

MAL_INI = 1  #打开 MAL 系统

ARCH_INI = 1 #打开归档配置

RLOG_SEND_APPLY_MON = 64 #统计最近 64 次的日志发送信息

 

5.2配置 dmmal.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.2.28 #MAL 系统监听 TCP 连接的 IP 地址

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

MAL_INST_HOST = 192.168.1.28 #实例的对外服务IP地址

MAL_INST_PORT = 5236 #实例的对外服务端口和dm.ini中的PORT_NUM一致

MAL_DW_PORT = 5238 #实例本地的守护进程监听 TCP 连接的端口 

[MAL_INST2]

MAL_INST_NAME = GRP1_RT_02

MAL_HOST = 192.168.2.38

MAL_PORT = 5237

MAL_INST_HOST = 192.168.1.38

MAL_INST_PORT = 5236

MAL_DW_PORT = 5238

 

5.3配置 dmarch.ini

[ARCHIVE_REALTIME]

ARCH_TYPE = REALTIME #实时归档类型

ARCH_DEST = GRP1_RT_02 #实时归档目标实例名

[ARCHIVE_LOCAL1]

ARCH_TYPE = LOCAL #本地归档类型

ARCH_DEST = /dm7/arch #本地归档文件存放路径

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

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

 

5.4配置 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 = /dm7/data/DAMENG/dm.ini   #dm.ini配置文件路径

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

INST_STARTUP_CMD = /dm7/bin/dmserver #命令行方式启动

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

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

 

5.5配置 dmwatcher.ctl

./dmctlcvt TYPE=3 SRC=/dm7/data/DAMENG/dmwatcher.ini DEST=/dm7/data

生成的dmwatcher.ctl文件会放在/dm7/data文件的GRP1文件夹中,需要在GRP1路径下使用cp dmwatcher.ctl /dm7/data/DAMENG,放到实例文件夹中

 

5.6启动主库

以mount 方式启动主库

./dmserver /dm7/data/DAMENG/dm.ini mount

 

5.7设置 OGUID

SQL>SP_SET_PARA_VALUE(1, 'ALTER_MODE_STATUS', 1);

SQL>sp_set_oguid(453331);

SQL>SP_SET_PARA_VALUE(1, 'ALTER_MODE_STATUS', 0);

 

5.8修改数据库模式

SQL>alter database primary;

 

6配置备库

6.1配置dm.ini

INSTANCE_NAME = GRP1_RT_02

PORT_NUM = 5236 #数据库实例监听端口

DW_PORT = 5239 #守护环境下,监听守护进程连接端口

DW_ERROR_TIME = 60 #接收守护进程消息超时时间

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

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

MAL_INI = 1 #打开 MAL 系统

ARCH_INI = 1 #打开归档配置

RLOG_SEND_APPLY_MON = 64 #统计最近 64 次的日志重演信息

 

6.2 配置dmmal.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.2.28 #MAL 系统监听 TCP 连接的 IP 地址

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

MAL_INST_HOST = 192.168.1.28 #实例的对外服务 IP 地址

MAL_INST_PORT = 5236 #实例的对外服务端口,和 dm.ini 中的 PORT_NUM 一致

MAL_DW_PORT = 5238 #实例对应的守护进程监听 TCP 连接的端口

[MAL_INST2]

MAL_INST_NAME = GRP1_RT_02

MAL_HOST = 192.168.2.38

MAL_PORT = 5237

MAL_INST_HOST = 192.168.1.38

MAL_INST_PORT = 5236

MAL_DW_PORT = 5238

 

6.3 配置 dmarch.ini

[ARCHIVE_REALTIME]

ARCH_TYPE = REALTIME #实时归档类型

ARCH_DEST = GRP1_RT_01 #实时归档目标实例名

[ARCHIVE_LOCAL1]

ARCH_TYPE = LOCAL #本地归档类型

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

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

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

 

6.4配置 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 = /dm7/data/DAMENG/dm.ini   #dm.ini配置文件路径

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

INST_STARTUP_CMD = /dm7/bin/dmserver #命令行方式启动

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

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

 

6.5 配置 dmwatcher.ctl

同一个守护进程组,必须使用同一份 dmwatcher.ctl 文件,这里直接拷贝配置主库时已经生成的 dmwatcher.ctl 到本地数据文件目录/dm7/data/DAMENG。

 

6.6 以 mount 方式启动备库

./dmserver /dm7/data/DAMENG/dm.ini mount

 

6.7 设置 OGUID

sp_set_oguid(453331);

 

6.8修改数据库模式

SQL>SP_SET_PARA_VALUE(1, 'ALTER_MODE_STATUS', 1); ----第 1 步

SQL>alter database standby; ----第 2 步

SQL>SP_SET_PARA_VALUE(1, 'ALTER_MODE_STATUS', 0); ----第 3 步

 

7配置监视器

由于主库和实时备库的守护进程配置为自动切换模式,因此这里选择配置确认监视器。

和普通监视器相比,确认监视器除了相同的命令支持外,在主库发生故障时,能够自动通知

实时备库接管为新的主库,具有自动故障处理的功能

修改 dmmonitor.ini 配置确认监视器,其中 MON_DW_IP 中的 IP 和 PORT 和dmmal.ini 中的 MAL_HOST 和 MAL_DW_PORT 配置项保持一致。

 

MON_DW_CONFIRM = 1 #确认监视器模式

MON_LOG_PATH = /dm7/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.2.28:5238

MON_DW_IP = 192.168.2.38:5238

 

8、启动守护进程(主备机)

启动/dm7/bin/下工具dmwatcher

./dmwatcher /dm7/data/DAMENG/dmwatcher.ini

 

9、启动监视器

./dmmonitor /dm7/dmmonitor.ini

相关文章: