达梦-主备与读写分离集群

发布于:2022-12-17 ⋅ 阅读:(526) ⋅ 点赞:(0)

DM8-主备与读写分离集群

1. 基本概念

1.1 DM集群

DM集群包括:数据守护集群、读写分离集群、MPP主备集群。都是基于redo日志来实现的,不同的集群采用不同的redo日志归档类型。
DM单机:本地归档
数据守护集群:本地归档、实时归档、异步归档
读写分离集群:本地归档、即时归档
MPP主备集群:本地归档、实时归档

1.2 DM归档类型

归档类型 说明
本地归档(Local) 最多可设置8个。写入redo日志到本地归档文件,在redo日志写入日志文件后触发。
实时归档(Realtime) 最多可设置8个。在redo日志写入到日志文件前,通过MAL系统发送redo日志到远程备机并等待返回确认消息。
即时归档(Timely) 最多可设置8个。在redo日志写入到日志文件后,通过MAL系统发送redo日志到远程备机并等待APPLY完成后返回消息。
异步归档(Async) 最多可设置8个。由主备机定时同步日志到异备。

2. 数据守护集群

2.1 概念

	DM数据守护(Data Watch)是一种集成化的高可靠性解决方案,满足用户对数据安全性和高可用性的要求。主要解决由于硬件故障、自然灾害等原因导致的数据库服务长时间中断问题。提供不间断数据库服务,即双机热备。

2.2 数据守护集群架构及原理

在这里插入图片描述

	架构:将主库产生的REDO日志传输的备库,备库接收并重演日志,从而实现主备库的数据同步。DM数据守护的核心思想是监控数据库状态,获取主、备数据同步情况,为REDO日志传输与重演过程中出现的各种异常情况提供一系列的解决方案。
	原理:主要是基于REDO日志传输重做,主备机各有一份自己的数据,不需要额外的共享存储,利用REDO日志传输重做来实现主备机数据一致。

2.3 守护进程主要功能

	监控数据库状态、发送状态信息、监控其他守护进程消息、接收监视器消息、主备库启动运行、备库故障处理、备库异常处理、主库故障处理、故障修复处理。

2.4 守护进程故障切换模式以及进程状态

	故障自动切换:主库发生故障时,确认监视器自动选择一个备库,切换为主库对外提供服务,故障自动切换模式,要求必须配置且只能配置一个确认监视器
	故障手动切换:由用户根据实际情况,通过监视器命令将备库切换为主库。在用户干预之前,备库可以继续提供只读服务,但修改非临时表数据的操作将会失败。
	守护进程状态包括:startup状态、open状态、shutdown状态、switchover状态、failover状态、recovery状态、confirm状态、takeover状态、open force状态

3. 监视器

3.1 作用

基本作用
监控数据守护系统 接收守护进程发送的消息,显示主、备数据库状态变化,以及故障切换过程中,数据库模式、装药变化的完整过程。
管理系统守护系统 用户可以在监视器上输入命令,启动、停止守护进程的监控功能,执行主备库切换、备库故障接管等操作。
确认状态信息 用于故障自动切换的数据守护系统中,主、备库进行故障处理之前,需要通过监视器进行信息确认,确保对应的备库或者主库是真的产生异常了,避免主备库之间网络故障引发脑裂。
发起故障自动接管命令 用于故障自动切换的数据守护系统中,主库发生故障时,挑选符合接管条件的备库,并通知备库执行接管操作。

3.2 类型

[root@dm06 ~]# ll /dm8/data/DAMENG/dmmonitor.ini 
MON_DW_CONFIRM             = 1  #0是监控模式,1是确认模式
监视器类型 区别
监控模式 一个数据守护系统中,最多允许同时启动10个监视器,所有监视器都可以接收守护进程消息,获取守护系统状态,也可以执行各种监控命令。所有监视器都可以发起Switchover等命令,但守护进程一次只能接收一个监视器的命令,在一个监视器命令执行完成之前,守护进程收到其它监视器发起的请求,会直接报错返回。
确认模式 确认模式除了具备监控模式所有功能外,还具有状态确认和自动接管两个功能。故障自动切换模式的数据守护系统,必须部署一个确认监视器,否则在出现数据库故障时,会导致数据库服务中断。
状态确认:主库守护进程检测到备库故障时,需要向确认监视器求证,确认备库是真的故障了,在启动故障处理流程将归档失效,避免引发脑裂。
自动接管:故障自动切换模式下,确认监视器检测到主库故障后,根据收到的主备库LSN、归档状态、MAL链路状态等信息,确定一个接管备库,并将其切换为主库。确认监视器启动自动接管流程的主要场景有三种,任何一种都会导致备库自动接管:
1.主库数据实例异常终止,主库守护进程正常。
2.主库硬件故障、或者数据库实例和守护进程同时故障。
3.主库网络故障,主备库之间、主库与监视器之间连接异常。

3.3 监视器命令

