达梦数据库教程(12)守护集群部署与管理

达梦数据库教程(12)守护集群部署与管理

一、达梦数据库守护集群介绍

达梦守护集群类似 MySQL 中的主备架构,实现原理也基本一致,主库将 REDO 日志传输到备库,备库接收并重新应用,从而实现备库与主库的数据同步。另外守护集群还提供了守护进程 (dmwatcher)和监视器 (dmmonitor) 用于实现自动化高可用。整个架构中各角色功能如下:

1、主库

工作在 Primary 模式,提供完整的数据库读写服务

2、备库

工作在 Standby 模式,提供只读服务。备库除了用于容灾,还可以提供备份、查询等只读功能,并且备库还支持临时表的DML操作,临时表数据的修改不会产生 REDO 日志,主库对临时表的修改也无法同步到备库

3、REDO 日志

数据守护的实现基础,对数据库中的数据进行的任何修改操作最终都会体现为对某一个或者多个物理数据页的修改,REDO 日志则是记录了物理数据页内容的变动情况,因此备库才可以通过 REDO 日志重演的方式与主库数据保持一致

4、守护进程

守护进程 (dmwatcher) 是数据守护系统的核心组件,必须和数据库实例部署在同一台机器上。它会监控数据库实例的运行状态、主备库数据同步情况以及监视器发送的各种消息,在出现故障时进行一系列的自动处理

5、监视器

监视器 (dmmonitor) 用来监控守护进程和数据库实例状态,如果发现数据库实例故障,可以像守护进程发起角色切换等信号,一般配置在非数据库节点上,实现数据库高可用


二、达梦数据库守护集群部署

1、主节点部分

· 初始化主节点(非新数据库实例可跳过)

dminit PATH=/data/dmdbms/ \
INSTANCE_NAME=YWPIE_MASTER \ 
DB_NAME=YWPIE \
PAGE_SIZE=32 \
EXTENT_SIZE=32 \
LOG_SIZE=2048 \
SYSDBA_PWD=Abc1234678 \
SYSAUDITOR_PWD=Abc1234678


·  启动数据库(前台方式)

bin/dmserver /data/dmdbms/YWPIE/dm.ini


·  开启归档日志

disql SYSDBA/Abc1234678.
SQL> ALTER DATABASE MOUNT;
SQL> ALTER DATABASE ARCHIVELOG;
SQL> ALTER DATABASE ADD ARCHIVELOG 'DEST=/data/dmdbms/arch, TYPE=LOCAL, FILE_SIZE=1024, SPACE_LIMIT=51200';
SQL> ALTER DATABASE OPEN;


·  数据备份

截止2025年8月,DM8数据守护集群版本为 V4.0 。该版本下无论主备节点是否存在数据,在进行集群部署时都必须进行一次备份还原的方式确保主备节点数据一致。这里需要注意不能采用拷贝数据文件的方式来作为备份手段,一是因为数据库实例在初始化后会生成一个数据库魔数(DB_MAGIC),数据库每经过一次还原恢复操作,DB_MAGIC 就会产生变化。集群需要通过魔数区分同一个数据守护环境中不同的实例。主备节点在传送日志时也会先判断节点间的魔数是否一样。二是由于 dminit 初始化数据库时会生成随机密钥加密,备库无法解析采用主库密钥加密的数据

SQL> BACKUP DATABASE BACKUPSET '/data/dmdbms/bak/FULL_BACKUP';


· 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);            #不允许手工方式修改实例模式/状态/OGUID
SQL> SP_SET_PARA_VALUE (2,'ENABLE_OFFLINE_TS',2);            #不允许备库OFFLINE表空间
SQL> SP_SET_PARA_VALUE (2,'MAL_INI',1);                      #打开MAL系统
SQL> SP_SET_PARA_VALUE (2,'RLOG_SEND_APPLY_MON',64);         #打开归档配置


· 关闭前台实例服务,确保正常停库


· dmarch.ini 配置

