暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

DM8主备搭建及容灾测试

原创 BinGoSTop 2025-05-19
188

一 简介

DM 数据守护(DM Data Watch)的实现原理非常简单:将主库(生产库)产生的 Redo 日志传输到备库,备库接收并重新应用 Redo 日志,从而实现备库与主库的数据同步。DM 数据守护的核心思想是监控数据库状态,获取主、备库数据同步情况,为 Redo 日志传输与重演过程中出现的各种异常情况提供一系列的解决方案。

DM 数据守护系统结构参考图。主要由主库、备库、Redo 日志、Redo 日志传输、Redo 日志重演、守护进程(dmwatcher)、监视器(dmmonitor)组成。

数据守护系统结构图

主库

Primary 模式,提供完整数据库服务的实例,一般来说主库是用来直接支撑应用系统的生产库。

备库

Standby 模式,提供只读数据库服务的实例。备库除了用于容灾,还可以提供备份、查询等只读功能,并且备库还支持临时表的 Insert/Delete/Update 操作。

备库支持临时表修改主要基于两个因素:1.临时表数据的修改不会产生 Redo 日志,主库对临时表的修改无法同步到备库;2.可以提供更大灵活性,适应更多应用场景。

根据数据同步情况,备库又可以分为可切换备库和不可切换备库。可切换备库是指,主备库之间数据完全同步,主库发生故障、备库切换为主库后,不会造成任何数据丢失的备库。

Redo 日志

Redo 日志记录物理数据页内容变动情况,是数据库十分重要的一个功能,在数据库系统故障(比如服务器掉电)重启时,利用 Redo 日志可以把数据恢复到故障前的状态。

Redo 日志也是数据守护的实现基础,数据库中 Insert、Delete、Update 等 DML 操作以及 Create TABLE 等 DDL 操作最终都会体现为对某一个或者多个物理数据页的修改,因此备库通过重做 Redo 日志可以与主库数据保持一致。

Redo 日志传输

主备库之间的 Redo 日志传输,以日志包 RLOG_PKG 为单位,主库通过 MAL 系统发送 Redo 日志到备库。各种不同数据守护类型的区别,就在于主库日志包 RLOG_PKG 的发送时机,以及备库收到 Redo 日志后的处理策略。

Redo 日志重演

Redo 日志重演的过程,就是备库收到主库发送的 Redo 日志后,在物理数据页上,重新修改数据的过程。Redo 日志重演由专门的 Redo 日志重演服务完成,重演服务严格按照 Redo 日志产生的先后顺序,解析 Redo 日志、修改相应的物理数据页,并且重演过程中备库会生成自身的 Redo 日志写入联机日志文件。

守护进程

守护进程(dmwatcher)是数据守护系统的核心工具,监控数据库实例的运行状态和主备库数据同步情况,在出现故障时启动各种处理预案。守护进程是各种消息的中转站,接收数据库实例、其他守护进程、以及监视器发送的各种消息;同时,守护进程也会将收到的数据库实例消息转发给其他守护进程和监视器。守护进程必须和被守护的数据库实例部署在同一台机器上。

监视器

监视器(dmmonitor)用来监控守护系统内守护进程、数据库实例信息,执行用户输入命令、监控实例故障、实现自动切换等。监视器一般配置在数据库实例和守护进程以外的机器上。

二 归档模式

归档类型比较

实时归档

与本地归档写入保存在磁盘中的日志文件不同,实时归档(Realtime)将主库产生的 Redo 日志通过 MAL 系统传递到备库,实时归档是实时主备和 MPP 主备的实现基础。实时归档只在主库生效,一个主库可以配置 1~8 个实时备库。

实时归档的执行流程是,主库在 Redo 日志(RLOG_PKG)写入联机日志文件前,将 Redo 日志发送到备库,备库收到 Redo 日志(RLOG_PKG)后标记为 KEEP_RLOG_PKG,将原 KEEP_RLOG_PKG 加入日志重演任务系统,并马上响应主库,不需要等待 Redo 日志重演结束后再响应主库。主库收到备库的响应消息,确认备库已经收到 Redo 日志后,再将 Redo 日志写入联机日志文件中。