help
达梦守护监视器当前支持以下命令:
用法说明: 
命令中的[group_name]和[db_name],在组名或库名不唯一的情况下,需要指定名称,组名和库名之间用'.'分隔. 
对于show monitor命令,如果db_name未指定,则按照监视器ini的配置顺序,使用组中第一个活动的守护进程获取连接信息, 
#=============================================================================================#
#-----------------------------------系统全局命令----------------------------------------------#
1.help                                                            --显示帮助信息
2.exit                                                            --退出监视器
3.show version                                                    --显示监视器自身版本信息
4.show global info                                                --显示所有组的全局信息
5.show database [group_name.]db_name                              --显示指定库的详细信息
6.show [group_name]                                               --显示指定组的详细信息,如果未指定组名,则显示所有组的详细信息
7.show i[nterval] n                                               --每隔n秒自动显示所有组的详细信息
8.q                                                               --取消自动显示
9.list [[group_name.]db_name]                                     --列出指定组的库对应的守护进程配置信息,如果都未指定,则列出所有守护进程配置信息
10.show open info [group_name.]db_name                            --显示指定库的OPEN历史信息
11.show arch send info [group_name.]db_name                       --查看源库到指定组的指定库的归档同步信息(包含恢复间隔信息)
12.show apply stat [group_name.]db_name                           --查看指定组的指定库的日志重演信息
13.show monitor [group_name[.]] [db_name]                         --列出连接到指定守护进程的所有监视器信息

14.show state                                                     --显示当前监视器所在监视器配置组的所有监视器的状态信息

15.tip                                                            --查看系统当前运行状态

16.login                                                          --登录监视器
17.logout                                                         --退出登录

18.get takeover time                                              --获取备库开始自动接管需要延迟等待的时间

---输入q/Q退出或者回车键继续---

#---------------------------------------------------------------------------------------------#
#-----------------------------------以组为单位执行的命令--------------------------------------#
19.startup dmwatcher [group_name]                                 --启动指定组的守护进程监控功能
20.stop dmwatcher [group_name]                                    --关闭指定组的守护进程监控功能
21.startup group [group_name]                                     --启动指定组中的所有库
22.stop group [group_name]                                        --关闭指定组中的所有库
23.kill group [group_name]                                        --强制杀掉指定组中的所有活动库

24.choose switchover [group_name]                                 --选择可切换为PRIMARY库的备库列表
25.choose takeover [group_name]                                   --选择可接管故障PRIMARY库的备库列表
26.choose takeover force [group_name]                             --选择可强制接管故障PRIMARY库的备库列表

27.set group [group_name] auto restart on                         --打开指定组中所有节点的自动拉起功能
28.set group [group_name] auto restart off                        --关闭指定组中所有节点的自动拉起功能

29.set group [group_name] para_name para_value                    --修改指定组的所有守护进程的指定配置参数(同时修改ini文件和内存值),如果未指定组名,则通知所有组执行
                                                                  --para_name指定参数名称,para_value指定参数值
                                                                  --支持修改参数: DW_ERROR_TIME/INST_RECOVER_TIME/INST_ERROR_TIME/INST_AUTO_RESTART/
                                                                                  INST_SERVICE_IP_CHECK/RLOG_SEND_THRESHOLD/RLOG_APPLY_THRESHOLD

30.set group [group_name] recover time time_value                 --修改指定组中所有备库的恢复间隔为time_value指定的整数值(time_value取值:3~86400,单位为秒)(只修改守护进程内存值)
                                                                  --如果未指定组名,则通知所有组执行

31.set group [group_name] arch invalid                            --修改指定组中所有备库的归档为无效状态,如果未指定组名,则通知所有组执行

32.clear group [group_name] arch send info                        --清理指定组中源库到所有备库(包括异步备库)的最近N次归档发送信息(通知源库执行),没有指定组名则通知所有组执行
                                                                  --N值取主库dm.ini中配置的RLOG_SEND_APPLY_MON值和实际归档发送次数中的较小值

33.clear group [group_name] apply stat                            --清理指定组中所有备库的最近N次重演信息(通知组中所有备库执行),没有指定组名则通知所有组执行
                                                                  --N值取备库dm.ini中配置的RLOG_SEND_APPLY_MON值和实际重演次数中的较小值

---输入q/Q退出或者回车键继续---

#---------------------------------------------------------------------------------------------#
#-----------------------------------以库为单位执行的命令------------------------------------#
34.check recover [group_name.]db_name                             --检查指定组的指定库是否满足自动恢复条件
35.check open [group_name.]db_name                                --检查指定组的指定库是否满足自动OPEN条件

36.open database [group_name.]db_name                             --强制OPEN指定组的指定库
37.switchover [group_name[.]] [db_name]                           --切换指定组的指定库为PRIMARY库
38.takeover [group_name[.]] [db_name]                             --使用指定组的指定库接管故障PRIMARY库
39.takeover force [group_name[.]] [db_name]                       --使用指定组的指定库强制接管故障PRIMARY库

40.set database [group_name.]db_name recover time time_value      --修改指定组的指定库的恢复间隔为time_value指定的整数值(time_value取值:3~86400,单位为秒)(只修改守护进程内存值)
41.set database [group_name.]db_name arch invalid                 --修改指定组的指定库的归档为无效状态

42.detach database [group_name.]db_name                           --将指定的备库分离出守护进程组
43.attach database [group_name.]db_name                           --将分离出去的备库重新加回到守护进程组

44.startup dmwatcher database [group_name.]db_name                --启动指定库的守护进程监控功能
45.stop dmwatcher database [group_name.]db_name                   --关闭指定库的守护进程监控功能

46.startup database [group_name.]db_name                          --启动指定组的指定库
47.stop database [group_name.]db_name                             --关闭指定组的指定库
48.kill database [group_name.]db_name                             --强杀指定组的指定库

49.clear database [group_name.]db_name arch send info             --清理指定组中主库到指定备库的最近N次归档发送信息(通知主库执行)
                                                                  --N值取主库dm.ini中配置的RLOG_SEND_APPLY_MON值和实际归档发送次数中的较小值

