DM集群包括:数据守护集群、读写分离集群、MPP主备集群。都是基于redo日志来实现的,不同的集群采用不同的redo日志归档类型。 DM单机:本地归档 数据守护集群:本地归档、实时归档、异步归档 读写分离集群:本地归档、即时归档 MPP主备集群:本地归档、实时归档
归档类型 | 说明 |
---|---|
本地归档(Local) | 最多可设置8个。写入redo日志到本地归档文件,在redo日志写入日志文件后触发。 |
实时归档(Realtime) | 最多可设置8个。在redo日志写入到日志文件前,通过MAL系统发送redo日志到远程备机并等待返回确认消息。 |
即时归档(Timely) | 最多可设置8个。在redo日志写入到日志文件后,通过MAL系统发送redo日志到远程备机并等待APPLY完成后返回消息。 |
异步归档(Async) | 最多可设置8个。由主备机定时同步日志到异备。 |
DM数据守护(Data Watch)是一种集成化的高可靠性解决方案,满足用户对数据安全性和高可用性的要求。主要解决由于硬件故障、自然灾害等原因导致的数据库服务长时间中断问题。提供不间断数据库服务,即双机热备。
架构:将主库产生的REDO日志传输的备库,备库接收并重演日志,从而实现主备库的数据同步。DM数据守护的核心思想是监控数据库状态,获取主、备数据同步情况,为REDO日志传输与重演过程中出现的各种异常情况提供一系列的解决方案。 原理:主要是基于REDO日志传输重做,主备机各有一份自己的数据,不需要额外的共享存储,利用REDO日志传输重做来实现主备机数据一致。
监控数据库状态、发送状态信息、监控其他守护进程消息、接收监视器消息、主备库启动运行、备库故障处理、备库异常处理、主库故障处理、故障修复处理。
故障自动切换:主库发生故障时,确认监视器自动选择一个备库,切换为主库对外提供服务,故障自动切换模式,要求必须配置且只能配置一个确认监视器 故障手动切换:由用户根据实际情况,通过监视器命令将备库切换为主库。在用户干预之前,备库可以继续提供只读服务,但修改非临时表数据的操作将会失败。 守护进程状态包括:startup状态、open状态、shutdown状态、switchover状态、failover状态、recovery状态、confirm状态、takeover状态、open force状态
基本作用 | |
---|---|
监控数据守护系统 | 接收守护进程发送的消息,显示主、备数据库状态变化,以及故障切换过程中,数据库模式、装药变化的完整过程。 |
管理系统守护系统 | 用户可以在监视器上输入命令,启动、停止守护进程的监控功能,执行主备库切换、备库故障接管等操作。 |
确认状态信息 | 用于故障自动切换的数据守护系统中,主、备库进行故障处理之前,需要通过监视器进行信息确认,确保对应的备库或者主库是真的产生异常了,避免主备库之间网络故障引发脑裂。 |
发起故障自动接管命令 | 用于故障自动切换的数据守护系统中,主库发生故障时,挑选符合接管条件的备库,并通知备库执行接管操作。 |
[root@dm06 ~]# ll /dm8/data/DAMENG/dmmonitor.ini
MON_DW_CONFIRM = 1 #0是监控模式,1是确认模式
监视器类型 | 区别 |
---|---|
监控模式 | 一个数据守护系统中,最多允许同时启动10个监视器,所有监视器都可以接收守护进程消息,获取守护系统状态,也可以执行各种监控命令。所有监视器都可以发起Switchover等命令,但守护进程一次只能接收一个监视器的命令,在一个监视器命令执行完成之前,守护进程收到其它监视器发起的请求,会直接报错返回。 |
确认模式 | 确认模式除了具备监控模式所有功能外,还具有状态确认和自动接管两个功能。故障自动切换模式的数据守护系统,必须部署一个确认监视器,否则在出现数据库故障时,会导致数据库服务中断。 **状态确认:**主库守护进程检测到备库故障时,需要向确认监视器求证,确认备库是真的故障了,在启动故障处理流程将归档失效,避免引发脑裂。 **自动接管:**故障自动切换模式下,确认监视器检测到主库故障后,根据收到的主备库LSN、归档状态、MAL链路状态等信息,确定一个接管备库,并将其切换为主库。确认监视器启动自动接管流程的主要场景有三种,任何一种都会导致备库自动接管: 1.主库数据实例异常终止,主库守护进程正常。 2.主库硬件故障、或者数据库实例和守护进程同时故障。 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控制文件到一致状态
#=============================================================================================#
与数据守护相关的配置文件 | 文件的存放路径 |
---|---|
数据库配置文件 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配置项指定 |
常用配置项 | 配置含义 |
---|---|
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日志归档。 |
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
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 #实时归档目标实例名
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
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
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
⚠️搭建前先检查防火墙和Selinux.
检查防火墙:
[root@dm03 ~]# systemctl status firewalld.service
检查Selinux:
[root@dm03 ~]# getenforce
Disabled
类别 | 区别1 | 区别2 |
---|---|---|
手动切换 | 守护进程dmwatcher.ini DW_MODE = MANUAL |
监视器dmmonitor.ini MON_DW_CONFIRM = 0 |
自动切换 | 守护进程dmwatcher.ini DW_MODE = AUTO |
MON_DW_CONFIRM = 1 |
主库操作: 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启动主、备实例-->启动主、备守护进程-->启动监视器 停止服务流程:停止监视器-->停止主、备守护进程-->停止主、备实例
实例名 | 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 |
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
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"
最好单独找一个服务器配置监视器,如果条件不允许的话配置在备库上面。
在第三台服务器上配置监视器,需要安装数据库不用初始化即可。
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:不可接管】 |
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
1.主库、备库都修改
[dmdba@dm01 /dm8/bin]$ grep DW_MODE /dm8/data/DAMENG/dmwatcher.ini
DW_MODE = AUTO #故障手动切换模式(AUTO自动)
[dmdba@dm01 /dm8/bin]$ grep -i 'MON_DW_CONFIRM' dmmonitor_manual.ini
MON_DW_CONFIRM = 1 #0为非确认,1为确认
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
1.主库模拟 [dmdba@do03 /dm8/bin]$ ./disql disql V8 用户名: 密码: 服务器[LOCALHOST:5236]:处于主库打开状态 登录使用时间 : 31.289(ms) SQL> shutdown abort; 操作已执行 已用时间: 11.640(毫秒). 执行号:0.
2.查看监视器
1.关闭主库和守护进程 [dmdba@dm01 /dm8/bin]$ ./DmWatcherServiceWatcher stop && ./DmServiceDW1_01 stop Stopping DmWatcherServiceWatcher: [ OK ] Stopping DmServiceDW1_01: [ OK ]
2.查看监视器
⚠️注意用户必须是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)完成
文章
阅读量
获赞