DM8守护集群部署、数据同步验证、主备切换

1. 环境描述

实例详情

端口详情

2. 部署步骤

2.1 数据准备

2.1.1主库初始化

复制代码
[dmdba@ray1 ~]$ cd /dmdba/dmdbms/bin
[dmdba@ray1 bin]$ ./dminit path=/dmdba/data PAGE_SIZE=32 EXTENT_SIZE=32 CASE_SENSITIVE=y CHARSET=1 DB_NAME=GRP1_RT_01 INSTANCE_NAME=GRP1_RT_01 PORT_NUM=32141
initdb V8
db version: 0x7000c
file dm.key not found, use default license!
License will expire on 2025-07-03
Normal of FAST
Normal of DEFAULT
Normal of RECYCLE
Normal of KEEP
Normal of ROLL

 log file path: /dmdba/data/GRP1_RT_01/GRP1_RT_0101.log


 log file path: /dmdba/data/GRP1_RT_01/GRP1_RT_0102.log

write to dir [/dmdba/data/GRP1_RT_01].
create dm database success. 2024-08-16 18:00:23

[dmdba@ray1 ~]$ /dmdba/dmdbms/bin/dmserver /dmdba/data/GRP1_RT_01/dm.ini

2.1.2备库初始化

复制代码
[dmdba@ray2 ~]$ cd /dmdba/dmdbms/bin
[dmdba@ray2 bin]$ ./dminit path=/dmdba/data PAGE_SIZE=32 EXTENT_SIZE=32 CASE_SENSITIVE=y CHARSET=1 DB_NAME=GRP1_RT_02 INSTANCE_NAME=GRP1_RT_02 PORT_NUM=32142
initdb V8
db version: 0x7000c
file dm.key not found, use default license!
License will expire on 2025-07-03
Normal of FAST
Normal of DEFAULT
Normal of RECYCLE
Normal of KEEP
Normal of ROLL

 log file path: /dmdba/data/GRP1_RT_02/GRP1_RT_0201.log


 log file path: /dmdba/data/GRP1_RT_02/GRP1_RT_0202.log

write to dir [/dmdba/data/GRP1_RT_02].
create dm database success. 2024-08-16 18:02:13

[dmdba@ray1 ~]$ /dmdba/dmdbms/bin/dmserver /dmdba/data/GRP1_RT_02/dm.ini

2.2备份主库

复制代码
[dmdba@ray1 ~]$ dmrman
dmrman V8
RMAN> BACKUP DATABASE '/dmdba/data/GRP1_RT_01/dm.ini' FULL TO  BACKUP_FILE1 BACKUPSET '/dmdba/dmbak/GRP0816'
BACKUP DATABASE '/dmdba/data/GRP1_RT_01/dm.ini' FULL TO BACKUP_FILE1 BACKUPSET '/dmdba/dmbak/GRP0816'
file dm.key not found, use default license!
Processing backupset /dmdba/dmbak/GRP0816
[Percent:100.00%][Speed:0.00M/s][Cost:00:00:02][Remaining:00:00:00]                                 
backup successfully!
time used: 00:00:03.250

2.3拷贝主库备份集至备机

复制代码
[dmdba@ray1 ~]$ cd /dmdba/dmbak/
[dmdba@ray1 dmbak]$ ll
total 0
drwxr-xr-x 2 dmdba dmdba 45 Aug 16 15:30 lei0816
[dmdba@ray1 dmbak]$ scp -r lei0816/ 192.168.0.2:/dmdba/dmbak/

2.4备库还原和恢复

复制代码
[dmdba@ray2 ~]$ dmrman
dmrman V8
RMAN> RESTORE DATABASE '/dmdba/data/GRP1_RT_02/dm.ini' FROM BACKUPSET '/dmdba/dmbak/GRP0816'
RESTORE DATABASE '/dmdba/data/GRP1_RT_02/dm.ini' FROM BACKUPSET '/dmdba/dmbak/GRP0816'
file dm.key not found, use default license!
[Percent:100.00%][Speed:0.00M/s][Cost:00:00:02][Remaining:00:00:00]                                 
restore successfully.
time used: 00:00:02.484
RMAN> RECOVER DATABASE '/dmdba/data/GRP1_RT_02/dm.ini' FROM BACKUPSET '/dmdba/dmbak/GRP0816'
RECOVER DATABASE '/dmdba/data/GRP1_RT_02/dm.ini' FROM BACKUPSET '/dmdba/dmbak/GRP0816'
recover successfully!
time used: 430.147(ms)
RMAN> RECOVER DATABASE '/dmdba/data/GRP1_RT_02/dm.ini' UPDATE DB_MAGIC
RECOVER DATABASE '/dmdba/data/GRP1_RT_02/dm.ini' UPDATE DB_MAGIC
recover successfully!
time used: 00:00:01.074