50.clear database [group_name.]db_name apply stat                 --清理指定备库的最近N次重演信息(通知备库执行)
                                                                  --N值取备库dm.ini中配置的RLOG_SEND_APPLY_MON值和实际重演次数中的较小值
51.set database [group_name.]db_name until time time_val          --设置指定组的指定异步备库重演到的时间点为time_value指定的时间点
52.cancel database [group_name.]db_name until time                --取消设置指定组的指定异步备库重演到的时间点

---输入q/Q退出或者回车键继续---

#---------------------------------------------------------------------------------------------#
#-----------------------------------只允许在MPP主备环境下使用的命令---------------------------#
53.show mpp                                                       --显示MPP节点信息
54.startup dmwatcher all                                          --启动所有组的守护进程监控功能
55.stop dmwatcher all                                             --关闭所有组的守护进程监控功能
56.startup group all                                              --启动所有组的库
57.stop group all                                                 --关闭所有组的库
58.kill group all                                                 --强制杀掉所有组中的活动库

59.check mppctl                                                   --检查MPP控制文件是否处于一致状态
60.recover mppctl                                                 --恢复MPP控制文件到一致状态

#=============================================================================================#

4. 配置文件说明

4.1 常用配置文件

与数据守护相关的配置文件 文件的存放路径
数据库配置文件 dm.ini 存放目录没有限制,一般存在数据库目录中
数据库控制文件 dm.ctl 存放目录由dm.ini的CTL_PATH配置项指定
MAL 配置文件 dmmal.ini 存放目录由dm.ini的CONFIG_PATH 配置项指定
Redo 日志归档配置文件 dmarch.ini 存放目录由dm.ini的CONFIG_PATH 配置项指定
守护进程配置文件 dmwatcher.ini 存放目录没有限制,一般与dm.ini存放在同一个目录
监视器配置文件 dmmonitor.ini 存放目录没有限制,一般与dm.ini存放在同一个目录
定时器配置文件 dmtimer.ini 存放目录由dm.ini的CONFIG_PATH 配置项指定
MPP 控制文件 dmmpp.ctl 存放目录由dm.ini的SYSTEM_PATH配置项指定

4.2 配置文件中常用配置

4.2.1 dm.ini

常用配置项 配置含义
INSTANCE_NAME 数据库实例名(长度不超过16个字符),与dmmal.ini中的MAL_INST_NAME对应。配置数据守护系统时,应保持INSTANCE_NAME时全局唯一的。
PORT_NUM 服务器监听通讯端口号,服务器配置此参数,有效值范围(1024~65534),发起连接端的端口在1024-65535之间分配。此参数配置应与dmmal.ini中的MAL_INST_PORT对应。
DW_PORT 服务器监听守护进程连接请求的端口,服务器配置此参数,有效值范围(1024~65534),发起连接端的端口在 1024-65535之间随机分配。
ALTER_MODE_STATUS 是否允许手工修改数据库的模式和状态以及OGUID,1表示允许,0表示不允许,此参数可动态修改,默认为1,数据守护环境下建议配置为0,避免用户手工干预。
ENABLE_OFFLINE_TS 是否允许offline表空间,1表示允许,0表示不允许,2表示禁止备库,其它放开。守护环境下建议配置为2.
MAL_INI MAL系统配置开关,0表示不启用MAL系统,1表示启用MAL系统。
ARCH_INI Redo日志配置归档开关,0表示不启动Redo日志归档,1表示启用Redo日志归档。

4.2.2 dmmal.ini

dmmal.ini是MAL配置文件,需要用到MAL环境的实例,所有站点dmmal.ini需要保证严格一致。

常用配置项 配置含义
MAL_CHECK_INTERVAL MAL链路检测时间间隔,取值范围(0s-1800s),默认30s,配置为0表示不进行MAL链路检测,数据守护环境下不建议配置为0,防止网络故障导致服务产时间阻塞。
MAL_CONN_FAIL_INTERVAL 判定MAL链路断开的时间,取值范围(2s-1800s),默认10s。
MAL_BUF_SIZE 单个MAL缓存大小限制,以兆为单位。有效值范围(0~500000),默认为100,如果不配置为0,则表示不限制单个MAL缓存大小。
MAL_SYS_BUF_SIZE MAL系统总内存大小限制,单位M,有效值范围(0~500000),默认为0,表示MAL系统无总内存限制。
MAL_COMPRESS_LEVEL MAL消息压缩等级,取值范围(0-10)。默认为0,不进行压缩,1-9表示采用lz算法,从1到9表示压缩速度依次递减,压缩频率一次递增;10 表示采用snappy算法,压缩速度高于lz算法,压缩率相对低。
MAL_TEMP_PATH 指定临时文件的目录。当邮件使用的内存超过MAL_BUG_SEZE或者MAL_SYS_BUF_SIZE时,将新产生的邮件保存到临时文件中。如果缺省,则新产生的邮件保存到temp.dbf文件中。
[MAL_NAME] MAL名称,同意配置文件中MAL名称需保持一致。
MAL_INST_NAME 数据库实例名,与dm.ini的INSTANCE_NAME配置项保持一致,MAL系统中数据实例名要保持唯一。
MAL_HOST MAL系统监听TCP连接的IP地址
MAL_PORT MAL系统监听TCP连接的端口
MAL_INST_HOST 实例对外服务的 IP 地址。
MAL_INST_PORT MAL_INST_NAME 实例服务器监听通讯端口号,服务器配置此参数有效值范围(1024~65534),此参数的配置应与dm.ini中的PORT_NUM保持一致。
MAL_DW_PORT 实例对应的守护进程监听TCP连接的端口
MAL_INST_DW_PORT 实例监听守护进程TCP连接的端口
[root@dm01 ~]# cat /dm8/data/DAMENG/dmmal.ini 
MAL_CHECK_INTERVAL         = 10  #MAL链路检测时间间隔
MAL_CONN_FAIL_INTERVAL     = 10  #判定MAL链路断开的时间
MAL_TEMP_PATH              = /dm8/data/malpath/  #临时文件目录       
MAL_BUF_SIZE               = 512  #单个MAL缓存大小,单位MB
MAL_SYS_BUF_SIZE           = 2048  #MAL总大小限制,单位MB
MAL_COMPRESS_LEVEL         = 0  #MAL消息压缩等级,0表示不压缩

