注册
DMDSC集群添加实时备库和异步备库
专栏/技术分享/ 文章详情 /

DMDSC集群添加实时备库和异步备库

lhpaaaa 2025/08/22 88 1 0
摘要

1.测试建表和插入数据,2个节点都可以查询到数据

在节点1的终端上以disql进入:

./disql SYSDBA/Dameng123@192.168.100.115:5236

-- 创建表空间(存储在+DMDATA共享磁盘组,文档“十六、初始化数据库实例”步骤类似)
CREATE TABLESPACE TEST_TBS DATAFILE '+DMDATA/test_tbs01.dbf' SIZE 128;

-- 创建测试表(指定表空间为共享表空间)
CREATE TABLE TEST_DSC (ID INT, NAME VARCHAR(50)) TABLESPACE TEST_TBS;

-- 插入测试数据
INSERT INTO TEST_DSC VALUES (1, 'DSC集群测试数据');
COMMIT;  # 关键:提交事务,确保数据同步到共享存储


image.png
在节点2上:

./disql SYSDBA/Dameng123@192.168.100.116:5236

select * from TEST_DSC;

image.png

2.测试故障一个节点后,集群和持续提供服务

可以是数据库服务关闭或者是禁用网卡或者是关闭节点1的主机来模拟节点故障。
我这里是关闭节点1的主机来模拟。

在dmdcr_cfg.ini这里有配置到要多久没有更新就判定为故障,
所以在监视器这里我们可以看到集群在计时
image.png
超过60秒(设置的规则)后没有更新,就判定为故障节点,接着切换节点2来接管。
image.png
如果是主节点实例挂了,监视器显示:
image.png
如果是主节点的ASM服务挂了,监视器显示:
image.png
在节点2的css日志这里,也可以看到,提示节点1的css和asm和实例服务都报错
image.png
到节点2这里以disql进入,测试读写是否正常

./disql SYSDBA/Dameng123@192.168.100.116:5236

--读
select * from TEST_DSC;
--写
INSERT INTO TEST_DSC VALUES (2, 'DSC集群主节点故障模拟');
COMMIT; 

image.png

主节点恢复后,重新加入集群,恢复配置
image.png
用disql进去看得到节点2插入的数据
image.png
流程:
image.png

3.基于已部署完成的DSC集群添加一个实时备机

1.先在新的主机上安装达梦数据库,初始化数据库服务,创建实例。
2.把DSC集群看成一个整体,就是一个主库,添加的备库机时单独的数据库,就是一个备库。

3.1安装数据库软件

image.png

3.2初始化数据库

su - dmdba

cd /home/dmdba/dmdbms/bin

--初始化
./dminit path=/dmdata/data DB_NAME=DAMENGTEST1 INSTANCE_NAME=DMSERVER1  PORT_NUM=5236 SYSDBA_PWD=Dameng123 SYSAUDITOR_PWD=Dameng123

3.3创建数据库服务

su - root

cd /home/dmdba/dmdbms/script/root/
./dm_service_installer.sh -t dmserver -dm_ini /dmdata/data/DAMENGTEST1/dm.ini -p DAMENGTEST1

su - dmdba

cd /home/dmdba/dmdbms/bin

--启动数据库
./DmServiceDAMENGTEST1 start
--关闭数据库
./DmServiceDAMENGTEST1 stop


3.4登录到css监视器,停止dsc集群组

我的是118这台,这一步的操作只是关掉DSC的实例而已,css和ASM服务都没有关闭,否则会报错。

su - dmdba
cd /home/dmdba/dmdbms/bin
./dmcssm ini_path=/home/dmdba/dmdbms/dmcssm.ini
# 执行命令停止dsc集群组,停止所有实例
ep stop GRP_DSC

image.png

3.5备份dsc集群数据,到备库还原

在主节点这里进行备份,前面提到的css和ASM服务不能关闭,否则进入不了dmrman。

#在dmdba用户下执行
su - dmdba
cd /home/dmdba/dmdbms/bin

#启动dmrman工具
./dmrman dcr_ini=/home/dmdba/config/dmdcr.ini
#执行 backup 全库
backup database '/home/dmdba/config/dsc0_config/dm.ini' full backupset '/home/dmdba/bakfull';

#校验备份
check backupset '/home/dmdba/bakfull';
#退出
RMAN> exit;

image.png

主节点这里检查对应目录看到备份已经存在后,发送到实时备库机这里

scp -r /home/dmdba/bakfull dmdba@192.168.155.111:/home/dmdba/

image.png

在实时备库机这里还原数据库
在备库主机上
一定要确保备库的数据库服务是停止状态,开着的就到bin目录下关闭

./DmServiceDAMENGTEST1 stop

使用 dmrman 工具还原备库,dmdba 用户执行:
./dmrman	
进入dmrman工具交互界面
校验备份集
check backupset '/home/dmdba/bakfull';

执行恢复:
restore database '/dmdata/data/DAMENGTEST1/dm.ini' from backupset '/home/dmdba/bakfull';

#执行 restore :日志恢复 recover