该配置文件用于进行本地归档和实时归档相关配置。除了配置本地归档之外,其他归档配置项中的 ARCH_DEST 均表示“当实例是 Primary 模式时,需要同步归档数据的目标实例名”。如当前集群中有实例 TEST_MASTER 为主库,有 TEST_SLAVE为实时备库,那么 ARCH_DEST 配置就应为 TEST_SLAVE

vi /data/dmdbms/PUGANG/dmarch.ini
ARCH_WAIT_APPLY      = 1           

[ARCHIVE_LOCAL1]
ARCH_TYPE            = LOCAL              #本地归档
ARCH_DEST            = /data/dmdbms/arch        
ARCH_FILE_SIZE       = 1024               #单个归档文件最大值,单位MB
ARCH_SPACE_LIMIT     = 51200              #归档文件总共可占用的空间,0表示不限制
ARCH_FLUSH_BUF_SIZE  = 2         
ARCH_HANG_FLAG       = 1        

[ARCHIVE_REALTIME1]
ARCH_TYPE                = REALTIME     #配置归档类型为实时归档
ARCH_DEST                = YWPIE_S1    #配置归档目标实例名,这里填写为备机


· dmmal.ini 配置

#该配置文件主备库配置完全一致
vi /data/dmdbms/PUGANG/dmmal.ini

MAL_CHECK_INTERVAL         = 10
MAL_CONN_FAIL_INTERVAL     = 10
MAL_TEMP_PATH              = /data/dmdbms/malpath/
MAL_BUF_SIZE               = 512
MAL_SYS_BUF_SIZE           = 2048
MAL_COMPRESS_LEVEL         = 0

[MAL_INST1]                                       #每个实例信息
MAL_INST_NAME            = YWPIE_MASTER           #实例名,和dm.ini中的INSTANCE_NAME一致
MAL_HOST                 = 10.144.13.32           #MAL系统监听TCP连接的IP地址
MAL_PORT                 = 5336                   #MAL系统监听TCP连接的端口
MAL_INST_HOST            = 10.144.13.32           #实例对外服务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            = YWPIE_S1
MAL_HOST                 = 10.144.13.33
MAL_PORT                 = 5336
MAL_INST_HOST            = 10.144.13.33
MAL_INST_PORT            = 5236
MAL_DW_PORT              = 5437
MAL_INST_DW_PORT         = 5537


· dmwatcher.ini配置

修改 dmwatcher.ini 配置守护进程,配置为全局守护类型,使用自动切换模式

#该配置文件主备库配置完全一致
vi /dmdbms/data/DAMENG/dmwatcher.ini

[GRP1]                              # 和备库保持一致
DW_TYPE = GLOBAL      # 全局守护类型
DW_MODE = AUTO       # 自动切换模式
DW_ERROR_TIME = 20      # 远程守护进程故障认定时间
INST_RECOVER_TIME = 20     # 主库守护进程启动恢复的间隔时间
INST_ERROR_TIME = 60     # 本地实例故障认定时间
INST_OGUID = 45331     # 守护系统唯一标识码,即OGUID
INST_INI = /data/dmdbms/PUGANG/dm.ini   ##dm.ini配置文件路径
INST_AUTO_RESTART = 1     # 实例是否自动重启
INST_STARTUP_CMD = /data/dmdbms/bin/dmserver #自启动命令路径
RLOG_SEND_THRESHOLD = 0    #指定主库发送日志到备库的时间阈值,默认关闭
RLOG_APPLY_THRESHOLD = 0    #指定备库重演日志的时间阈值,默认关闭


· 注册服务(root下运行)

/data/dmdbms/script/root/dm_service_installer.sh -t dmserver -p YWPIE_MASTER -dm_ini /data/dmdbms/YWPIE/dm.ini -m mount
创建服务(DmServiceYWPIE_MASTER)完成
/data/dmdbms/script/root/dm_service_installer.sh -t dmwatcher -p WATCHER -watcher_ini /data/dmdbms/YWPIE/dmwatcher.ini
创建服务(DmWatcherServiceWATCHER)完成

若要删除自启,可利用如下方式