[MAL_INST1]
  MAL_INST_NAME            = DW1_01  #实例名,和 dm.ini的INSTANCE_NAME一致 
  MAL_HOST                 = 10.0.0.21  #MAL系统监听TCP连接的IP地址 
  MAL_PORT                 = 5336  #MAL系统监听TCP连接的端口
  MAL_INST_HOST            = 10.0.0.21  #实例的对外服务IP地址
  MAL_INST_PORT            = 5236  #实例对外服务端口,和dm.ini的PORT_NUM一致
  MAL_DW_PORT              = 5436  #实例对应的守护进程监听TCP连接的端口
  MAL_INST_DW_PORT         = 5536  #实例监听守护进程TCP连接的端口

[MAL_INST2]
  MAL_INST_NAME            = DW1_02
  MAL_HOST                 = 10.0.0.23
  MAL_PORT                 = 5336
  MAL_INST_HOST            = 10.0.0.23
  MAL_INST_PORT            = 5236
  MAL_DW_PORT              = 5436
  MAL_INST_DW_PORT         = 5536

4.2.3 dmarch.ini

dmarch.ini是Redo日志归档配置文件。

常用配置项 配置含义
ARCH_TYPE Redo日志归档类型:LOCAL本地归档/REMOTE远程归档/REALTIME实施归档/TIMELY即使归档/ASYNC异步归档
ARCH_DEST 本地归档文件的存放路径。
ARCH_FILE_SIZE 单个Redo日志归档文件大小,取值范围(64M~2048M),对本地归档和远程归档有效,如不配置,默认1024MB。
ARCH_SPACE_LIMIT Redo日志归档空间上限,取值范围(1024~2147483647M),对本地归档和远程归档有效。
ARCH_FLUSH_BUF_SIZE 归档合并刷盘缓存大小,单位MB,取值范围(0-128),缺省为0,表示不使用归档合并刷盘。
ARCH_HANG_FLAG
[root@dm01 ~]# cat /dm8/data/DAMENG/dmarch.ini 
[ARCHIVE_LOCAL1]
        ARCH_TYPE                = LOCAL        #本地归档类型
        ARCH_DEST                = /dm8/arch    #本地归档存放路径            
        ARCH_FILE_SIZE           = 1024         #单个归档大小,单位MB
        ARCH_SPACE_LIMIT         = 51200        #归档上限,单位MB
        ARCH_FLUSH_BUF_SIZE  = 0
        ARCH_HANG_FLAG       = 1

[ARCHIVE_REALTIME]
        ARCH_TYPE                = TIMELY     #实时归档类型
        ARCH_DEST                = DW1_02       #实时归档目标实例名

4.2.4 dmwatcher.ini

dmwatcher.ini是守护进程配置文件。

常用配置项 配置含义
[GROUP_NAME] 守护进程组名(长度不能超过16)
DW_TYPE 守护类型,默认为LOCAL本地守护;可修改为GLOBAL全局守护。
DW_MODE 切换模式,默认为NANUAL 故障手动切换模式;可修改为AUTO 故障自动切换模式。
DW_ERROR_TIME 守护进程故障认定时间,取值范围为(3s~32767s),缺省15s没有收到远程守护进程消息,即认定远程守护进程故障,对本地守护无效。
INST_ERROR_TIME 数据库故障认定时间,取值范围为(3s~32767s),缺省15s没有收到数据库发送的状态信息,即认定其监控的数据库出现故障。
INST_RECOVER_TIME 备库故障恢复检测时间间隔,取值范围0~86400s,缺省每60s检查一下备库状态,满足故障恢复条件时,启动历史数据同步流程。
INST_OGUID 数据守护唯一标识码,同一守护进程组中的所有数据、守护进程和监视器,都必须配置相同OGUID值,取值范围0-2147483647。
INST_INI 监控数据库dm.ini路径。
INST_AUTO_RESTART 是否自动重启数据库实例,0:不自动重启,1:自动重启。缺省为0。
INST_STARTUP_CMD 数据库启动命令。
RLOG_SEND_THRESHOLD 用于指定主库发送日志到备库的时间阈值。取值范围(0~86400),单位为s,配置为0时此监控功能关闭,默认为0。
RLOG_APPLY_THRESHOLD 用于指定备库重演日志的时间阈值,取值范围(0~86400),单位为s,配置为0时此监控功能关闭,默认为0。
[root@dm01 ~]# cat /dm8/data/DAMENG/dmwatcher.ini 
 [GDW1]
  DW_TYPE                  = GLOBAL  #全局守护类型
  DW_MODE                  = AUTO  #故障手动切换模式(AUTO自动)
  DW_ERROR_TIME            = 20  #远程守护进程故障认定时间
  INST_ERROR_TIME          = 20  #本地实例故障认定时间
  INST_RECOVER_TIME        = 60  #主库守护进程启动恢复的间隔时间
  INST_OGUID               = 45331  #守护系统唯一OGUID值
  INST_INI                 = /dm8/data/DAMENG/dm.ini  #dm.ini文件路径       
  INST_AUTO_RESTART        = 1  #打开实例的自动启动功能
  INST_STARTUP_CMD         = /dm8/bin/dmserver  #命令行方式启动       
  RLOG_SEND_THRESHOLD      = 0  #指定主库发送日志到备库的时间阈值,默认关闭
  RLOG_APPLY_THRESHOLD     = 0  #指定备库重演日志的时间阈值,默认关闭6