另外,实时归档也可以支持读写分离集群,实时归档也分为两种模式:事务一致模式和高性能模式,可以通过 dmarch.ini 中的 ARCH_WAIT_APPLY 或 WAIT_APPLY 配置项来设置实时归档的模式。这两种模式的具体含义和下一小节 2.2.11.5 中的说明完全相同,区别仅在于配置为实时归档时,dmarch.ini 中的 ARCH_WAIT_APPLY 配置项默认值为 0,即采用高性能模式

即时归档

即时归档(Timely)在主库将 Redo 日志写入联机日志文件后,通过 MAL 系统将 Redo 日志发送到备库。即时归档与实时归档的主要区别是 Redo 日志的发送时机不同。一个主库可以配置 1~8 个即时备库。

根据备库重演 Redo 日志和响应主库时机的不同,即时归档分为两种模式:事务一致模式和高性能模式。即时归档模式可以通过 dmarch.ini 中的 ARCH_WAIT_APPLY 或 WAIT_APPLY 配置项来设置。其中,ARCH_WAIT_APPLY 配置项默认值为 1,表示事务一致模式。

  • 事务一致模式 主库事务提交触发 Redo 日志刷盘和即时归档,备库收到主库发送的 Redo 日志,并重演完成后再响应主库。主库收到备库响应消息后,再响应用户的提交请求。事务一致模式下,同一个事务的 SELECT 语句无论是在主库执行,还是在备库执行,查询结果都满足 READ
    COMMIT 隔离级要求。
  • 高性能模式 与实时归档一样,备库收到主库发送的 Redo 日志后,马上响应主库,再启动日志重演。高性能模式下,备库与主库的数据同步存在一定延时(一般情况下延迟时间非常短暂,用户几乎感觉不到),不能严格保证事务一致性。

事务一致模式下,主备库之间严格维护事务一致性,但主库要等备库 Redo 日志重演完成后,再响应用户的提交请求,事务提交时间会变长,存在一定的性能损失。高性能模式则通过牺牲事务一致性获得更高的性能和提升系统的吞吐量。用户应该根据实际情况,选择合适的即时归档模式。

异步归档

异步归档(Async)由主、备库上配置的定时器触发,根据异步备库的 KEEP LSN 信息,扫描本地归档目录获取 Redo 日志,并通过 MAL 系统将 Redo 日志发送到异步备库。异步备库的 Redo 日志重演过程与实时归档等其他类型的归档完全一致。

每个 Primary 或 Standby 模式的数据库最多可以配置 8 个异步备库,Normal 模式下配置的异步备库会自动失效。异步备库可以级联配置,异步备库本身也可以作为源库配置异步备库

同步归档

同步归档(Sync)在主库归档日志刷盘后,通过 MAL 系统将 Redo 日志发送到备库。同步备库的 Redo 日志重演过程与实时归档等其他类型的归档完全一致。一个主库可以配置 1~8 个同步备库。

同步归档的执行流程是,主库在归档日志刷盘后,将 Redo 日志发送到备库,备库收到 Redo 日志(RLOG_PKG)后将其加入日志重演任务系统,并马上响应主库,不需要等待 Redo 日志重演结束后再响应主库。

OGUID

数据守护唯一标识码,配置数据守护时,需要由用户指定 OGUID 值。其中数据库的 OGUID 在 MOUNT 状态下由系统过程 SP_SET_OGUID 设置,守护进程和监视器的 OGUID 值在配置文件中设定。

同一守护进程组中的所有数据库、守护进程和监视器,都必须配置相同的 OGUID 值,取值范围为 0~2147483647。

OGUID 的查询方式:

SELECT OGUID FROM V$INSTANCE;

1 环境准备

删库(原命令行安装的单实例)

su - dmdba

cd /home/dmdba/dmdbms/bin

./uninstall.sh -i

使用root执行

su - root

/home/dmdba/dmdbms/root_uninstaller.sh

rm -rf /home/dmdba/dmdbms