/data/dmdbms/script/root/dm_service_uninstaller.sh -n DmServiceYWPIE_MASTER
/data/dmdbms/script/root/dm_service_uninstaller.sh -n DmWatcherServiceWATCHER


2、备节点部分

· 数据库实例初始化

dminit PATH=/data/dmdbms/ INSTANCE_NAME=YWPIE_S1 DB_NAME=YWPIE \
PAGE_SIZE=32 EXTENT_SIZE=32 LOG_SIZE=2048 \
SYSDBA_PWD=Abc1234678 SYSAUDITOR_PWD=Abc1234678


· 还原备份数据

dmrman CTLSTMT="RESTORE DATABASE '/data/dmdbms/YWPIE/dm.ini' FROM BACKUPSET '/data/dmdbms/bak/FULL_BACKUP'"
dmrman CTLSTMT="RECOVER DATABASE '/data/dmdbms/YWPIE/dm.ini' FROM BACKUPSET '/data/dmdbms/bak/FULL_BACKUP'"
dmrman CTLSTMT="RECOVER DATABASE '/data/dmdbms/YWPIE/dm.ini' UPDATE DB_MAGIC"


· 新建 dmarch.ini

[dmdba@~]$ vi /data/dmdata/YWPIE/dmarch.ini
ARCH_WAIT_APPLY      = 1        

[ARCHIVE_LOCAL1]
ARCH_TYPE            = LOCAL        
ARCH_DEST            = /data/dmdbms/arch        
ARCH_FILE_SIZE       = 1024        
ARCH_SPACE_LIMIT     = 51200        

[ARCHIVE_REALTIME1]
ARCH_TYPE                = REALTIME
ARCH_DEST                = YWPIE_MASTER


· 配置 dm.ini

vi /data/dmdbms/YWPIE/dm.ini
INSTANCE_NAME  = YWPIE_S1
PORT_NUM = 5236            
DW_INACTIVE_INTERVAL = 60          
ALTER_MODE_STATUS = 0        
ENABLE_OFFLINE_TS  = 2              
MAL_INI = 1          
ARCH_INI = 1              
RLOG_SEND_APPLY_MON = 64


· 配置dmmal.ini 和 dmwatcher.ini

这两份配置文件与主节点完全一致,可直接复制到从节点使用#该配置文件主备库配置完全一致


· 注册服务

/data/dmdbms/script/root/dm_service_installer.sh -t dmserver -p YWPIE_S1 -dm_ini /data/dmdbms/YWPIE/dm.ini -m mount
创建服务(DmServiceYWPIE_S1)完成

/data/dmdbms/script/root/dm_service_installer.sh -t dmwatcher -p WATCHER -watcher_ini /data/dmdbms/YWPIE/dmwatcher.ini
创建服务(DmWatcherServiceWATCHER)完成

若要删除自启,可利用如下方式

/data/dmdbms/script/root/dm_service_uninstaller.sh -n DmServiceYWPIE_S1
/data/dmdbms/script/root/dm_service_uninstaller.sh -n DmWatcherServiceWATCHER


3、服务启动部分

· 启动数据库实例并修改参数

# 主节点
/data/dmdbms/bin/DmServiceYWPIE_MASTER start

disql SYSDBA/Abc12345678@10.144.13.32:5236
SQL>SP_SET_PARA_VALUE(1, 'ALTER_MODE_STATUS', 1);
SQL>SP_SET_OGUID(45331);
SQL>ALTER DATABASE PRIMARY;
SQL>SP_SET_PARA_VALUE(1, 'ALTER_MODE_STATUS', 0);

# 备节点
/data/dmdbms/bin/DmServiceYWPIE_S1 start

disql SYSDBA/Abc12345678@10.144.13.33:5236
SQL>SP_SET_PARA_VALUE(1, 'ALTER_MODE_STATUS', 1);
SQL>SP_SET_OGUID(45331);
SQL>ALTER DATABASE STANDBY;
SQL>SP_SET_PARA_VALUE(1, 'ALTER_MODE_STATUS', 0);

· 启动数据库守护进程

# 主备节点都需要操作
/data/dmdbms/bin/DmWatcherServiceWATCHER start