4.2.5 dmmonitor.ini

dmmonitor.ini是监视器配置文件。

常用配置项 配置含义
MON_DW_CONFIRM 是否配置未确认模式,缺省为0。0:监控模式,1:确认模式。
MON_LOG_PATH 监视器日志文件路径
MON_LOG_INTERVAL 设置记录系统状态信息到日志文件的时间间隔,取值(0、1)或者(53600)),单位秒。0表示不记录任何日志,1表示只记录监视器正常接收到的信息,53600表示记录监视器正常接收信息外,每隔指定的间隔另外记录系统信息到日志文件中,默认值为1
MON_LOG_FILE_SIZE 单个日志文件大小,范围16~2048,单位为M,默认值为64,达到最大值后,会自动生成并切换到新的日志文件中,如果达到设定的总空间限制,会自动删除创建时间最早的日志文件。
MON_LOG_SPACE_LIMIT 日志总空间大小,取值0或者256~4096,单位为M,默认值为0,表示没有空间限制。
[GROUP_NAME] 守护进程组名,与dmwatcher.ini中的守护进程组名保持一致。
MON_INST_OGUID 数据守护唯一标识码,与dmwatcher.ini中的INST_OGUID保持一致。
MON_DW_IP 守护进程IP地址和监听端口。配置格式为:“守护进程IP地址:守护进程监听端口”
[root@dm01 ~]# cat /dm8/bin/dmmonitor_manual.ini 
MON_DW_CONFIRM             = 1  #0为非确认,1为确认
MON_LOG_PATH               = ../log  #监视器日志文件存放路径
MON_LOG_INTERVAL           = 60  #每隔 60s 定时记录系统信息到日志文件
MON_LOG_FILE_SIZE          = 512  #单个日志大小,单位MB
MON_LOG_SPACE_LIMIT        = 2048  #日志上限,单位MB

[GDW1]
  MON_INST_OGUID           = 45331  #组GDW1的唯一OGUID 值
  MON_DW_IP                = 10.0.0.21:5436  #IP对应MAL_HOST,PORT对应MAL_DW_PORT
  MON_DW_IP                = 10.0.0.23:5436

4.2.6 dmtimer.ini

dmtime.ini用于配置定时器,可记录异步备库的定时器信息。

常用配置项 配置含义
[TIMER_NAME1] 配置名称
TYPE 定时器调度类型:
1:执行一次
2:按日执行
3:按周执行
4:按月执行的第几天
5:按月执行的第一周
6:按月执行的第二周
7:按月执行的第三周
8:按月执行的第四周
9:按月执行的最后一周
FREQ_MONTH_WEEK_INTERVAL 间隔月或周数
FREQ_SUB_INTERVAL 间隔天数
FREQ_MINUTE_INTERVAL 间隔分钟数
START_TIME 开始时间
END_TIME 结束时间
DURING_START_DATE 开始时间点
DURING_END_DATE 结束时间点
NO_END_DATE_FLAG 是否结束标记
DESCRIBE 定时器描述
IS_VALID 定时器有效表记,默认为0
0:表示关闭定时器
1:表示启用定时器
配置名称为“TIMET_01”的定时器,TYPE = 1,开始时间为 2016-02-22 17:30:00,只执行一次。
[TIMER_01] 
 TYPE = 1
 FREQ_MONTH_WEEK_INTERVAL = 0
 FREQ_SUB_INTERVAL = 0
 FREQ_MINUTE_INTERVAL = 0
 START_TIME = 00:00:00
 END_TIME = 00:00:00
 DURING_START_DATE = 2016-02-22 17:30:00
 DURING_END_DATE = 2016-02-22 17:30:30
 NO_END_DATE_FLAG = 0
 DESCRIBE = RT TIMER
 IS_VALID = 1

5. 数据守护搭建

⚠️搭建前先检查防火墙和Selinux.

检查防火墙:
[root@dm03 ~]# systemctl status firewalld.service 
检查Selinux:
[root@dm03 ~]# getenforce
Disabled

5.1 监控模式和确认模式的区别

类别 区别1 区别2
手动切换 守护进程dmwatcher.ini
DW_MODE = MANUAL
监视器dmmonitor.ini
MON_DW_CONFIRM = 0
自动切换 守护进程dmwatcher.ini
DW_MODE = AUTO
MON_DW_CONFIRM = 1

5.2 搭建流程

