注册
DCP-主备集群搭建
培训园地/ 文章详情 /

DCP-主备集群搭建

斑马还没睡 2023/05/25 1397 0 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 数据守护集群架构及原理

img

架构:将主库产生的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 = /data/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=/dm8/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,'ARCH_INI',1); SQL> SP_SET_PARA_VALUE (2,'RLOG_SEND_APPLY_MON',64); PORT_NUM 服务器监听通讯端口号 DW_INACTIVE_INTERVAL 服务器认定守护进程未启动的时间,有效值范围(0~1800),单位为 S,默认 60s。 ALTER_MODE_STATUS 是否允许手动修改数据库的模式和状态以及OGUID,1表示允许,0 表示不允许 ENABLE_OFFLINE_TS 是否允许 offline 表空间,1 表示允许,0 表示不允许,2 表示禁止备库, MAL_INI MAL 系统配置开关,0 表示不启用 MAL 系统,1 表示启用 MAL系统。 ARCH_INI Redo 日志归档配置开关,0 表示不启动 Redo 日志归档,1 表示启用 Redo 日志归档 RLOG_SEND_APPLY_MON 此参数对主备库均有效。统计主库到备库的归档发送时间和备库重演日志时间。 5.配置归档dmarch.ini [dmdba@dm01 /dm8/bin]$ cat /dm8/data/DAMENG/dmarch.ini [ARCHIVE_LOCAL1] ARCH_TYPE = LOCAL #本地归档类型 ARCH_DEST = /home/dmdba/dm_bak/arch #本地归档存放路径 ARCH_FILE_SIZE = 1024 #单个归档大小,单位MB ARCH_SPACE_LIMIT = 51200 #归档上限,单位MB ARCH_FLUSH_BUF_SIZE = 0 #归档合并刷盘缓存大小,单位MB 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 GRP1_RT_02 -dm_ini /dm8/DAMENG/dm.ini -m mount 注册守护进程: [root@do03 /dm8/script/root]# ./dm_service_installer.sh -t dmwatcher -p Watcher -watcher_ini /dm8/DAMENG/dmwatcher.ini 5.恢复数据 [root@do03 /dm8/script/root]# su - dmdba [dmdba@do03 ~]$ cd /dm8/bin [dmdba@do03 /dm8/bin]$ ./dmrman CTLSTMT="RESTORE DATABASE '/dm8/DAMENG/dm.ini' FROM BACKUPSET '/dm8/DAMENG/bak/BACKUP_FILE/'" [dmdba@do03 /dm8/bin]$ ./dmrman CTLSTMT="RECOVER DATABASE '/dm8/DAMENG/dm.ini' FROM BACKUPSET '/dm8/DAMENG/bak/BACKUP_FILE/'" [dmdba@do03 /dm8/bin]$ ./dmrman CTLSTMT="RECOVER DATABASE '/dm8/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 /bin/dmmonitor.ini Created symlink from /etc/systemd/system/multi-user.target.wants/DmMonitorServiceMonitor.service to /usr/lib/systemd/system/DmMonitorServiceMonitor.service. 创建服务(DmMonitorServiceMonitor)完成
监视器常用命令 含义
list 查看守护进程配置信息
show global info 查看所有实例组的信息
tip 查看系统当前运行状态
login 登录监视器
logout 退出监视器
choose switchover GDW1 主机正常:查看可切换为主机的实例列表
switchover GDW1.实例名 主机正常:使用指定组的指定实例,切换为主机
choose takeover GDW1 主机故障:查看可切换为主机的实例列表
takeover GDW1.实例名 主机故障:使用指定组的指定实例,切换为主机
choose takeover force GDW1 强制切换:查看可切换为主机的实例列表
takeover force GDW1.实例名 强制切换:使用指定组的指定实例,切换为主机
主机故障后,在备机执行SELECT SF_DW_CHECK_TAKEOVER();【1:可接管 0:不可接管】

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

image-20220901162132769

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

image-20220901165103127

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.查看监视器

image-20220901165600621

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

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

2.查看监视器

image-20220901170151550

5.7 删除服务

⚠️注意用户必须是ROOT用户,路径是数据库安装目录的dmdbms/script/root下

[root@dm03 /home/dmdba/dmdbms/script/root]# ./dm_service_uninstaller.sh -n DmServiceGRP1_RT_02 是否删除服务(DmServiceGRP1_RT_02)?(Y/y:是 N/n:否): y Removed symlink /etc/systemd/system/multi-user.target.wants/DmServiceGRP1_RT_02.service. 删除服务文件(/usr/lib/systemd/system/DmServiceGRP1_RT_02.service)完成 删除服务(DmServiceGRP1_RT_02)完成
评论
后发表回复

作者

文章

阅读量

获赞

扫一扫
联系客服