rm -rf /dmdata/data/*

2.2 VMware 克隆2份。配置IP

主库:

IP1:192.168.157.11

IP2:10.10.10.1

port1:5236

port2:5336

port3:5436

port4:5536

备库:

IP1:192.168.157.11

IP2:10.10.10.1

port1:5236

port2:5336

port3:5436

port4:5536

监视器:

IP1:192.168.157.11

IP2:10.10.10.1

port1:5236

port2:5336

port3:5436

port4:5536

DM数据库搭建

初始化实例

cd /home/dmdba/dmdbms/bin

./dminit path=/dmdata/data extent_size=32 page_size=32 log_size=2048 charset=1 case_sensitive=1 SYSDBA_PWD=Sysdba@123 SYSAUDITOR_PWD=Sysauditor@123 BLANK_PAD_MODE=1 INSTANCE_NAME=DM1

./dminit path=/dmdata/data extent_size=32 page_size=32 log_size=2048 charset=1 case_sensitive=1 SYSDBA_PWD=Sysdba@123 SYSAUDITOR_PWD=Sysauditor@123 BLANK_PAD_MODE=1 INSTANCE_NAME=DM2

dminit path=/dmdata/data extent_size=32 page_size=32 log_size=2048 charset=1 case_sensitive=1 SYSDBA_PWD=Sysdba@123 SYSAUDITOR_PWD=Sysauditor@123 BLANK_PAD_MODE=1 INSTANCE_NAME=DM3

###命令行运行前台启动 ./dmserver /dmdata/data/DAMENG/dm.ini 尝试是否能启动成功,然后用exit退出即可,保持数据库关闭状态。

log参数修改

sqllog.ini

FILE_PATH = /dmdata/sqllog

FILE_NUM = 20/50 #默认5,文件个数依磁盘大小

SWITCH_LIMIT = 128/256 # 建议128m

如果内存>=32G

1.在sqllog.ini文件BUF_TOTAL_SIZE由10240修改为1024000

2.在sqllog.ini文件BUF_SIZE由1024修改为10240

3.在sqllog.ini文件BUF_KEEP_CNT由6修改为20

5 数据主备同步

5.1主库脱机备份

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

5.2 备份文件传输至备库

scp -r /dmdata/dmbak/BACKUP_FILE_01/ dmdba@192.168.157.16:/dmdata/dmbak/BACKUP_FILE_01/

5.3 执行脱机数据库还原与恢复

# 还原

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

# 恢复

dmrman CTLSTMT="RECOVER DATABASE '/dmdata/DAMENG/dm.ini' FROM BACKUPSET '/dmdata/dmbak/BACKUP_FILE_01'"

# 更新 DB_MAGIC

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

配置主库

dm.ini

ALTER_MODE_STATUS = 0

ENABLE_OFFLINE_TS = 2

MAL_INI = 1

ARCH_INI = 1

SVR_LOG = 1

DW_ARCH_SPACE_CHECK = 1

DW_ARCH_HANG_CHECK = 1

REDOS_BUF_SIZE = 10240

REDOS_BUF_NUM= 0

REDOS_MAX_DELAY = 600

REDOS_PARALLEL_NUM = 32

grep -E "DW_ARCH_SPACE_CHECK|DW_ARCH_HANG_CHECK|REDOS_BUF_SIZE|REDOS_BUF_NUM|REDOS_MAX_DELAY|REDOS_PARALLEL_NUM|ALTER_MODE_STATUS|ENABLE_OFFLINE_TS|MAL_INI|ARCH_INI|SVR_LOG" dm.ini

dmmal.ini

配置 MAL 系统,各主备库的 dmmal.ini 配置必须完全一致,MAL_HOST 使用内部网络 IP,MAL_PORT 与 dm.ini 中 PORT_NUM 使用不同的端口值,MAL_DW_PORT 是各实例对应的守护进程之间,以及守护进程和监视器之间的通信端口,配置如下:

/dmdata/data/DAMENG

[dmdba@bingo1 DAMENG]$ vim dmmal.ini

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

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

[MAL_INST1]

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

MAL_HOST = 10.10.10.2 #MAL 系统监听 TCP 连接的 IP 地址(心跳网)

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

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

MAL_HOST = 10.10.10.3

MAL_PORT = 5336

MAL_INST_HOST = 192.168.157.16

MAL_INST_PORT = 5236

MAL_DW_PORT = 5436

MAL_INST_DW_PORT = 5536

dmarch.ini

ARCH_WAIT_APPLY =0

[ARCHIVE_REALTIME1]

ARCH_TYPE = REALTIME #实时归档类型

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

[ARCHIVE_LOCAL]

ARCH_TYPE = LOCAL #本地归档类型

ARCH_DEST = /dmdata/arch/ #本地归档存放路径

ARCH_FILE_SIZE = 2048 #单个归档大小,单位 MB 512 / 1024

ARCH_SPACE_LIMIT = 102400 #归档上限,单位 MB

dmwatcher.ini

[dmdba@bingo1 DAMENG]$ vim dmarch.ini

[GRP1]

DW_TYPE = GLOBAL #全局守护类型

DW_MODE = AUTO #MANUAL:故障手切 AUTO:故障自切

DW_ERROR_TIME = 60 #远程守护进程故障认定时间

INST_ERROR_TIME = 60 #本地实例故障认定时间

INST_RECOVER_TIME = 60 #主库守护进程启动恢复的间隔时间

INST_OGUID = 150906 #守护系统唯一 OGUID 值

INST_INI = /dmdata/data/DAMENG/dm.ini

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

INST_STARTUP_CMD = /home/dmdba/dmdbms/bin/DmServiceDM1 restart

INST_SERVICE_IP_CHECK=1

RLOG_SEND_THRESHOLD =100

RLOG_APPLY_THRESHOLD =100

DW_RECONNECT=2

DW_SUSPEND_CHECK=1

配置备库(对比主库需要修改)

dm.ini

INSTANCE_NAME = DM2

7.2 dmarch.ini

ARCH_DEST = DM1

7.3 dmwatcher.ini

/home/dmdba/dmdbms/bin/DmServiceDM2 restart

设置oguid

主库、备库启动到mount,必须前台启动

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

8.2 主库新会话disql登录

[dmdba@bingo1 ~]$ disql sysdba/'"Sysdba@123"'

服务器[LOCALHOST:5236]:处于普通配置状态

登录使用时间 : 21.147(ms)

disql V8

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

DMSQL 过程已成功完成

已用时间: 62.379(毫秒). 执行号:1.

SQL> sp_set_oguid(150906);

DMSQL 过程已成功完成

已用时间: 37.692(毫秒). 执行号:2.

SQL> alter database primary;

操作已执行

已用时间: 37.199(毫秒). 执行号:0.

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

DMSQL 过程已成功完成

已用时间: 30.605(毫秒). 执行号:3.

8.3 备库新会话disql登录

[dmdba@bingo1 ~]$ disql sysdba/'"Sysdba@123"'

SP_SET_PARA_VALUE(1, 'ALTER_MODE_STATUS', 1);

sp_set_oguid(150906);

alter database standby;

SP_SET_PARA_VALUE(1, 'ALTER_MODE_STATUS', 0);

监视器安装

9.1 准备工作

./DMInstall.bin -i

dminit path=/dmdata/data extent_size=32 page_size=32 log_size=2048 charset=1 case_sensitive=1 SYSDBA_PWD=Sysdba@123 SYSAUDITOR_PWD=Sysauditor@123 BLANK_PAD_MODE=1 INSTANCE_NAME=DM3

9.2 配置dmmonitor.ini 文件(确认监视器模式)

由于主库和实时备库的守护进程配置为自动切换模式,因此这里必须配置确认监视器。和普通监视器相比,确认监视器除了相同的命令支持外,在主库发生故障时,能够自动通知实时备库接管为新的主库,具有自动故障处理的功能。

[dmdba@bingo3 DAMENG]$ cat dmmonitor.ini

MON_DW_CONFIRM = 1 ##确认监视器模式

MON_LOG_PATH = /dmdata/log ##监视器日志文件存放路径

MON_LOG_INTERVAL = 60 ##每隔60s定时记录系统信息到日志文件

MON_LOG_FILE_SIZE = 32 ##每个日志文件最大32M

MON_LOG_SPACE_LIMIT = o

[GRP1]

MON_INST_OGUID = 150906 ##组GRP1的唯一OGUID值

##以下配置为监视器到组GRP1的守护进程的连接信息,以“IP:PORT”的形式配置

##IP对应dmmal.ini中的MAL_HOST,PORT对应dmmal.ini中的 MAL_DW_PORT

MON_DW_IP = 10.10.10.2:5436

MON_DW_IP = 10.10.10.3:5436

复制一份监视器配置,MON_DW_CONFIRM = 0,非确认模式,用于监控。

cp dmmonitor.ini dmmonitor_0.ini

注册服务

主库:(root)

cd /home/dmdba/dmdbms/script/root/

./dm_service_installer.sh -t dmserver -m mount -dm_ini /dmdata/data/DAMENG/dm.ini -p DM1

./dm_service_installer.sh -t dmwatcher -p DMWATCHER1 -dm_ini /dmdata/data/DAMENG/dm.ini -watcher_ini /dmdata/data/DAMENG/dmwatcher.ini

备库:(root)

cd /home/dmdba/dmdbms/script/root/

./dm_service_installer.sh -t dmserver -m mount -dm_ini /dmdata/data/DAMENG/dm.ini -p DM2

./dm_service_installer.sh -t dmwatcher -p DMWATCHER2 -dm_ini /dmdata/data/DAMENG/dm.ini -watcher_ini /dmdata/data/DAMENG/dmwatcher.ini

监视器:(root)

cd /home/dmdba/dmdbms/script/root/

./dm_service_installer.sh -t dmmonitor -p DMMONITOR -monitor_ini /dmdata/data/DAMENG/dmmonitor.ini

cd /home/dmdba/dmdbms/bin

启停服务

cd /home/dmdba/dmdbms/bin

启停顺序

启动主备的操作顺序(主备主备)

(1) 启主实例dmserver ./DmServiceDM1 start

(2) 启备实例dmserver ./DmServiceDM2 start

(3) 启主守护进程 dmwatcher ./DmWatcherServiceDMWATCHER1 start

(4) 启备守护进程 dmwatcher ./DmWatcherServiceDMWATCHER2 start

(5) 启监视器DmMonitorServiceDMMONITOR start

停止主备的操作顺序(备主主备)

(1) 关监视器:DmMonitorServiceDMMONITOR stop

(2) 停备机dmwatcher ./DmWatcherServiceDMWATCHER2 stop

(3) 停主机dmwatcher ./DmWatcherServiceDMWATCHER1stop

(4) 停主机dmserver ./DmServiceDM1 stop

(5) 停备机dmserver ./DmServiceDM2 stop

守护进程状态

守护进程包括以下一些状态:

  • Startup 守护进程启动状态,需要根据远程守护进程发送的状态信息,结合本地数据库的初始模式、状态和数据同步情况,确定本地数据库的启动模式和状态后,进入 Open 状态。
  • Open 守护进程正常工作,监控数据库,并定时发送数据库的状态信息,接收其他守护进程发送的信息,接收监视器发送的用户请求。
  • Shutdown 守护进程停止监控数据库状态,不再提供主备库切换、主备库故障处理和备库故障恢复等功能。
  • Switchover 主备库正常情况下,手动主备切换过程中设置为 Switchover 状态。
  • Failover 远程备库故障后,本地主库执行故障处理时,守护进程设置为 Failover 状态。
  • Recovery 故障恢复同步历史数据过程中设置为 Recovery 状态。
  • Confirm 通过监视器确认远程主(备)库是否活动的过程中,守护进程设置为 Confirm 状态。
  • Takeover 主库确认故障后,备库手工接管或监视器通知自动接管过程中,守护进程设置为 Takeover 状态。
  • Open force 借助监视器命令强制 Open 主库或备库实例时,守护进程设置为 Open force 状态。
  • Error 超过一段时间(DW_ERROR_TIME)没有接收到远程守护进程消息,本地守护进程或监视器认定远程守护进程故障,修改远程守护进程为 Error 状态。
  • Login check 监视器执行登录命令时,守护进程所处的状态。
  • Mppctl update 修改主库 MPP 控制文件(dmmpp.ctl)时,守护进程所处的状态,只在 MPP 主备系统出现。
  • Change arch 监视器执行 set arch invalid 命令时守护进程所处的状态。
  • Standby check 主库守护进程监控到备库异常后,切换到此状态下通知主库修改此备库归档无效。
  • Clear send info 清理主库上的归档发送信息时,守护进程所处的状态。
  • Clear rapply stat 清理备库上的重演信息时,守护进程所处的状态。
  • Unify ep 统一 DMDSC 集群各节点实例状态,或者各实例状态已经一致时,守护进程在 Startup 或 Open 状态下通知实例执行相关操作,都进入 Unify_ep 状态执行。
  • Css process 监视器发起的对 DMDSC 集群的部分命令,比如启动、关闭、强杀 DMDSC 库,或者打开、关闭节点实例的自动拉起功能等命令,需要借助 dmcss 执行时,守护进程会切换到此状态下。

守护进程所有状态变换和它监控的数据库的状态变换都会生成相应的 LOG 信息,写入到../log 目录中以’dm_dmwatcher_实例名_当前年月.log’方式命名的日志文件中。用户可以通过查看日志文件,分析数据库和守护进程的运行状态、监控故障处理过程。

监视器命令

命令

含义

系统全局命令

help

显示帮助信息

exit

退出监视器

exit all

退出当前多实例监视器的所有节点,仅多实例监视器支持

show version

显示监视器自身版本信息

show global info

显示所有组的全局信息

show database [group_name.]db_name

显示指定库的详细信息

show [group_name]

显示指定组的实例信息,如果未指定组名,则显示所有组信息

show i[nterval] n

每隔n秒自动显示所有组的实例信息

q

取消自动显示

list [[group_name.]db_name]

列出指定组的库对应的守护进程配置信息,如果都未指定,则列出所有守护进程配置信息

show open info [group_name.]db_name

显示指定库的Open历史信息

show arch send info [group_name.]db_name

查看源库到指定组的指定库的归档同步信息(包含恢复间隔信息)

show apply stat [group_name.]db_name

查看指定组的指定库的日志重演信息

show monitor [group_name[.]] [db_name]

列出连接到指定守护进程的所有监视器信息

tip

查看系统当前运行状态

login[/@service_name]

登录监视器。若指定了/@service_name,则会使用wallet方式登录监视器;若没有指定,则为默认的交互式登录

login with key login_string

通过Key认证方式登录监视器

logout

退出登录

get takeover time [group_name]

获取备库开始自动接管需要延迟等待的时间

show state

显示当前监视器所在监视器配置组的所有监视器的状态信息

以组为单位执行的命令

startup dmwatcher [group_name]

启动指定组的守护进程监控功能

stop dmwatcher [group_name]

关闭指定组的守护进程监控功能

startup group [group_name]

启动指定组的库

stop group [group_name]

关闭指定组的库

kill group [group_name]

强制杀掉指定组中的活动库

choose switchover [group_name]

选择可切换为Primary库的备库列表

choose takeover [group_name]

选择可接管故障Primary库的备库列表

choose takeover force [group_name]

选择可强制接管故障Primary库的备库列表

set group [group_name] auto restart on

打开指定组中所有节点的自动拉起功能

set group [group_name] auto restart off

关闭指定组中所有节点的自动拉起功能

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

set group [group_name] recover time time_value

修改指定组中所有备库的恢复间隔为time_value指定的整数值(time_value取值范围:3~86400,单位为秒)(只修改守护进程内存值),如果未指定组名,则通知所有组执行

clear group [group_name] arch send info

清理指定组中源库到所有备库(包括异步备库)的最近N次归档发送信息(通知源库执行),没有指定组名则通知所有组执行,其中N值取源库dm.ini中配置的RLOG_SEND_APPLY_MON值和实际归档发送次数中的较小值。

clear group [group_name] apply stat

清理指定组中所有备库的最近N次重演信息(通知组中所有备库执行),没有指定组名则通知所有组执行,其中N值取备库dm.ini中配置的RLOG_SEND_APPLY_MON值和实际重演次数中的较小值。

以库为单位执行的命令

check recover [group_name.]db_name

检查指定组的指定库是否满足自动恢复条件

check open [group_name.]db_name

检查指定组的指定库是否满足自动Open条件

open database [group_name.] db_name

强制Open指定组的指定库

switchover [group_name[.]] [db_name]

切换指定组的指定库为Primary库

takeover [group_name[.]] [db_name]

使用指定组的指定库接管故障Primary库

takeover force [group_name[.]] [db_name]

使用指定组的指定库强制接管故障Primary库

set database [group_name.]db_name recover time time_value

修改指定组的指定库的恢复间隔为time_value指定的整数值(time_value取值范围:3~86400,单位为秒)(只修改守护进程内存值)

detach database [group_name.]db_name

将指定的备库分离出守护进程组

attach database [group_name.]db_name

将分离出去的备库重新加回到守护进程组

startup dmwatcher database [group_name.]db_name

打开指定库的守护进程监控功能

stop dmwatcher database[group_name.]db_name

关闭指定库的守护进程监控功能

startup database [group_name.]db_name

启动指定组的指定库

stop database [group_name.]db_name

关闭指定组的指定库

kill database [group_name.]db_name

强杀指定组的指定库

clear database [group_name.]db_name arch send info

清理指定组中主库到指定备库实例的最近N次归档发送信息(通知主库执行),其中N值取主库dm.ini中配置的RLOG_SEND_APPLY_MON值和实际归档发送次数中的较小值。

clear database [group_name.]db_name apply stat

清理指定备库的最近N次重演信息(通知备库执行),其中N值取备库dm.ini中配置的RLOG_SEND_APPLY_MON值和实际重演次数中的较小值。

set database [group_name.]db_name until time time_value

设置指定组的指定异步备库重演到的时间点为time_value指定的时间点

cancel database [group_name.]db_name until time

取消指定组的指定异步备库重演到的时间点

只允许在MPP主备环境下使用的命令

show mpp

显示MPP节点信息

startup dmwatcher all

启动所有组的守护进程监控功能

stop dmwatcher all

关闭所有组的守护进程监控功能

startup group all

启动所有组的库

stop group all

关闭所有组的库

kill group all

强制杀掉所有组中的活动库

check mppctl

检查MPP控制文件是否处于一致状态

recover mppctl

恢复MPP控制文件到一致状态

监视器手动切主备

dmmonitor /dmdata/data/DAMENG/dmmonitor_0.ini

将指定组中的指定备库切换为新的主库,将当前的主库切换为新的备库,此命令要求执行切换的主备库都是正常 Open 状态。执行此命令需要先登录监视器。

只有一组的情况下,可以不指定 group_name,组中只有一个备库的情况下,可以不指定 db_name,如果 group_name 和 db_name 同时指定,则需要用“.”符合分隔。

可以先执行 choose switchover 命令选出组中能够切换为主库的备库列表,选择其中一个备库切换为主库即可。可以指定 choose switchover 命令执行结果中备库对应的序号来选择备库。例如 switchover 1 表示将 choose switchover 命令执行结果中的第一个备库切换为主库。

14集群测试

14.1主库服务器关机

主库服务器直接关机,查看主备环境变化。多久发现异常?多久备库变为主库?备库变成主库有哪些过程?源主库起来了自动加入集群吗?数据会自动同步吗?

在监视器服务器,进入monitor 进行监控:

dmmonitor /dmdata/data/DAMENG/dmmonitor_0.ini

14.2大量数据插入,看备库延迟

查看日志应用情况

select TASK_NUM,TASK_MEM_USED/1024/1024 from v$rapply_sys;

「喜欢这篇文章,您的关注和赞赏是给作者最好的鼓励」
关注作者
【版权声明】本文为墨天轮用户原创内容,转载时必须标注文章的来源(墨天轮),文章链接,文章作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论