recover database '/dmdata/data/DAMENGTEST1/dm.ini' from backupset '/home/dmdba/bakfull';

# recover update db_magic:标识更新 update db_magic

recover database '/dmdata/data/DAMENGTEST1/dm.ini' update db_magic;

image.png

3.6修改dm.ini配置文件

到主节点这里修改

su dmdba
vi /home/dmdba/config/dsc0_config/dm.ini
 
# 修改内容如下
INSTANCE_NAME = DSC0     #不用改动
PORT_NUM = 5236            #数据库实例监听端口 
ALTER_MODE_STATUS = 0   #不允许手工方式修改实例模式/状态/OGUID 
ENABLE_OFFLINE_TS = 2      #不允许备库 OFFLINE 表空间 
MAL_INI = 1                #打开 MAL 系统
ARCH_INI = 1               #打开归档配置


#验证
cat /home/dmdba/config/dsc0_config/dm.ini|grep -E "INSTANCE_NAME|PORT_NUM|ALTER_MODE_STATUS|ENABLE_OFFLINE_TS|MAL_INI|ARCH_INI"|grep -v _PORT_NUM



节点2:
su dmdba
vi /home/dmdba/config/dsc1_config/dm.ini
 
# 修改内容如下
INSTANCE_NAME = DSC1     #不用改动
PORT_NUM = 5236            #数据库实例监听端口 
ALTER_MODE_STATUS = 0   #不允许手工方式修改实例模式/状态/OGUID 
ENABLE_OFFLINE_TS = 2      #不允许备库 OFFLINE 表空间 
MAL_INI = 1                #打开 MAL 系统
ARCH_INI = 1               #打开归档配置

#验证
cat /home/dmdba/config/dsc0_config/dm.ini|grep -E "INSTANCE_NAME|PORT_NUM|ALTER_MODE_STATUS|ENABLE_OFFLINE_TS|MAL_INI|ARCH_INI"|grep -v _PORT_NUM

实时备库机(111):
su dmdba
vi /dmdata/data/DAMENGTEST1/dm.ini
 
# 修改内容如下
INSTANCE_NAME = DAMENGTEST1     #不用改动
PORT_NUM = 5236            #数据库实例监听端口 
ALTER_MODE_STATUS = 0   #不允许手工方式修改实例模式/状态/OGUID 
ENABLE_OFFLINE_TS = 2      #不允许备库 OFFLINE 表空间 
MAL_INI = 1                #打开 MAL 系统
ARCH_INI = 1               #打开归档配置

#验证
cat /dmdata/data/DAMENGTEST1/dm.ini|grep -E "INSTANCE_NAME|PORT_NUM|ALTER_MODE_STATUS|ENABLE_OFFLINE_TS|MAL_INI|ARCH_INI"|grep -v _PORT_NUM

3.7配置dmmal.ini

三台机器都要一样,可能前面会已经有了,要重写

su dmdba
vi /home/dmdba/config/dsc0_config/dmmal.ini

 
# 修改内容如下
MAL_CHECK_INTERVAL=87
MAL_CONN_FAIL_INTERVAL=180
MAL_SYS_BUF_SIZE=600
MAL_BUF_SIZE=300
MAL_VPOOL_SIZE=500
MAL_COMPRESS_LEVEL=0
[MAL_INST0]
MAL_INST_NAME = DSC0
MAL_HOST = 192.168.100.115
MAL_PORT = 11246
MAL_INST_HOST = 192.168.100.115
MAL_INST_PORT = 5236
MAL_DW_PORT = 52141
MAL_INST_DW_PORT = 5276
[MAL_INST1]
MAL_INST_NAME = DSC1
MAL_HOST = 192.168.100.116
MAL_PORT = 11246
MAL_INST_HOST = 192.168.100.116
MAL_INST_PORT = 5236
MAL_DW_PORT = 52141
MAL_INST_DW_PORT = 5276
[MAL_INST2]
MAL_INST_NAME = DMSERVER1
MAL_HOST = 192.168.100.111
MAL_PORT = 11246
MAL_INST_HOST = 192.168.100.111
MAL_INST_PORT = 5236
MAL_DW_PORT = 52141
MAL_INST_DW_PORT = 5276

接着发送给另外两台
备库机
scp  /home/dmdba/config/dsc0_config/dmmal.ini dmdba@192.168.155.111:/dmdata/data/DAMENGTEST1

节点2
scp  /home/dmdba/config/dsc0_config/dmmal.ini dmdba@192.168.155.116:/home/dmdba/config/dsc1_config


3.8配置dmarch.ini

主节点:

su dmdba
vi /home/dmdba/config/dsc0_config/dmarch.ini
 
# 修改内容如下
ARCH_WAIT_APPLY = 0
ARCH_LOCAL_SHARE = 1
ARCH_LOCAL_SHARE_CHECK=0
 
[ARCHIVE_LOCAL1]
ARCH_TYPE = LOCAL
ARCH_DEST = +DMDATA/dmarch/arch_dsc0
ARCH_FILE_SIZE = 256
ARCH_SPACE_LIMIT = 1024
 