2.5主库配置dm.ini、dmmal.ini、dmarch.ini

2.5.1主库修改dm.ini

复制代码
[dmdba@ray1 ~]$ vi /dmdba/data/GRP1_RT_01/dm.ini
添加或修改:
INSTANCE_NAME                 = GRP1_RT_01
PORT_NUM                       = 32141
DW_INACTIVE_INTERVAL          =60
ALTER_MODE_STATUS             = 0
ENABLE_OFFLINE_TS               = 2
MAL_INI                           = 1                     
ARCH_INI                         = 1  
RLOG_SEND_APPLY_MON         = 64                   

2.5.2主库修改dmmal.ini

复制代码
[dmdba@ray1 ~]$ vi /dmdba/data/GRP1_RT_01/dmmal.ini
添加:
MAL_CHECK_INTERVAL = 5
MAL_CONN_FAIL_INTERVAL = 5
[MAL_INST1]
 MAL_INST_NAME = GRP1_RT_01
 MAL_HOST = 10.10.10.1
 MAL_PORT = 61141
 MAL_INST_HOST = 192.168.0.1
 MAL_INST_PORT = 32141
 MAL_DW_PORT = 52141
 MAL_INST_DW_PORT = 33141
[MAL_INST2]
 MAL_INST_NAME = GRP1_RT_02
 MAL_HOST = 10.10.10.2
 MAL_PORT = 61142
 MAL_INST_HOST = 192.168.0.2
 MAL_INST_PORT = 32142
 MAL_DW_PORT = 52142
 MAL_INST_DW_PORT = 33142                 

2.5.3主库修改dmarch.ini

复制代码
[dmdba@ray1 ~]$ vi /dmdba/data/GRP1_RT_01/dmarch.ini
添加:
[ARCHIVE_REALTIME] 
ARCH_TYPE = REALTIME
ARCH_DEST = GRP1_RT_02
[ARCHIVE_LOCAL1]
ARCH_TYPE = LOCAL
ARCH_DEST = /dmdba/arch/GRP1_RT_01
ARCH_FILE_SIZE = 128
ARCH_SPACE_LIMIT = 0                 

2.5.4主库修改dmwatcher.ini

复制代码
[dmdba@ray1 ~]$ vi /dmdba/data/GRP1_RT_01/dmwatcher.ini
添加:
[GRP1]
DW_TYPE = GLOBAL
DW_MODE = AUTO
DW_ERROR_TIME = 10
INST_RECOVER_TIME = 60
INST_ERROR_TIME = 10
INST_OGUID = 453331
INST_INI = /dmdba/data/GRP1_RT_01/dm.ini
INST_AUTO_RESTART = 1
INST_STARTUP_CMD = /dmdba/dmdbms/bin/dmserver
RLOG_SEND_THRESHOLD = 0
RLOG_APPLY_THRESHOLD = 0                 

2.6MOUNT主库

一定要以Mount方式启动数据库实例,否则系统启动时会重构回滚表空间,生成Redo日志。并且,启动后应用可能连接到数据库实例进行操作,破坏主备库的数据一致性。数据守护配置结束后,守护进程会自动Open数据库。

复制代码
[dmdba@ray1 ~]$ /dmdba/dmdbms/bin/dmserver /dmdba/data/GRP1_RT_01/dm.ini mount

2.7主库设置OGUID

系统通过OGUID值确定一个守护进程组,由用户保证OGUID值的唯一性,并确保数据守护系统中,数据库、守护进程和监视器配置相同的OGUID值。

复制代码
[dmdba@ray1 ~]$ disql SYSDBA/SYSDBA@192.168.0.1:32141

服务器[192.168.0.1:32141]:处于普通配置状态
登录使用时间 : 2.818(ms)
disql V8
18:39:58 SQL> SP_SET_PARA_VALUE(1, 'ALTER_MODE_STATUS', 1);
DMSQL 过程已成功完成
已用时间: 7.976(毫秒). 执行号:2.
18:40:50 SQL> sp_set_oguid(453331);
DMSQL 过程已成功完成
已用时间: 1.363(毫秒). 执行号:3.
18:40:55 SQL> SP_SET_PARA_VALUE(1, 'ALTER_MODE_STATUS', 0);
DMSQL 过程已成功完成
已用时间: 7.390(毫秒). 执行号:4.

2.8主库修改数据库模式

修改主库模式为PRIMARY。

复制代码
[dmdba@ray1 ~]$ disql SYSDBA/SYSDBA@192.168.0.1:32141

服务器[192.168.0.1:32141]:处于普通配置状态
登录使用时间 : 2.441(ms)
disql V8
18:44:32 SQL> alter database primary;
操作已执行
已用时间: 6.630(毫秒). 执行号:0.

