讲解
DMDSC+异步备机,就是在原有的DMDSC集群上,为其部署一台备库,但该备库复制数据时,是异步的。
需要先明确一下概念,DMDSC集群,集群里每个数据库服务,都是1个节点。所有数据库服务(所有节点)视为一个DSC集群,它们是一个整体,不管有多少节点。
说通俗点,把这些节点,看成一个数据库服务即可。
其次,DMDSC集群这么多节点,虽然是一个整体,但是会有一个节点,负责控制其他的节点(就像个领头羊),那个节点的名字叫控制节点,其他节点都叫普通节点。
控制节点一般都是最早启动的那个服务。控制节点可以控制其他节点一起关闭(正常关闭集群时,只需在控制节点执行关闭命令,所有节点会同时跟它一起关闭,但是开启还得手动一个个开),
同时也具备切换功能,比如控制节点突发意外死亡了,那么其他的普通节点会切换为控制节点。
接下来说DMDSC+异步备机,主库是DMDSC集群(上面说了,不管DSC集群多少个节点,它们是一个整体),备库(异步备机)是一个单实例。
通俗点说,DMDSC集群这一堆节点(数据库服务)都是主库,备库是一个单机实例而已。
环境准备
本文默认搭建好DSC集群了,没搭建的先看此处进行搭建:达梦DMDSC集群部署搭建_dcps75321的博客-CSDN博客
然后准备一台新的linux机器,安装dm8并初始化好一个实例启动即可。
本文使用以下实例名:
DSC0,是dsc的0号节点
DSC1,是dsc的1号节点
DSC_DW,是异步备机
1、开始部署搭建
【关闭DSC】
关闭DSC所有节点的数据库服务,可直接在控制节点执行
若是后台启动,那就全部手动关闭
注意:若是配置了dmcss自动拉起功能,那么只能关闭整个dsc集群,关闭数据库服务后,再关闭asm,然后关闭css,速度要快一些,以防css自动拉起。关闭操作可查看第11步:达梦DMDSC集群部署搭建_dcps75321的博客-CSDN博客
DSC0节点:
cd /dmdbms/bin
./DmService stop
DSC1节点:
cd /dmdbms/bin
./DmService stop
【DSC集群做备份】
在DSC集群任意节点
查看是否开启map服务 没开则执行以下
cd /dmdbms/bin
./DmAPService start
启动dmrman
cd /dmdbms/bin
./dmrman use_ap=2 dcr_ini=/dmdbms/config/dmdcr.ini
做备份
RMAN>BACKUP DATABASE '/dmdbms/dmdata/dsc0_config/dm.ini' FULL BACKUPSET
'/home/dmdba/dsc_full_bak'
校验备份,显示successfully,即为备份集有效。
CHECK BACKUPSET '/home/dmdba/dsc_full_bak'
做完备份后把备份拷贝到异步备机上
scp -r dsc_full_bak/ dmdba@192.168.238.130:/dmbak
2、配置异步备库
本文默认创建好该备库实例了,若没创建的先创建再往下走。备库实例其实就是一个单机实例而已,按照单机实例创建即可。创建好后必须启动实例以完成初始化,并配置后台启动。
【关闭并检查备库机器】
关闭备库数据库服务
#备库
cd /dmdbms/bin
./DmService stop
查看是否开启map服务,没开则执行以下
./DmAPService start
【备库脱机还原恢复】
开启dmrman
./dmrman USE_AP=2
使用 DMDSC 库的备份集还原恢复到异步备库,按顺序执行
RESTORE DATABASE '/dmdata/DAMENG/dm.ini' FROM BACKUPSET '/dmbak/dsc_full_bak';
RECOVER DATABASE '/dmdata/DAMENG/dm.ini' FROM BACKUPSET '/dmbak/dsc_full_bak';
RECOVER DATABASE '/dmdata/DAMENG/dm.ini' update db_magic;
【配置dm.ini】
依次配置DMDSC主库每个节点与异步备库的dm.ini文件
(1)修改DSC0的dm.ini
cd /dmdata/dsc0_config
vim dm.ini
INSTANCE_NAME = DSC0
PORT_NUM = 5237 #数据库实例监听端口
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
(2)修改DSC1的dm.ini
cd /dmdata/dsc1_config
vim dm.ini
NSTANCE_NAME = DSC1
PORT_NUM = 5237 #数据库实例监听端口
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
(3)修改DSC_DW的dm.ini文件
cd /dmdata/DSC_DW
vim dm.ini
INSTANCE_NAME = DSC_DW
PORT_NUM = 5237 #数据库实例监听端口
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
【配置dmmal.ini】
在 DMDSC 集群的 dmmal.ini 文件基础上,增加备库 DSC_DW 的配置项。
所有节点实例的 dmmal.ini 文件内容是一致的,修改之后,拷贝到dsc所有节点,以及异步备机。
#所有节点,包括DSC_DW
vim dmmal.ini
MAL_CHECK_INTERVAL = 30
MAL_CONN_FAIL_INTERVAL = 10
[MAL_INST0]
MAL_INST_NAME = DSC0
MAL_HOST = 10.10.1.115
MAL_PORT = 11246
MAL_INST_HOST = 192.168.1.115
MAL_INST_PORT = 5237
MAL_DW_PORT = 11296
MAL_INST_DW_PORT = 11306
[MAL_INST1]
MAL_INST_NAME = DSC1
MAL_HOST = 10.10.1.116
MAL_PORT = 11246
MAL_INST_HOST = 192.168.1.116
MAL_INST_PORT = 5237
MAL_DW_PORT = 11296
MAL_INST_DW_PORT = 11306
[MAL_INST2]
MAL_INST_NAME = DSC_DW
MAL_HOST = 10.10.1.117
MAL_PORT = 11246
MAL_INST_HOST = 192.168.1.117
MAL_INST_PORT = 5237
MAL_DW_PORT = 11296
MAL_INST_DW_PORT = 11306
【配置dmarch.ini】
编辑各个节点的dmarch.ini,增加异步归档配置
(1)修改DSC0的dmarch.ini
cd /dmdata/dsc0_config
vim dmarch.ini
ARCH_LOCAL_SHARE=1
ARCH_LOCAL_SHARE_CHECK=0
[ARCHIVE_LOCAL1]
ARCH_TYPE = LOCAL
ARCH_DEST = +DMARCH/DSC0/arch
ARCH_FILE_SIZE = 1024
ARCH_SPACE_LIMIT = 40960
[ARCH_REMOTE1]
ARCH_TYPE = REMOTE
ARCH_DEST = DSC1
ARCH_INCOMING_PATH =+DMARCH/DSC1/arch_remote
ARCH_FILE_SIZE = 1024
ARCH_SPACE_LIMIT = 40960
[ARCHIVE_ASYNC]
ARCH_TYPE = ASYNC
ARCH_DEST = DSC_DW
ARCH_TIMER_NAME = RT_TIMER
(2)修改DSC1的dmarch.ini
cd /dmdata/dsc1_config
vim dmarch.ini
ARCH_LOCAL_SHARE=1
ARCH_LOCAL_SHARE_CHECK=0
[ARCHIVE_LOCAL1]
ARCH_TYPE = LOCAL
ARCH_DEST = +DMARCH/DSC1/arch
ARCH_FILE_SIZE = 1024
ARCH_SPACE_LIMIT = 40960
[ARCH_REMOTE1]
ARCH_TYPE = REMOTE
ARCH_DEST = DSC0
ARCH_INCOMING_PATH =+DMARCH/DSC0/arch_remote
ARCH_FILE_SIZE = 1024
ARCH_SPACE_LIMIT = 40960
[ARCHIVE_ASYNC]
ARCH_TYPE = ASYNC
ARCH_DEST = DSC_DW
ARCH_TIMER_NAME = RT_TIMER
(3)修改DSC_DW的dmarch.ini
cd /dmdata/DSC_DW
vim dmarch.ini
[ARCHIVE_LOCAL1]
ARCH_TYPE = LOCAL
ARCH_DEST = /dmarch
ARCH_FILE_SIZE = 2048
ARCH_SPACE_LIMIT = 102400
【配置dmtimer.ini】
(1)配置DSC0的dmtimer.ini
cd /dmdata/dsc0_config
vim dmtimer.ini
[RT_TIMER]#和dmarch.ini中的ARCH_TIMER_NAME一致
TYPE = 2
FREQ_MONTH_WEEK_INTERVAL = 1
FREQ_SUB_INTERVAL = 0
FREQ_MINUTE_INTERVAL = 0
START_TIME = 01:00:00
END_TIME = 01:00:10
DURING_START_DATE = 2016-02-11 17:36:09
DURING_END_DATE = 9999-12-31 23:59:59
NO_END_DATE_FLAG = 1
DESCRIBE = RT TIMER
IS_VALID = 1
(2)配置DSC1的dmtimer.ini
cd /dmdata/dsc1_config
vim dmtimer.ini
[RT_TIMER]#和dmarch.ini中的ARCH_TIMER_NAME一致
TYPE = 2
FREQ_MONTH_WEEK_INTERVAL = 1
FREQ_SUB_INTERVAL = 0
FREQ_MINUTE_INTERVAL = 0
START_TIME = 01:00:00
END_TIME = 01:00:10
DURING_START_DATE = 2016-02-11 17:36:09
DURING_END_DATE = 9999-12-31 23:59:59
NO_END_DATE_FLAG = 1
DESCRIBE = RT TIMER
IS_VALID = 1
【配置dmwatcher.ini】
(1)配置DSC0的dmwatcher.ini
cd /dmdata/dsc0_config
vim dmwatcher.ini
[GRP1]
DW_TYPE = LOCAL
DW_MODE = MANUAL
DW_ERROR_TIME = 60
INST_RECOVER_TIME = 60
INST_ERROR_TIME = 35
INST_INI = /dmdata/dsc0_config/dm.ini
DCR_INI = /dmdata/dmdcr.ini
INST_OGUID = 453331
INST_STARTUP_CMD = /dmdbms/bin/dmserver
INST_AUTO_RESTART = 0
RLOG_SEND_THRESHOLD = 0
RLOG_APPLY_THRESHOLD = 0
(2)配置DSC1的dmwatcher.ini
cd /dmdata/dsc1_config
vim dmwatcher.ini
[GRP1]
DW_TYPE = LOCAL
DW_MODE = MANUAL
DW_ERROR_TIME = 60
INST_RECOVER_TIME = 60
INST_ERROR_TIME = 35
INST_INI = /dmdata/dsc1_config/dm.ini
DCR_INI = /dmdata/dmdcr.ini
INST_OGUID = 453331
INST_STARTUP_CMD = /dmdbms/bin/dmserver
INST_AUTO_RESTART = 0
RLOG_SEND_THRESHOLD = 0
RLOG_APPLY_THRESHOLD = 0
(3)配置DSC_DW的dmwatcher.ini
cd /dmdata/DSC_DW
vim dmwatcher.ini
[GRP1]
DW_TYPE = LOCAL
DW_MODE = MANUAL
DW_ERROR_TIME = 60
INST_RECOVER_TIME = 60
INST_ERROR_TIME = 35
INST_INI = /dmdata/DSC_DW/dm.ini
INST_OGUID = 453331
INST_STARTUP_CMD = /dmdbms/bin/dmserver
INST_AUTO_RESTART = 0
RLOG_SEND_THRESHOLD = 0
RLOG_APPLY_THRESHOLD = 0
【配置dmmonitor.ini】
配置在备库的/dmdbms/bin目录下
cd /dmdbms/bin
vim dmmonitor.ini
MON_LOG_PATH = /dmdbms/log
MON_LOG_INTERVAL = 60
MON_LOG_FILE_SIZE = 64
MON_LOG_SPACE_LIMIT = 0
MON_DW_CONFIRM = 0
[GRP1]
MON_INST_OGUID = 453331
MON_DW_IP = 10.10.1.115:11296/10.10.1.116:11296
MON_DW_IP = 10.10.1.117:11296
【启动主备库】
(1)启动DMDSC主库
以mount状态启动,若是后台启动,改启动脚本START_MODE=open改为START_MODE=mount
./DmService start
把dsc所有节点全部启动,使其所有节点都启动成功
可查看实例日志,看到SYSTEM IS READY表示启动完成
【启动异步备库】
(1)修改DmService后台启动脚本
以mount状态启动
vi DmService
把START_MODE=open改为START_MODE=mount
(2)启动异步备库数据库服务
cd /dmdbms/bin
./DmService start
【设置OGUID】
启动命令行工具disql,连接DMDSC集群中的任意一个节点,设置DMDSC主库的OGUID值
SQL>SP_SET_PARA_VALUE(1, 'ALTER_MODE_STATUS', 1);
SQL>SP_SET_OGUID(453331);
SQL>SP_SET_PARA_VALUE(1, 'ALTER_MODE_STATUS', 0);
再使用disql,连接异步备库,设置备库OGUID值
SQL>SP_SET_PARA_VALUE(1, 'ALTER_MODE_STATUS', 1);
SQL>SP_SET_OGUID(453331);
SQL>SP_SET_PARA_VALUE(1, 'ALTER_MODE_STATUS', 0);
【修改主库模式】
使用disql,连接DMDSC集群中的任意一个节点,设置DMDSC主库的primary模式
SQL>ALTER DATABASE PRIMARY;
使用disql,连接异步备库,设置备库的standby模式
SQL>ALTER DATABASE STANDBY;
【配置守护进程】
(1)修改守护进程后台启动脚本
在每个节点的目录/dmdbms/bin/service_template
拷贝DmWatcherService文件到/ dmdbms/bin目录下
然后修改DmWatcherService中 INI_PATH为指定守护进程配置文件dmwatcher.ini的对应的路径。
(2)启动守护进程
启动DSC0的守护进程
./DmWatcherService start
启动DSC1的守护进程
./DmWatcherService start
启动DSC_DW的守护进程
./DmWatcherService start
【确认数据库状态】
登录disql,查看DMDSC主库两个节点是否为主库打开状态
登录disql,查看异步备库节点是否为备库打开状态
【修改dmdcr.ini脚本】可选执行
修改DMDSC两个节点上的dmdcr.ini文件,让dmcss自动拉起dmasm和dmserver服务
这样只需要分别在两台机器上启动dmcss服务即可拉起dmasm服务和dmserver服务。
(1)修改DSC0节点:
cd /dmdata
vim dmdcr.ini
DMDCR_PATH = /dev/asm-dmdcr
DMDCR_MAL_PATH =/dmdata/dmasvrmal.ini
DMDCR_SEQNO = 0
DMDCR_ASM_RESTART_INTERVAL = 30
DMDCR_ASM_STARTUP_CMD = /dmdbms/bin/dmasmsvr dcr_ini=/dmdata/dmdcr.ini
DMDCR_DB_RESTART_INTERVAL = 60
DMDCR_DB_STARTUP_CMD = /dmdbms/bin/dmserver path=/dmdata/dsc0_config/dm.ini dcr_ini=/dmdata/dmdcr.ini
(2)修改DSC1节点:
cd /dmdata
vim dmdcr.ini
DMDCR_PATH = /dev/asm-dmdcr
DMDCR_MAL_PATH =/dmdata/dmasvrmal.ini
DMDCR_SEQNO = 1
DMDCR_ASM_RESTART_INTERVAL = 30
DMDCR_ASM_STARTUP_CMD = /dmdbms/bin/dmasmsvr dcr_ini=/dmdata/dmdcr.ini
DMDCR_DB_RESTART_INTERVAL = 60
DMDCR_DB_STARTUP_CMD = /dmdbms/bin/dmserver path=/dmdata/dsc0_config/dm.ini dcr_ini=/dmdata/dmdcr.ini
修改之后需要重启DMDSC+异步备机,才可以生效
(1)关闭异步备机的守护进程
./DmWatcherService stop
(2)关闭DMDSC主库两个节点的守护进程
./DmWatcherService stop
(3)关闭DMDSC主库两个节点的数据库服务
./DmService stop
(4)关闭异步备机的数据库服务
./DmService stop
(5)关闭DMDSC主库两个节点的ASM服务
./DmASMSvrService stop
(6)关闭DMDSC主库两个节点的CSS服务
./DmCSSService stop
启动DMDSC+异步备机集群
(1)启动DMDSC主库两个节点的CSS服务
./DmCSSService start
等待2分钟,查看css是否将asm和server拉起,拉起后再启动下面的服务
ps -ef | grep dmdbms
(4)启动异步备机的数据库服务
./DmService start
(5)启动DMDSC主库两个节点的守护进程
./DmWatcherService start
(6)启动异步备机的守护进程
./DmWatcherService start
【关闭DMDSC集群】可选执行
必须严格按照以下顺序停止DMDSC集群,每个操作步骤直接的时间间隔不要超过30秒
(1)关闭异步备机的守护进程
./DmWatcherService stop
(2)关闭DMDSC主库两个节点的守护进程
./DmWatcherService stop
(3)关闭DMDSC主库两个节点的数据库服务
./DmService stop
(4)关闭异步备机的数据库服务
./DmService stop
(5)关闭DMDSC主库两个节点的ASM服务
./DmASMSvrService stop
(6)关闭DMDSC主库两个节点的CSS服务
./DmCSSService stop
注:正常停库时必须2节点同时停止,根据目前脚本配置,CSS启动后30秒自动拉起DmASMSvrService,ASM启动后1分钟自动拉起DmService,所以停止DmService和DmASMSvrService后要尽快停下一个服务,避免被自动拉起,同时DmASMSvrService服务在任意一个节点停止会停2个节点的ASM服务,为了保险起见也可以两边都停止下,全部停止后要观察后台进程是否全部停止。
【DMDSC+异步备机集群监控】
在dsc的控制节点,/dmdbms/bin目录下(安装目录)新建一个dmcssm.ini文件,写入以下:
CSSM_OGUID = 63635
CSSM_CSS_IP = DSC0的ip:11286
CSSM_CSS_IP = DSC1的ip:11286
CSSM_LOG_PATH = ../log
CSSM_LOG_FILE_SIZE = 32
CSSM_LOG_SPACE_LIMIT = 0
启动css的监视器
./dmcssm INI_PATH=dmcssm.ini
启动数据守护监视器
cd /dmdbms/bin
./dmmonitor dmmonitor.ini
查看主备库状态是否正常,正常即完成部署。