[ARCHIVE_LOCAL2]
ARCH_TYPE = LOCAL
ARCH_DEST = /dmdata/arch
ARCH_FILE_SIZE = 256
ARCH_SPACE_LIMIT = 1024
 
[ARCHIVE_REMOTE1]
ARCH_TYPE = REMOTE
ARCH_DEST = DSC1
ARCH_INCOMING_PATH =+DMDATA/dmarch/arch_dsc1
ARCH_FILE_SIZE = 256
ARCH_SPACE_LIMIT = 1024
 
[ARCHIVE_REALTIME1]
ARCH_TYPE = REALTIME 
ARCH_DEST = DMSERVER1

节点2:
su dmdba
vi /home/dmdba/config/dsc1_config/dmarch.ini
 
# 修改内容如下
ARCH_WAIT_APPLY = 0
ARCH_LOCAL_SHARE = 1
ARCH_LOCAL_SHARE_CHECK=0
 
[ARCHIVE_LOCAL1]
ARCH_TYPE = LOCAL
ARCH_DEST = +DMDATA/dmarch/arch_dsc1
ARCH_FILE_SIZE = 256
ARCH_SPACE_LIMIT = 1024
 
[ARCHIVE_LOCAL2]
ARCH_TYPE = LOCAL
ARCH_DEST = /dmdata/arch
ARCH_FILE_SIZE = 256
ARCH_SPACE_LIMIT = 1024
 
[ARCHIVE_REMOTE1]
ARCH_TYPE = REMOTE
ARCH_DEST = DSC0
ARCH_INCOMING_PATH =+DMDATA/dmarch/arch_dsc0
ARCH_FILE_SIZE = 256
ARCH_SPACE_LIMIT = 1024
 
[ARCHIVE_REALTIME1]
ARCH_TYPE = REALTIME 
ARCH_DEST = DMSERVER1

备库:
su dmdba
vi /dmdata/data/DAMENGTEST1/dmarch.ini
 
# 修改内容如下
[ARCHIVE_LOCAL1]
ARCH_TYPE = LOCAL
ARCH_DEST = /dmdata/arch
ARCH_FILE_SIZE = 256
ARCH_SPACE_LIMIT = 1024
 
[ARCHIVE_REALTIME1]
ARCH_TYPE = REALTIME 
ARCH_DEST = DSC0/DSC1

3.9配置dmwatcher.ini

主节点:

vi /home/dmdba/config/dsc0_config/dmwatcher.ini
 
# 修改内容如下
[GRP1] #集群组名
DW_TYPE = GLOBAL
DW_MODE = MANUAL
DW_ERROR_TIME = 120
INST_RECOVER_TIME = 60
INST_ERROR_TIME = 120
INST_OGUID = 453331
INST_INI = /home/dmdba/config/dsc0_config/dm.ini
DCR_INI=/home/dmdba/config/dmdcr.ini
INST_STARTUP_CMD = /home/dmdba/dmdbms/bin/DmServiceDSC0 start
INST_AUTO_RESTART = 0
RLOG_SEND_THRESHOLD = 0
RLOG_APPLY_THRESHOLD = 0

节点2:
su dmdba
vi /home/dmdba/config/dsc1_config/dmwatcher.ini
 
# 修改内容如下
[GRP1]
DW_TYPE = GLOBAL
DW_MODE = MANUAL
DW_ERROR_TIME = 120
INST_RECOVER_TIME = 60
INST_ERROR_TIME = 120
INST_OGUID = 453331
INST_INI = /home/dmdba/config/dsc1_config/dm.ini
DCR_INI=/home/dmdba/config/dmdcr.ini
INST_STARTUP_CMD = /home/dmdba/dmdbms/bin/DmServiceDSC1 start
INST_AUTO_RESTART = 0
RLOG_SEND_THRESHOLD = 0
RLOG_APPLY_THRESHOLD = 0

备库:
su dmdba
vi /dmdata/data/DAMENGTEST1/dmwatcher.ini




 
# 修改内容如下
[GRP1] 
DW_TYPE = GLOBAL 
DW_MODE = MANUAL
DW_ERROR_TIME = 120
INST_RECOVER_TIME = 60 
INST_ERROR_TIME = 120 
INST_OGUID = 453331
INST_INI = /dmdata/data/DAMENGTEST1/dm.ini
INST_AUTO_RESTART = 0
INST_STARTUP_CMD = /home/dmdba/dmdbms/bin/DmServiceDAMENGTEST1 start 
RLOG_SEND_THRESHOLD = 0
RLOG_APPLY_THRESHOLD = 0 

3.10所有实例修改成mount启动方式(dmdba用户操作)

su dmdba
cd /home/dmdba/dmdbms/bin

vim DmServiceDSC0 vim DmServiceDSC1 vim DmServiceDAMENGTEST1 

START_MODE=open 修改成 START_MODE=mount

3.11启动dsc集群实例和备库(dmdba用户操作)

先启动dsc集群的实例,再启动备库的实例

su dmdba
cd /home/dmdba/dmdbms/bin

./DmServiceDSC0 start

./DmServiceDSC1 start