主库操作:
1.初始化实例
2.修改dm.ini(实例名字、开启归档arch.ini、开启mal.ini)
3.配置归档dmarch.ini
4.备份数据
5.配置MAL(dmmal.ini)
6.配置守护进程(dmwatcher.ini)
7.拷贝实例目录到备库
8.配置监视器(dmmonitor.ini)
9.注册服务(实例服务、守护进程服务、监视器服务)

备库操作:
1.编辑dm.ini(修改为备库的实例名字)
2.编辑归档(修改实时归档为主库的实例名)
3.注册服务(实例服务、守护进程服务)
4.恢复数据

启动服务流程:mount启动主、备实例-->启动主、备守护进程-->启动监视器
停止服务流程:停止监视器-->停止主、备守护进程-->停止主、备实例

5.3 实例准备

实例名 IP 实例端口 MAL端口 MAL守护进程端口 守护进程端口 OGUID
主PRIMARY DW1_01 10.0.0.21 5236 5336 5436 5536 45331
备STANDBY DW1_02 10.0.0.23 5236 5336 5436 5536 45331

5.4 主备手动切换

5.4.1 主库配置

1.初始化实例(数据库需要关闭状态)
[dmdba@dm01 /dm8/bin]$ ./dminit PATH=/dm/data PAGE_SIZE=32 EXTENT_SIZE=32 INSTANCE_NAME=DW1_01 LOG_SIZE=2048

2.启动服务
[dmdba@dm01 /dm8/bin]$ ./dmserver /dm8/data/DAMENG/dm.ini 

3.配置归档
[dmdba@dm01 /dm8/bin]$ ./disql SYSDBA/SYSDBA
SQL> ALTER DATABASE MOUNT;
SQL> ALTER DATABASE ARCHIVELOG;
SQL> ALTER DATABASE ADD ARCHIVELOG 'DEST=/dm/arch, TYPE=LOCAL, FILE_SIZE=1024, SPACE_LIMIT=51200';
SQL> ALTER DATABASE OPEN;

3.备份数据:
SQL> BACKUP DATABASE BACKUPSET '/dm8/data/DAMENG/bak/BACKUP_FILE';


4.修改dm.ini
SQL> SP_SET_PARA_VALUE (2,'PORT_NUM',5236);
SQL> SP_SET_PARA_VALUE (2,'DW_INACTIVE_INTERVAL',60);
SQL> SP_SET_PARA_VALUE (2,'ALTER_MODE_STATUS',0);
SQL> SP_SET_PARA_VALUE (2,'ENABLE_OFFLINE_TS',2);
SQL> SP_SET_PARA_VALUE (2,'MAL_INI',1);
SQL> SP_SET_PARA_VALUE (2,'RLOG_SEND_APPLY_MON',64);

5.配置归档dmarch.ini
[dmdba@dm01 /dm8/bin]$ cat /dm8/data/DAMENG/dmarch.ini 
[ARCHIVE_LOCAL1]
        ARCH_TYPE                = LOCAL        #本地归档类型
        ARCH_DEST                = /dm8/arch    #本地归档存放路径            
        ARCH_FILE_SIZE           = 1024         #单个归档大小,单位MB
        ARCH_SPACE_LIMIT         = 51200        #归档上限,单位MB
        ARCH_FLUSH_BUF_SIZE  = 0
        ARCH_HANG_FLAG       = 1

[ARCHIVE_REALTIME]
        ARCH_TYPE                = REALTIME     #实时归档类型
        ARCH_DEST                = DW1_02       #实时归档目标实例名
        
6.配置MAL(dmmal.ini)
[dmdba@dm01 /dm8/bin]$ cat /dm8/data/DAMENG/dmmal.ini
MAL_CHECK_INTERVAL         = 10  #MAL链路检测时间间隔
MAL_CONN_FAIL_INTERVAL     = 10  #判定MAL链路断开的时间
MAL_TEMP_PATH              = /dm8/data/malpath/  #临时文件目录       
MAL_BUF_SIZE               = 512  #单个MAL缓存大小,单位MB
MAL_SYS_BUF_SIZE           = 2048  #MAL总大小限制,单位MB
MAL_COMPRESS_LEVEL         = 0  #MAL消息压缩等级,0表示不压缩

[MAL_INST1]
  MAL_INST_NAME            = DW1_01  #实例名,和 dm.ini的INSTANCE_NAME一致 
  MAL_HOST                 = 10.0.0.21  #MAL系统监听TCP连接的IP地址 
  MAL_PORT                 = 5336  #MAL系统监听TCP连接的端口
  MAL_INST_HOST            = 10.0.0.21  #实例的对外服务IP地址
  MAL_INST_PORT            = 5236  #实例对外服务端口,和dm.ini的PORT_NUM一致
  MAL_DW_PORT              = 5436  #实例对应的守护进程监听TCP连接的端口
  MAL_INST_DW_PORT         = 5536  #实例监听守护进程TCP连接的端口

[MAL_INST2]
  MAL_INST_NAME            = DW1_02
  MAL_HOST                 = 10.0.0.23
  MAL_PORT                 = 5336
  MAL_INST_HOST            = 10.0.0.23
  MAL_INST_PORT            = 5236
  MAL_DW_PORT              = 5436
  MAL_INST_DW_PORT         = 5536
  