4、监视器(DMMonitor)配置

达梦数据库监视器分为普通监视器和确认监视器,普通监视器一般用于前台查看集群状态,而运行于后台的确认监视器才能实现故障自动切换能力。确认监视器又分为单实例和多实例模式,多实例模式是对监视器本身进行高可用。

· 单实例监视器配置

单实例监视器的配置文件是 dmmonitor.ini ,通过 MON_DW_CONFIRM 参数决定是普通监视器还是确认监视器,0为普通监视器(默认)、1为确认监视器。除了该选项以外,其他监视器配置基本都是一样的。由于在实际管理中会将监视器注册为系统服务并放在后台运行,此时没有办法手动对监视器进行管理,所以建议额外配置一个非确认监视器用于在前台手动管理集群,以下为两个配置文件内容

#确认监视器配置,用于自动故障转移
vi /data/dmdbms/bin/dmmonitor.ini

MON_DW_CONFIRM             = 1            #0为普通监视器(默认)、1为确认监视器
MON_LOG_PATH               = /data/dmdbms/monitor/log    #监视器日志文件存放路径
MON_LOG_INTERVAL           = 60      #每隔60s记录系统信息到日志文件
MON_LOG_FILE_SIZE          = 1024      #每个日志文件最大32M
MON_LOG_SPACE_LIMIT        = 2048        #日志文件总占用空间大小

[YWPIE]                                             #组名要和主备配置一致,可以配置多个集群
MON_INST_OGUID           = 45331       #组唯一OGUID值
#IP 对应 MAL_HOST,PORT 对应 MAL_DW_PORT
MON_DW_IP                = 10.144.13.32:5436  
MON_DW_IP                = 10.144.13.33:5437


#非确认监视器配置,用于手动转移 
vi /data/dmdbms/bin/dmmonitor_manual.ini
MON_DW_CONFIRM = 0
MON_LOG_PATH = /dmdbms/log/
MON_LOG_INTERVAL = 60
MON_LOG_FILE_SIZE = 32
MON_LOG_SPACE_LIMIT = 0

[GRP1]
MON_INST_OGUID = 45331

#对应dmmal.ini中的MAL_DW_PORT
MON_DW_IP                = 10.144.13.32:5436  
MON_DW_IP                = 10.144.13.33:5437


· 监视器服务注册

/data/dmdbms/script/root/dm_service_installer.sh -t dmmonitor -p MONITOR -monitor_ini /data/dmdbms/bin/dmmonitor.ini
创建服务(DmMonitorServiceMONITOR)完成

若要删除自启,可利用如下方式

/data/dmdbms/script/root/dm_service_uninstaller.sh -n DmMonitorServiceMonitor


· 启动监视器

# 启动确认监视器
systemctl start DmMonitorServiceMONITOR

#启动非确认监视器
bin/dmmonitor /data/dmdbms/bin/dmmonitor_manual.ini


· 节点状态查询

# 确保各节点 STATUS$ 都是 OPEN,主库 MODE$ 是 PRIMARY、备库是 PRIMARY
SELECT NAME,HOST_NAME,STATUS$,MODE$ FROM SYS.V$INSTANCE


· 监视器管理命令

#list							查看守护进程的配置信息
#show global info				查看所有实例组的信息
#tip								查看系统当前运行状态
#login							登录监视器
#logout							退出登录
#choose switchover GRP1			主机正常:查看可切换为主机的实例列表
#switchover GRP1.PUGANG_P
#switchover GRP1.PUGANG_S1			主机正常:使用指定组的指定实例,切换为主机

#choose takeover GRP1			主机故障:查看可切换为主机的实例列表
#takeover GRP1.实例名				主机故障:使用指定组的指定实例,切换为主机

#choose takeover force GRP1		强制切换:查看可切换为主机的实例列表
#takeover force GRP1.实例名		强制切换:使用指定组的指定实例,切换为主机

#前台启动监视器后通过login命令登录集群,所需账号信息为SYSDBA
login
  