./DmServiceDAMENGTEST1 start

3.12修改节点的oguid和模式(dmdba用户操作)

所有的实例都处于mount状态!

节点1:
cd /home/dmdba/dmdbms/bin
./disql SYSDBA/Dameng123@192.168.100.115:5236

SP_SET_PARA_VALUE(1, 'ALTER_MODE_STATUS', 1); 
sp_set_oguid(453331);
alter database primary;
SP_SET_PARA_VALUE(1, 'ALTER_MODE_STATUS', 0);
exit
节点2:

cd /home/dmdba/dmdbms/bin
./disql SYSDBA/Dameng123@192.168.100.116:5236

SP_SET_PARA_VALUE(1, 'ALTER_MODE_STATUS', 1); 
sp_set_oguid(453331);
alter database primary;
SP_SET_PARA_VALUE(1, 'ALTER_MODE_STATUS', 0);
exit

备库
cd /home/dmdba/dmdbms/bin
./disql SYSDBA/Dameng123

SP_SET_PARA_VALUE(1, 'ALTER_MODE_STATUS', 1); 
sp_set_oguid(453331);
alter database standby;
SP_SET_PARA_VALUE(1, 'ALTER_MODE_STATUS', 0);
exit


3.13注册数据守护服务并启动守护进程(dmdba用户操作)

节点1:
su root
cd /home/dmdba/dmdbms/script/root/
./dm_service_installer.sh -t dmwatcher -p DSC0 -watcher_ini /home/dmdba/config/dsc0_config/dmwatcher.ini

--开启守护进程
su dmdba
./DmWatcherServiceDSC0 start

节点2:
su root
cd /home/dmdba/dmdbms/script/root/
./dm_service_installer.sh -t dmwatcher -p DSC1 -watcher_ini /home/dmdba/config/dsc1_config/dmwatcher.ini

--开启守护进程
su dmdba
./DmWatcherServiceDSC1 start

备库:
su root
cd /home/dmdba/dmdbms/script/root/
./dm_service_installer.sh -t dmwatcher -p DMSERVER1 -watcher_ini /dmdata/data/DAMENGTEST1/dmwatcher.ini

--开启守护进程
su dmdba
./DmWatcherServiceDMSERVER1 start

3.14配置监视器

用一台新的,装有达梦数据库软件的主机,配置
用dmdba用户新建确认监视器配置文件 dmmonitor.ini(dmmonitor.ini 存放目录没有限制,一般和 dm.ini 存放在同一个目录),执行以下命令

su dmdba
vi /dmdata/data/dmdb/dmmonitor.ini	

#内容为
MON_DW_CONFIRM = 0  #0为普通监视器,要手动切换主备,1为确认监视器可自动切换主备
MON_LOG_PATH =/home/dmdba/dmdbms/log  #根据实际环境修改路径
MON_LOG_INTERVAL = 0  #每隔 0s 定时记录系统信息到日志文件
MON_LOG_FILE_SIZE = 32  #单个日志大小,单位 MB
MON_LOG_SPACE_LIMIT = 0 #日志上限,单位 MB
[GRP1]  #组名
MON_INST_OGUID = 453331  #组 GRP1 的唯一 OGUID 值
MON_DW_IP = 192.168.52.50:52141/192.168.52.51:52141  #DSC的MAL_HOST: MAL_DW_PORT
MON_DW_IP = 192.168.52.53:52141   #备库机的

当守护进程拉起来以后,实例状态变成了open

启动监视器

#启动监视器
./dmmonitor /dmdata/data/dmdb/dmmonitor.ini

同时在监视器上我们还能看到DSC集群当前的控制节点是DSC0,管理全局事务和锁,RTYPE=REALTIME表明备库类型为实时备库(数据秒级同步),主备的LSN相同,说明数据库归档同步。

4.基于已部署完成的DSC集群添加一个异步备机

要求已经做好DSC集群,且备库机已经完成了初始化!DSC集群所有节点看成一个整体,就是一整个主库。

4.1备份DSC集群,到备库恢复

关闭DSC集群的实例服务,只是关掉DSC的实例而已,css和ASM服务都没有关闭,否则会报错。

#查看是否开启map服务
ps -ef | grep dmdbms

#进入dmrman界面
cd /home/dmdba/dmdbms/bin
./dmrman use_ap=2 dcr_ini=/home/dmdba/config/dmdcr.ini

#备份
backup database '/home/dmdba/config/dsc0_config/dm.ini' full backupset '/home/dmdba/bakfull';

#校验备份
check backupset '/home/dmdba/bakfull';
#退出
RMAN> exit;



主节点这里检查对应目录看到备份已经存在后,发送到实时备库机这里
scp -r /home/dmdba/bakfull dmdba@192.168.155.111:/home/dmdba/

在实时备库机这里还原数据库
在备库主机上
一定要确保备库的数据库服务是停止状态,开着的就到bin目录下关闭

./DmServiceDAMENGTEST1 stop

#查看是否开启map服务
ps -ef | grep dmdbms

使用 dmrman 工具还原备库,dmdba 用户执行:

./dmrman	
进入dmrman工具交互界面
校验备份集
check backupset '/home/dmdba/bakfull';

执行恢复:
restore database '/dmdata/data/DAMENGTEST1/dm.ini' from backupset '/home/dmdba/bakfull';

#执行 restore :日志恢复 recover

recover database '/dmdata/data/DAMENGTEST1/dm.ini' from backupset '/home/dmdba/bakfull';

# recover update db_magic:标识更新 update db_magic

recover database '/dmdata/data/DAMENGTEST1/dm.ini' update db_magic;

4.2配置dm.ini

到主节点这里修改

su dmdba
vi /home/dmdba/config/dsc0_config/dm.ini
 
# 修改内容如下
INSTANCE_NAME = DSC0 
PORT_NUM = 5236     #数据库实例监听端口 
DW_INACTIVE_INTERVAL = 60        #接收守护进程消息超时时间 
ALTER_MODE_STATUS = 0       #不允许手工方式修改实例模式/状态 
ENABLE_OFFLINE_TS = 2        #不允许备库 OFFLINE 表空间 
MAL_INI = 1         #打开 MAL 系统 
ARCH_INI = 1           #打开归档配置 
RLOG_SEND_APPLY_MON = 64        #统计最近 64 次的日志发送信息 
TIMER_INI = 1    #这是关键,触发异步归档任务

#验证
cat /home/dmdba/config/dsc0_config/dm.ini|grep -E "INSTANCE_NAME|PORT_NUM|ALTER_MODE_STATUS|ENABLE_OFFLINE_TS|MAL_INI|ARCH_INI|TIMER_INI"|grep -v _PORT_NUM

节点2:
su dmdba
vi /home/dmdba/config/dsc1_config/dm.ini
 
# 修改内容如下
INSTANCE_NAME = DSC1     #不用改动
PORT_NUM = 5236            #数据库实例监听端口 
ALTER_MODE_STATUS = 0   #不允许手工方式修改实例模式/状态/OGUID 
ENABLE_OFFLINE_TS = 2      #不允许备库 OFFLINE 表空间 
MAL_INI = 1                #打开 MAL 系统
ARCH_INI = 1               #打开归档配置
RLOG_SEND_APPLY_MON = 64        #统计最近 64 次的日志发送信息 
TIMER_INI = 1

#验证
cat /home/dmdba/config/dsc1_config/dm.ini|grep -E "INSTANCE_NAME|PORT_NUM|ALTER_MODE_STATUS|ENABLE_OFFLINE_TS|MAL_INI|ARCH_INI|TIMER_INI"|grep -v _PORT_NUM

实时备库机(111):
su dmdba
vi /dmdata/data/DAMENGTEST1/dm.ini
 
# 修改内容如下
INSTANCE_NAME = DAMENGTEST1     #不用改动
PORT_NUM = 5236            #数据库实例监听端口 
ALTER_MODE_STATUS = 0   #不允许手工方式修改实例模式/状态/OGUID 
ENABLE_OFFLINE_TS = 2      #不允许备库 OFFLINE 表空间 
MAL_INI = 1                #打开 MAL 系统
ARCH_INI = 1               #打开归档配置
RLOG_SEND_APPLY_MON = 64        #统计最近 64 次的日志发送信息 
TIMER_INI = 1

#验证
cat /dmdata/data/DAMENGTEST1/dm.ini|grep -E "INSTANCE_NAME|PORT_NUM|ALTER_MODE_STATUS|ENABLE_OFFLINE_TS|MAL_INI|ARCH_INI|TIMER_INI"|grep -v _PORT_NUM


4.3配置dmmal.ini

三台机器都要一样,可能前面会已经有了,要重写

vi /home/dmdba/config/dsc0_config/dmmal.ini

 
# 修改内容如下
MAL_CHECK_INTERVAL=87
MAL_CONN_FAIL_INTERVAL=180
MAL_SYS_BUF_SIZE=600
MAL_BUF_SIZE=300
MAL_VPOOL_SIZE=500
MAL_COMPRESS_LEVEL=0
[MAL_INST0]
MAL_INST_NAME = DSC0
MAL_HOST = 192.168.100.115
MAL_PORT = 11246
MAL_INST_HOST = 192.168.100.115
MAL_INST_PORT = 5236
MAL_DW_PORT = 52141
MAL_INST_DW_PORT = 5276
[MAL_INST1]
MAL_INST_NAME = DSC1
MAL_HOST = 192.168.100.116
MAL_PORT = 11246
MAL_INST_HOST = 192.168.100.116
MAL_INST_PORT = 5236
MAL_DW_PORT = 52141
MAL_INST_DW_PORT = 5276
[MAL_INST2]
MAL_INST_NAME = DMSERVER1
MAL_HOST = 192.168.100.111
MAL_PORT = 11246
MAL_INST_HOST = 192.168.100.111
MAL_INST_PORT = 5236
MAL_DW_PORT = 52141
MAL_INST_DW_PORT = 5276

接着发送给另外两台
备库机
scp  /home/dmdba/config/dsc0_config/dmmal.ini dmdba@192.168.155.111:/dmdata/data/DAMENGTEST1