7.配置守护进程
[dmdba@dm01 /dm8/bin]$ cat /dm8/data/DAMENG/dmwatcher.ini
 [GDW1]
  DW_TYPE                  = GLOBAL  #全局守护类型
  DW_MODE                  = MANUAL  #故障手动切换模式(AUTO自动)
  DW_ERROR_TIME            = 20  #远程守护进程故障认定时间
  INST_ERROR_TIME          = 20  #本地实例故障认定时间
  INST_RECOVER_TIME        = 60  #主库守护进程启动恢复的间隔时间
  INST_OGUID               = 45331  #守护系统唯一OGUID值
  INST_INI                 = /dm8/data/DAMENG/dm.ini  #dm.ini文件路径       
  INST_AUTO_RESTART        = 1  #打开实例的自动启动功能
  INST_STARTUP_CMD         = /dm8/bin/dmserver  #命令行方式启动       
  RLOG_SEND_THRESHOLD      = 0  #指定主库发送日志到备库的时间阈值,默认关闭
  RLOG_APPLY_THRESHOLD     = 0  #指定备库重演日志的时间阈值,默认关闭

8.拷贝实例目录到备库
[dmdba@dm01 /dm8/bin]$ scp -r /dm8/data/DAMENG/* 10.0.0.23:/dm8/data/DAMENG/

9.注册服务(需要使用root用户)
[dmdba@dm01 /dm8/bin]$ su - root
[root@dm01 ~]# cd /dm8/script/root/
注册实例:
[root@dm01 /dm8/script/root]# ./dm_service_installer.sh -t dmserver -p DW1_01 -dm_ini /dm8/data/DAMENG/dm.ini -m mount
注册守护进程:
[root@dm01 /dm8/script/root]# ./dm_service_installer.sh -t dmwatcher -p Watcher -watcher_ini /dm8/data/DAMENG/dmwatcher.ini

5.4.2 备库配置

1.修改dm.ini,改为备库的实例名称,其它不用修改
[dmdba@do03 /dm8/bin]$ grep -i 'INSTANCE_NAME' /dm8/data/DAMENG/dm.ini
		INSTANCE_NAME                   = DW1_02 
		
2.修改归档dmarch.ini,修改实时归档目标实例名为主库的实例名,其它不用修改。
[dmdba@do03 /dm8/bin]$ tail -1 /dm8/data/DAMENG/dmarch.ini 
        ARCH_DEST                = DW1_01       #实时归档目标实例名
        
3.dmmal.ini配置相同,无需修改

4.注册服务
注册服务(需要使用root用户)
[dmdba@dm03 /dm8/bin]$ su - root
[root@dm03 ~]# cd /dm8/script/root/
注册实例:
[root@do03 /dm8/script/root]# ./dm_service_installer.sh -t dmserver -p DW1_02 -dm_ini /dm8/data/DAMENG/dm.ini -m mount
注册守护进程:
[root@do03 /dm8/script/root]# ./dm_service_installer.sh -t dmwatcher -p Watcher -watcher_ini /dm8/data/DAMENG/dmwatcher.ini

5.恢复数据
[root@do03 /dm8/script/root]# su - dmdba 
[dmdba@do03 ~]$ cd /dm8/bin
[dmdba@do03 /dm8/bin]$ ./dmrman CTLSTMT="RESTORE DATABASE '/dm/data/DAMENG/dm.ini' FROM BACKUPSET '/dm/data/DAMENG/bak'"

[dmdba@do03 /dm8/bin]$ ./dmrman CTLSTMT="RECOVER DATABASE '/dm/data/DAMENG/dm.ini' FROM BACKUPSET '/dm/data/DAMENG/bak/'"

[dmdba@do03 /dm8/bin]$ ./dmrman CTLSTMT="RECOVER DATABASE '/dm/data/DAMENG/dm.ini' UPDATE DB_MAGIC"

5.4.3 配置监视器

可以在任意主库或者备库上配置,也可以把监视器配置在单独的服务器上。

1.配置监视器
[dmdba@dm01 /dm8/bin]$ cat dmmonitor_manual.ini 
MON_DW_CONFIRM             = 0  #0为非确认,1为确认
MON_LOG_PATH               = ../log  #监视器日志文件存放路径
MON_LOG_INTERVAL           = 60  #每隔 60s 定时记录系统信息到日志文件
MON_LOG_FILE_SIZE          = 512  #单个日志大小,单位MB
MON_LOG_SPACE_LIMIT        = 2048  #日志上限,单位MB

[GDW1]
  MON_INST_OGUID           = 45331  #组GDW1的唯一OGUID 值
  MON_DW_IP                = 10.0.0.21:5436  #IP对应MAL_HOST,PORT对应MAL_DW_PORT
  MON_DW_IP                = 10.0.0.23:5436
  
2.注册监视器(使用root用户)
[dmdba@dm01 /dm8/bin]$ su - root
[root@dm01 ~]# cd /dm8/script/root/
[root@dm01 /dm8/script/root]# ./dm_service_installer.sh -t dmmonitor -p Monitor -monitor_ini /dm8/bin/dmmonitor_manual.ini
Created symlink from /etc/systemd/system/multi-user.target.wants/DmMonitorServiceMonitor.service to /usr/lib/systemd/system/DmMonitorServiceMonitor.service.
创建服务(DmMonitorServiceMonitor)完成

5.4.4 启动服务

1.启动主库实例
[dmdba@dm01 /dm8/bin]$ ./DmServiceDW1_01 start
Starting DmServiceDW1_01:                                  [ OK ]

[dmdba@dm03 /dm8/bin]$ ./disql
disql V8
用户名:
密码:
服务器[LOCALHOST:5236]:处于普通配置状态
登录使用时间 : 11.918(ms)
SQL> SP_SET_OGUID(45331);
DMSQL 过程已成功完成
已用时间: 5.671(毫秒). 执行号:0.
SQL> ALTER DATABASE PRIMARY;
操作已执行
已用时间: 7.355(毫秒). 执行号:0.
SQL> exit


2.启动备库实例
[dmdba@do03 /dm8/bin]$ ./DmServiceDW1_02 start
Starting DmServiceDW1_02:                                  [ OK ]

[dmdba@dm04 /dm8/bin]$ ./disql
disql V8
用户名:
密码:

服务器[LOCALHOST:5236]:处于普通配置状态
登录使用时间 : 14.933(ms)
SQL> SP_SET_OGUID(45331);
DMSQL 过程已成功完成
已用时间: 25.767(毫秒). 执行号:0.
SQL> ALTER DATABASE STANDBY;
操作已执行
已用时间: 6.763(毫秒). 执行号:0.
SQL> exit

3.启动主库守护进程
[dmdba@dm01 /dm8/bin]$ ./DmWatcherServiceWatcher start
Starting DmWatcherServiceWatcher:                          [ OK ]

4.启动备库守护进程
[dmdba@dm03 /dm8/bin]$ ./DmWatcherServiceWatcher start
Starting DmWatcherServiceWatcher:                          [ OK ]

5.启动监视器
[dmdba@dem /dm8/bin]$ ./DmMonitorServiceMonitor start
Starting DmMonitorServiceMonitor:                          [ OK ]

[dmdba@dem /dm8/bin]$ ./dmmonitor dmmonitor_manual.ini 
[monitor]         2022-09-09 10:16:49: DMMONITOR[4.0] V8
[monitor]         2022-09-09 10:16:49: DMMONITOR[4.0] IS READY.

[monitor]         2022-09-09 10:16:50: 收到守护进程(DW1_02)消息
                  WTIME                WSTATUS        INST_OK   INAME            ISTATUS     IMODE     RSTAT    N_OPEN   FLSN            CLSN            
                  2022-09-09 10:16:49  OPEN           OK        DW1_02           OPEN        STANDBY   NULL     3        43844           43844           

[monitor]         2022-09-09 10:16:50: 收到守护进程(DW1_01)消息
                  WTIME                WSTATUS        INST_OK   INAME            ISTATUS     IMODE     RSTAT    N_OPEN   FLSN            CLSN            
                  2022-09-09 10:16:49  OPEN           OK        DW1_01           OPEN        PRIMARY   VALID    3        43845           43846   

在这里插入图片描述

5.5 主备自动切换

5.5.1 修改守护进程

1.主库、备库都修改
[dmdba@dm01 /dm8/bin]$ grep DW_MODE /dm8/data/DAMENG/dmwatcher.ini
  DW_MODE                  = AUTO  #故障手动切换模式(AUTO自动)

5.5.2 修改监视器

[dmdba@dm01 /dm8/bin]$ grep -i 'MON_DW_CONFIRM' dmmonitor_manual.ini
MON_DW_CONFIRM             = 1  #0为非确认,1为确认

5.5.3 重启服务

1.重启主库实例
[dmdba@dm01 /dm8/bin]$ ./DmServiceDW1_01 restart
Stopping DmServiceDW1_01:                                  [ OK ]
Starting DmServiceDW1_01:                                  [ OK ]

2.重启备库实例
[dmdba@do03 /dm8/bin]$ ./DmServiceDW1_02 restart
Stopping DmServiceDW1_02:                                  [ OK ]
Starting DmServiceDW1_02:                                  [ OK ]

3.重启主库守护进程
[dmdba@dm01 /dm8/bin]$ ./DmWatcherServiceWatcher restart
Stopping DmWatcherServiceWatcher:                          [ OK ]
Starting DmWatcherServiceWatcher:                          [ OK ]

4.重启备库守护进程
[dmdba@do03 /dm8/bin]$ ./DmWatcherServiceWatcher restart
Stopping DmWatcherServiceWatcher:                          [ OK ]
Starting DmWatcherServiceWatcher:                          [ OK ]

5.重启监视器
[dmdba@dem /dm8/bin]$ ./DmMonitorServiceMonitor restart
Stopping DmMonitorServiceMonitor:                          [ OK ]
Starting DmMonitorServiceMonitor:                          [ OK ]
[dmdba@dm01 /dm8/bin]$ ./dmmonitor dmmonitor_manual.ini 

在这里插入图片描述

5.6 故障模拟

5.6.1 模拟主库宕机

1.主库模拟
[dmdba@do03 /dm8/bin]$ ./disql
disql V8
用户名:
密码:

服务器[LOCALHOST:5236]:处于主库打开状态
登录使用时间 : 31.289(ms)
SQL> shutdown abort;
操作已执行
已用时间: 11.640(毫秒). 执行号:0.

2.查看监视器

在这里插入图片描述

5.6.2 模拟主库和守护进程异常

1.关闭主库和守护进程
[dmdba@dm01 /dm8/bin]$ ./DmWatcherServiceWatcher stop && ./DmServiceDW1_01 stop
Stopping DmWatcherServiceWatcher:                          [ OK ]
Stopping DmServiceDW1_01:                                  [ OK ]

2.查看监视器

在这里插入图片描述

详情请参考:https://eco.dameng.com


网站公告

今日签到

点亮在社区的每一天
去签到