2.9备库配置dm.ini、dmmal.ini、dmarch.ini

2.9.1备库修改dm.ini

复制代码
[dmdba@ray2 ~]$ vi /dmdba/data/GRP1_RT_02/dm.ini
添加或修改:
INSTANCE_NAME                 = GRP1_RT_02
PORT_NUM                       = 32142
DW_INACTIVE_INTERVAL          =60
ALTER_MODE_STATUS             = 0
ENABLE_OFFLINE_TS               = 2
MAL_INI                           = 1                     
ARCH_INI                         = 1  
RLOG_SEND_APPLY_MON         = 64                   

2.9.2备库修改dmmal.ini

复制代码
[dmdba@ray2 ~]$ vi /dmdba/data/GRP1_RT_02/dmmal.ini
添加:
MAL_CHECK_INTERVAL = 5
MAL_CONN_FAIL_INTERVAL = 5
[MAL_INST1]
 MAL_INST_NAME = GRP1_RT_01
 MAL_HOST = 10.10.10.1
 MAL_PORT = 61141
 MAL_INST_HOST = 192.168.0.1
 MAL_INST_PORT = 32141
 MAL_DW_PORT = 52141
 MAL_INST_DW_PORT = 33141
[MAL_INST2]
 MAL_INST_NAME = GRP1_RT_02
 MAL_HOST = 10.10.10.2
 MAL_PORT = 61142
 MAL_INST_HOST = 192.168.0.2
 MAL_INST_PORT = 32142
 MAL_DW_PORT = 52142
 MAL_INST_DW_PORT = 33142                 

2.9.3备库修改dmarch.ini

复制代码
[dmdba@ray2 ~]$ vi /dmdba/data/GRP1_RT_02/dmarch.ini
添加:
[ARCHIVE_REALTIME] 
ARCH_TYPE = REALTIME
ARCH_DEST = GRP1_RT_01
[ARCHIVE_LOCAL1]
ARCH_TYPE = LOCAL
ARCH_DEST = /dmdba/arch/GRP1_RT_02
ARCH_FILE_SIZE = 128
ARCH_SPACE_LIMIT = 0                 

2.9.4备库修改dmwatcher.ini

复制代码
[dmdba@ray2 ~]$ vi /dmdba/data/GRP1_RT_02/dmwatcher.ini
添加:
[GRP1]
DW_TYPE = GLOBAL
DW_MODE = AUTO
DW_ERROR_TIME = 10
INST_RECOVER_TIME = 60
INST_ERROR_TIME = 10
INST_OGUID = 453331
INST_INI = /dmdba/data/GRP1_RT_02/dm.ini
INST_AUTO_RESTART = 1
INST_STARTUP_CMD = /dmdba/dmdbms/bin/dmserver
RLOG_SEND_THRESHOLD = 0
RLOG_APPLY_THRESHOLD = 0                 

2.10MOUNT备库

一定要以Mount方式启动数据库实例,否则系统启动时会重构回滚表空间,生成Redo日志。并且,启动后应用可能连接到数据库实例进行操作,破坏主备库的数据一致性。数据守护配置结束后,守护进程会自动Open数据库。

复制代码
[dmdba@ray2 ~]$ /dmdba/dmdbms/bin/dmserver /dmdba/data/GRP1_RT_02/dm.ini mount

##2.11备库设置OGUID

系统通过OGUID值确定一个守护进程组,由用户保证OGUID值的唯一性,并确保数据守护系统中,数据库、守护进程和监视器配置相同的OGUID值。

复制代码
[dmdba@ray2 ~]$ disql SYSDBA/SYSDBA@192.168.0.2:32142

服务器[192.168.0.2:32142]:处于普通配置状态
登录使用时间 : 3.223(ms)
disql V8
SQL> SP_SET_PARA_VALUE(1, 'ALTER_MODE_STATUS', 1);
DMSQL 过程已成功完成
已用时间: 8.193(毫秒). 执行号:1.
SQL> sp_set_oguid(453331);
DMSQL 过程已成功完成
已用时间: 1.583(毫秒). 执行号:2.
SQL> SP_SET_PARA_VALUE(1, 'ALTER_MODE_STATUS', 0);
DMSQL 过程已成功完成
已用时间: 6.989(毫秒). 执行号:3.

2.12备库修改数据库模式

修改数据库模式为STANDBY。

复制代码
[dmdba@ray2 ~]$ disql SYSDBA/SYSDBA@192.168.0.2:32142

服务器[192.168.0.2:32142]:处于普通配置状态
登录使用时间 : 2.461(ms)
disql V8
SQL> alter database standby;
操作已执行
已用时间: 5.541(毫秒). 执行号:0.

2.13配置监视器