#查看集群状态
show global info
2025-04-16 15:01:10
#================================================================================
GROUP            OGUID       MON_CONFIRM     MODE            MPP_FLAG
GRP1             13272225    FALSE           AUTO            FALSE
<<DATABASE GLOBAL INFO:>>
DW_IP          MAL_DW_PORT  WTIME                WTYPE     WCTLSTAT  WSTATUS        INAME            INST_OK   N_EP  N_OK  ISTATUS     IMODE     DSC_STATUS     RTYPE     RSTAT
192.168.1.101  15439        2025-04-16 15:01:09  GLOBAL    VALID     OPEN           CJC01            OK        1     1     OPEN        PRIMARY   DSC_OPEN       REALTIME  VALID
DW_IP           MAL_DW_PORT  WTIME                WTYPE     WCTLSTAT  WSTATUS        INAME            INST_OK   N_EP  N_OK  ISTATUS     IMODE     DSC_STATUS     RTYPE     RSTAT
192.168.1.102  15439        2025-04-16 15:01:09  GLOBAL    VALID     OPEN           CJC02            OK        1     1     OPEN        STANDBY   DSC_OPEN       REALTIME  VALID
#================================================================================#  

#查看可切换为主机的实例列表
choose switchover GRP1   

#节点正常状态下手动进行主备切换,切换后登录数据库查看角色以进行验证
switchover
 
#主节点故障状态下手动进行主备切换,切换后登录数据库查看角色以进行验证 


takeover GRP1.实例名


· 集群自动化高可用

常规场景下,当集群处于自动模式下且监视器正常时,如果主库出现故障,备库会自动切换为主库,原主库恢复后自动成为从库,整个过程无需人为干预。如果主库正常,而备库出现故障,主库进入短暂的SUSPEND状态,大概持续3秒,此时不可读写,然后自动修改状态为OPEN,恢复正常读写。如果状态没有恢复可以尝试手动调整

select status$ from v$instance;
alter database open;

文章评论

猜你喜欢

达梦数据库教程(16)审计规则介绍与配置

国产数据库 达梦数据库教程(16)审计规则介绍与配置

一、达梦数据库审计功能介绍数据库审计功能的主要作用是对数据的操作进行记录,比如谁在什么时间、通过什么IP、执行了什么SQL。只有当配置了合理的审计规则后,才能对异常数据(如数据不知道为什么被删除或修改...

国产数据库 达梦数据库教程(15)SQL跟踪日志与慢查询日志

达梦数据库教程(15)SQL跟踪日志与慢查询日志
达梦数据库教程(15)SQL跟踪日志与慢查询日志
达梦数据库教程(15)SQL跟踪日志与慢查询日志
达梦数据库教程(15)SQL跟踪日志与慢查询日志

一、达梦跟踪日志达梦数据库跟踪日志即trace log,是数据库的详细诊断信息文件,该日志记录了包含系统各个会话所执行的 SQL 语句信息、参数信息、错误信息、执行时间等,用于排查故障、性能问题或内部...

达梦数据库教程(14)统计信息与执行计划

国产数据库 达梦数据库教程(14)统计信息与执行计划

一、达梦数据库执行计划执行计划就是一条 SQL 在库里的执行过程或访问路径。SQL 本身只描述了想要的结果,但是具体先访问哪张表、怎么连接,都是由 CBO 决定。CBO 依据统计信息估算SQL的代价(...

达梦数据库教程(13)如何查找并解决阻塞事务

国产数据库 达梦数据库教程(13)如何查找并解决阻塞事务

一、数据库阻塞的原因当一个数据库提交DML、DDL语句时出现阻塞现象通常有两种情况,一是该语句影响的数据量太多,数据库需要时间来处理,这种情况一般无需处理,等事务正常结束即可;另一种则是被其他事务的锁...

达梦数据库教程(11)达梦数据库授权与版本更新

国产数据库 达梦数据库教程(11)达梦数据库授权与版本更新

一、达梦数据库授权管理1、查询授权查询授权到期时间,如果是永久授权,EXPIRED_DATE 列值是 NULL,AUTHORIZED_CUSTOMER 是用户名称SELECT * ...