节点2
scp  /home/dmdba/config/dsc0_config/dmmal.ini dmdba@192.168.155.116:/home/dmdba/config/dsc1_config

4.4配置dmarch.ini

主节点:
su dmdba
vi /home/dmdba/config/dsc0_config/dmarch.ini
 
# 修改内容如下
ARCH_WAIT_APPLY = 0
ARCH_LOCAL_SHARE = 1
ARCH_LOCAL_SHARE_CHECK=0
 
[ARCHIVE_LOCAL1]
ARCH_TYPE = LOCAL
ARCH_DEST = +DMDATA/dmarch/arch_dsc0
ARCH_FILE_SIZE = 256
ARCH_SPACE_LIMIT = 1024
 
[ARCHIVE_LOCAL2]
ARCH_TYPE = LOCAL
ARCH_DEST = /dmdata/arch
ARCH_FILE_SIZE = 256
ARCH_SPACE_LIMIT = 1024
 
[ARCHIVE_REMOTE1]
ARCH_TYPE = REMOTE
ARCH_DEST = DSC1
ARCH_INCOMING_PATH =+DMDATA/dmarch/arch_dsc1
ARCH_FILE_SIZE = 256
ARCH_SPACE_LIMIT = 1024
 
[ARCHIVE_ASYNC]  #异步归档配置,关键
ARCH_TYPE = ASYNC  #归档类型为异步
ARCH_DEST = DMSERVER1
ARCH_TIMER_NAME = RT_TIMER  #定时器名称

节点2:
su dmdba
vi /home/dmdba/config/dsc1_config/dmarch.ini
 
# 修改内容如下
ARCH_WAIT_APPLY = 0
ARCH_LOCAL_SHARE = 1
ARCH_LOCAL_SHARE_CHECK=0
 
[ARCHIVE_LOCAL1]
ARCH_TYPE = LOCAL
ARCH_DEST = +DMDATA/dmarch/arch_dsc1
ARCH_FILE_SIZE = 256
ARCH_SPACE_LIMIT = 1024
 
[ARCHIVE_LOCAL2]
ARCH_TYPE = LOCAL
ARCH_DEST = /dmdata/arch
ARCH_FILE_SIZE = 256
ARCH_SPACE_LIMIT = 1024
 
[ARCHIVE_REMOTE1]
ARCH_TYPE = REMOTE
ARCH_DEST = DSC0
ARCH_INCOMING_PATH =+DMDATA/dmarch/arch_dsc0
ARCH_FILE_SIZE = 256
ARCH_SPACE_LIMIT = 1024
 
[ARCHIVE_ASYNC]  #异步归档配置,关键
ARCH_TYPE = ASYNC
ARCH_DEST = DMSERVER1
ARCH_TIMER_NAME = RT_TIMER

备库:
su dmdba
vi /dmdata/data/DAMENGTEST1/dmarch.ini
 
# 修改内容如下
[ARCHIVE_LOCAL1]
ARCH_TYPE = LOCAL
ARCH_DEST = /dmdata/arch
ARCH_FILE_SIZE = 256
ARCH_SPACE_LIMIT = 1024


4.5配置dmtimer.ini

只配置DSC集群节点即可,两节点配置一样

主节点:
su dmdba
vi /home/dmdba/config/dsc0_config/dmtimer.ini
 
# 修改内容如下
定时器配置为每天每5分钟触发主库发送归档日志到异步备库,可以根据实际情况再做调整

[RT_TIMER] #和dmarch.ini 中的ARCH_TIMER_NAME 一致
TYPE = 2 #2 按日执行
FREQ_MONTH_WEEK_INTERVAL = 1 #间隔月或周数
FREQ_SUB_INTERVAL = 0 #间隔天数
FREQ_MINUTE_INTERVAL = 5 #间隔分钟数
START_TIME = 00:00:00 #开始时间
END_TIME = 00:00:00 #结束时间(分钟等级可以不要)
DURING_START_DATE = 2021-5-15 12:00:00 #开始时间点
DURING_END_DATE = 9999-12-31 23:59:59 #结束时间点
NO_END_DATE_FLAG = 1 #是否结束标记
DESCRIBE = RT_TIMER #定时器描述
IS_VALID = 1 #0:表示关闭定时器,1:表示启用定时器

TYPE:
异步归档的最小触发间隔是1 分钟,定时器调度类型:
1:执行一次
2:按日执行
3:按周执行
4:按月执行的第几天
5:按月执行的第一周
6:按月执行的第二周
7:按月执行的第三周
8:按月执行的第四周
9:按月执行的最后一周

节点2:
su dmdba
vi /home/dmdba/config/dsc1_config/dmtimer.ini
 
# 修改内容如下
[RT_TIMER]
TYPE = 2 
FREQ_MONTH_WEEK_INTERVAL = 1 
FREQ_SUB_INTERVAL = 0 
FREQ_MINUTE_INTERVAL = 1 
START_TIME = 15:00:00
END_TIME = 15:00:10 
DURING_START_DATE = 2021-5-15 12:00:00 
DURING_END_DATE = 9999-12-31 23:59:59
NO_END_DATE_FLAG = 1 
DESCRIBE = RT_TIMER
IS_VALID = 1