修改dmmonitor.ini配置确认监视器,其中MON_DW_IP中的IP和PORT和dmmal.ini中的MAL_HOST和MAL_DW_PORT配置项保持一致。

复制代码
[dmdba@ray1 ~]$ vi /dmdba/monitor/dmmonitor.ini
添加:
MON_DW_CONFIRM = 1
MON_LOG_PATH = /dmdba/data/log
MON_LOG_INTERVAL = 60
MON_LOG_FILE_SIZE = 32
MON_LOG_SPACE_LIMIT = 0
[GRP1]
MON_INST_OGUID = 453331
MON_DW_IP = 10.10.10.1:52141
MON_DW_IP = 10.10.10.2:52142

2.14启动守护进程

守护进程启动后,进入Startup状态,此时实例都处于Mount状态。守护进程开始广播自身和其监控实例的状态信息,结合自身信息和远程守护进程的广播信息,守护进程将本地实例Open,并切换为Open状态。

2.14.1主库启动守护进程

复制代码
[dmdba@ray1 ~]$ /dmdba/dmdbms/bin/dmwatcher /dmdba/data/GRP1_RT_01/dmwatcher.ini 
DMWATCHER[4.0] V8
DMWATCHER[4.0] IS READY

2.14.2备库启动守护进程

复制代码
[dmdba@ray2 ~]$ /dmdba/dmdbms/bin/dmwatcher /dmdba/data/GRP1_RT_02/dmwatcher.ini 
DMWATCHER[4.0] V8
DMWATCHER[4.0] IS READY

2.15启动监视器

复制代码
[dmdba@ray1 ~]$ /dmdba/monitor/dmmonitor /dmdba/data/GRP1_RT_01/dmmonitor.ini

3数据同步测试

主库创建测试表,插入数据,检查备库是否有数据生成。

复制代码
login
用户名:SYSDBA
密码:

如上图,首先查询确认主备库均无t表,连接主库创建t表,并插入5条数据commit,主库查询到数据已经落盘。同时连接备库查询到t表存在,并且数据与主库数据保持一致,数据同步正常。

4主备切换测试

4.1模拟主库主机故障,备库自动接管

复制代码
[dmdba@ray1 ~]$ dmmonitor /dmdba/monitor/dmmonitor1.ini
show global info

4.1.1关闭主库服务器

复制代码
[root@ray2 ~]# init 0
[root@ray1 ~]# ping ray2
PING ray2 (192.168.0.2) 56(84) bytes of data.
From ray1 (192.168.0.1) icmp_seq=10 Destination Host Unreachable
From ray1 (192.168.0.1) icmp_seq=11 Destination Host Unreachable
From ray1 (192.168.0.1) icmp_seq=12 Destination Host Unreachable
From ray1 (192.168.0.1) icmp_seq=13 Destination Host Unreachable
From ray1 (192.168.0.1) icmp_seq=14 Destination Host Unreachable

4.1.2查看监视器,备库自动接管服务

主库关闭后监视器显示主库连接超时,备库自动切换为主库。

4.1.3启动原主库,加入集群

启动原主库后,自动加入集群,角色为standby。

4.2手工主备切换


执行手工主备切换测试后,主备角色对调,GRP1_RT_01由standby变为primary,GRP1_RT_02由primary变为standby。

相关推荐
.Eyes1 小时前
OceanBase 分区裁剪(Partition Pruning)原理解读
数据库·oceanbase
MrZhangBaby2 小时前
SQL-leetcode— 2356. 每位教师所教授的科目种类的数量
数据库
一水鉴天2 小时前
整体设计 之定稿 “凝聚式中心点”原型 --整除:智能合约和DBMS的在表层挂接 能/所 依据的深层套接 之2
数据库·人工智能·智能合约
翔云1234563 小时前
Python 中 SQLAlchemy 和 MySQLdb 的关系
数据库·python·mysql
孙霸天3 小时前
Ubuntu20系统上离线安装MongoDB
数据库·mongodb·ubuntu·备份还原
Java 码农3 小时前
nodejs mongodb基础
数据库·mongodb·node.js
TDengine (老段)3 小时前
TDengine IDMP 运维指南(4. 使用 Docker 部署)
运维·数据库·物联网·docker·时序数据库·tdengine·涛思数据
TDengine (老段)3 小时前
TDengine IDMP 最佳实践
大数据·数据库·物联网·ai·时序数据库·tdengine·涛思数据
彬彬醤4 小时前
Mac怎么连接VPS?可以参考这几种方法
大数据·运维·服务器·数据库·线性代数·macos·矩阵
废喵喵呜4 小时前
达梦数据库-实时主备集群部署详解(附图文)手工搭建一主一备数据守护集群DW
网络·数据库·tcp/ip