4.6配置dmwatcher.ini

异步备库仅需本地守护(无自动切换功能),备库不参与主备集群的故障切换,仅接收数据,DW_TYPE = local

主节点:
su dmdba
vi /home/dmdba/config/dsc0_config/dmwatcher.ini
 
# 修改内容如下
[GRP1] #集群组名
DW_TYPE = LOCAL  #本地守护类型
DW_MODE = MANUAL #自动切换模式
DW_ERROR_TIME = 120  #远程守护进程故障认定时间
INST_RECOVER_TIME = 60  #主库守护进程启动恢复的间隔时间
INST_ERROR_TIME = 120  #本地实例故障认定时间
INST_OGUID = 453331   #守护系统唯一 OGUID 值
INST_INI = /home/dmdba/config/dsc0_config/dm.ini
DCR_INI=/home/dmdba/config/dmdcr.ini
INST_STARTUP_CMD = /home/dmdba/dmdbms/bin/DmServiceDSC0 start
INST_AUTO_RESTART = 0  ##打开实例的自动启动功能
RLOG_SEND_THRESHOLD = 0
RLOG_APPLY_THRESHOLD = 0

节点2:
su dmdba
vi /home/dmdba/config/dsc1_config/dmwatcher.ini
 
# 修改内容如下
[GRP1]
DW_TYPE = LOCAL
DW_MODE = MANUAL
DW_ERROR_TIME = 120
INST_RECOVER_TIME = 60
INST_ERROR_TIME = 120
INST_OGUID = 453331
INST_INI = /home/dmdba/config/dsc1_config/dm.ini
DCR_INI=/home/dmdba/config/dmdcr.ini
INST_STARTUP_CMD = /home/dmdba/dmdbms/bin/DmServiceDSC1 start
INST_AUTO_RESTART = 0
RLOG_SEND_THRESHOLD = 0
RLOG_APPLY_THRESHOLD = 0

备库:
su dmdba
vi /dmdata/data/DAMENGTEST1/dmwatcher.ini

 
# 修改内容如下
[GRP1] 
DW_TYPE = LOCAL
DW_MODE = MANUAL
DW_ERROR_TIME = 120
INST_RECOVER_TIME = 60 
INST_ERROR_TIME = 120 
INST_OGUID = 453331
INST_INI = /dmdata/data/DAMENGTEST1/dm.ini
INST_AUTO_RESTART = 0
INST_STARTUP_CMD = /home/dmdba/dmdbms/bin/DmServiceDAMENGTEST1 start 
RLOG_SEND_THRESHOLD = 0
RLOG_APPLY_THRESHOLD = 0 


4.7以mount状态启动实例

--修改启动脚本的启动状态都为mount
su dmdba
cd /home/dmdba/dmdbms/bin

vim DmServiceDSC0 vim DmServiceDSC1 vim DmServiceDAMENGTEST1 

START_MODE=open 修改成 START_MODE=mount

--先启动DSC集群的实例(尽量同步),再启动备库的实例
su dmdba
cd /home/dmdba/dmdbms/bin

./DmServiceDSC0 start

./DmServiceDSC1 start

./DmServiceDAMENGTEST1 start

这里配置了启动脚本打开的状态是mount,只要没有开启守护进程,就不会变成open状态。
用disql登录进去实例,就可以看到是不是mount状态了

4.8修改节点的oguid和模式(dmdba用户操作)

所有的实例都处于mount状态!
DSC集群任意节点设置就可以了,因为是同一个数据库。

DSC节点:
cd /home/dmdba/dmdbms/bin
./disql SYSDBA/Dameng123

SP_SET_PARA_VALUE(1, 'ALTER_MODE_STATUS', 1); 
sp_set_oguid(453331);
alter database primary;
SP_SET_PARA_VALUE(1, 'ALTER_MODE_STATUS', 0);
exit

备库
cd /home/dmdba/dmdbms/bin
./disql SYSDBA/Dameng123

SP_SET_PARA_VALUE(1, 'ALTER_MODE_STATUS', 1); 
sp_set_oguid(453331);
alter database standby;
SP_SET_PARA_VALUE(1, 'ALTER_MODE_STATUS', 0);
exit



4.9注册数据守护服务并启动守护进程(dmdba用户操作)

节点1:
su root
cd /home/dmdba/dmdbms/script/root/
./dm_service_installer.sh -t dmwatcher -p DSC0 -watcher_ini /home/dmdba/config/dsc0_config/dmwatcher.ini

--开启守护进程
su dmdba
./DmWatcherServiceDSC0 start

节点2:
su root
cd /home/dmdba/dmdbms/script/root/
./dm_service_installer.sh -t dmwatcher -p DSC1 -watcher_ini /home/dmdba/config/dsc1_config/dmwatcher.ini

--开启守护进程
su dmdba
./DmWatcherServiceDSC1 start

备库:
su root
cd /home/dmdba/dmdbms/script/root/
./dm_service_installer.sh -t dmwatcher -p DMSERVER1 -watcher_ini /dmdata/data/DAMENGTEST1/dmwatcher.ini

--开启守护进程
su dmdba
./DmWatcherServiceDMSERVER1 start
启动后确认数据库的状态,守护进程会将数据库实例服务全部拉起为open状态。
用disql查看
节点1:
cd /home/dmdba/dmdbms/bin
./disql SYSDBA/Dameng123@192.168.100.115:5236

exit

节点2:

cd /home/dmdba/dmdbms/bin
./disql SYSDBA/Dameng123@192.168.100.116:5236

exit

备库
cd /home/dmdba/dmdbms/bin
./disql SYSDBA/Dameng123
exit


4.10配置监视器

用一台新的,装有达梦数据库软件的主机配置
用dmdba用户新建确认监视器配置文件 dmmonitor.ini(dmmonitor.ini 存放目录没有限制,一般和 dm.ini 存放在同一个目录),执行以下命令

su dmdba
vi /home/dmdba/dmdbms/dmmonitor.ini	

#内容为
MON_DW_CONFIRM = 0  #0为普通监视器,要手动切换主备,1为确认监视器可自动切换主备
MON_LOG_PATH =/home/dmdba/dmdbms/log  #根据实际环境修改路径
MON_LOG_INTERVAL = 0  #每隔 0s 定时记录系统信息到日志文件
MON_LOG_FILE_SIZE = 32  #单个日志大小,单位 MB
MON_LOG_SPACE_LIMIT = 0 #日志上限,单位 MB
[GRP1]  #组名
MON_INST_OGUID = 453331  #组 GRP1 的唯一 OGUID 值
MON_DW_IP = 192.168.52.50:52141/192.168.52.51:52141  #DSC的MAL_HOST: MAL_DW_PORT
MON_DW_IP = 192.168.52.53:52141   #备库机的

#启动监视器
./dmmonitor /dmdata/data/dmdb/dmmonitor.ini
可以看到DSC集群和异步备库都是正常状态,WTYPE=LOCAL守护进程类型为LOCAL,不能自动切换主备,


4.11验证

DSC节点下执行:

./disql SYSDBA/Dameng123

--读
select * from TEST_DSC;
--写
INSERT INTO TEST_DSC VALUES (4, 'DSC集群+异步备份');
COMMIT; 


在异步备库上看不到实时的数据:

根据定时器设置的间隔时间,我这里设置的是每隔五分钟推送
五分钟后在备库这里就能看到DSC集群新增的数据了。

5.DSC+DW集群主备切换

在监视器输入命令查看当前集群可以切换的备机:

choose switchover

因为我这里只加装了一台备库,所以只显示一台:

组名就是dmwatcher.ini设置的组名

switchover GRP1.DMSERVER1

image.png

在备库机用disql进去就变成了主库

在备库机这里插入数据

./disql SYSDBA/Dameng123

--读
select * from TEST_DSC;
--写
INSERT INTO TEST_DSC VALUES (3, 'DSC+DW切换主备');
COMMIT; 


image.png
到DSC集群去查看

节点1:
switchover GRP1.DSC0
cd /home/dmdba/dmdbms/bin
./disql SYSDBA/Dameng123@192.168.100.115:5236

--读
select * from TEST_DSC;
exit

节点2:
cd /home/dmdba/dmdbms/bin
./disql SYSDBA/Dameng123@192.168.100.116:5236

--读
select * from TEST_DSC;

exit


image.png

6.关于DSC集群+DW集群启动关闭顺序

6.1关闭顺序

image.png

6.2开启顺序

image.png
配置dmcss自动拉起功能(启动了dmcss后,自动拉起ASM和DB服务,不需要手动启动):
修改DSC集群各个节点的dmdcr.ini文件

#定义ASM服务(DMASMSVR)故障后自动拉起的等待时间(秒)
#10秒后尝试拉起ASM服务

DMDCR_ASM_RESTART_INTERVAL = 10  #这里为0表示不自动拉起

#定义数据库实例(DMSERVER)故障后自动拉起的等待时间(秒)
#10秒后尝试拉起DB服务

DMDCR_DB_RESTART_INTERVAL = 10  #这里为0表示不自动拉起
#上面设置的时间实际上可能会更长,因为启动要时间

#ASM/DB服务需以系统服务形式注册(如 DmServiceDMSERVER),确保DMCSS可通过系统命令拉起服务
#启动 ASM 服务命令
DMDCR_ASM_STARTUP_CMD = /home/dmdba/dmdbms/bin/DmASMSvrService_DSC0 start 
#启动数据库实例命令
DMDCR_DB_STARTUP_CMD = /home/dmdba/dmdbms/bin/DmService_DSC0 start 
DMCSS会持续监控ASM/DB服务的活动状态。若服务异常停止且超时(达到配置的等待时间),DMCSS会自动重新启动服务

社区地址:https://eco.dameng.com

评论
后发表回复

作者

文章

阅读量

获赞

扫一扫
联系客服