DSC+主备+异步备库搭建
本次在DSC的基础上进行主备集群+异步备库的搭建,实现DSC+主备+异步备库的集合。
这里DMDSC集群是看做一个数据库服务(即DSC集群内的都叫主库),备库是一个单机实例
环境配置
服务器配置
端口配置
实例名 | PORT_NUM | MAL_INST_DW_PORT | MAL_HOST | MAL_PORT | MAL_DW_PORT |
---|---|---|---|---|---|
DSC1 | 5236 | 4567 | 10.10.10.7 | 9236 | 3567 |
DSC2 | 5236 | 4568 | 10.10.10.4 | 9236 | 3568 |
DSC_beiku | 5236 | 4569 | 10.10.10.2 | 9236 | 3569 |
DSC_yibu | 5236 | 4570 | 10.10.10.8 | 9236 | 3570 |
操作系统及数据库配置
- 操作系统:CentOS7.9
- 数据库:dm8_20240408_x86_rh7_64
配置DMDSC主库环境
DMDSC搭建
- 这里参考:http://t.csdnimg.cn/M8kSE
- 搭建完之后,正常退出DMDSC集群的两个dmserver节点实例,不需要退出dmcss和dmasmsvr
配置dmarch.ini
-
分别编辑两个DMDSC节点的dmarch.ini文件,增加本地归档和远程归档。
-
配置DSC1的dmarch.ini文件
vi /home/dmdba/config/dsc1/dmarch.ini
-
内容:
ARCH_LOCAL_SHARE = 1[ARCHIVE_LOCAL1]ARCH_TYPE = LOCAL ARCH_DEST = +DMDATA/DSC/DSC1/archARCH_FILE_SIZE = 128 ARCH_SPACE_LIMIT = 0 [ARCHIVE_REMOTE]ARCH_TYPE = REMOTEARCH_DEST = DSC1ARCH_FILE_SIZE = 128ARCH_SPACE_LIMIT = 0 ARCH_INCOMING_PATH = +DMDATA/DSC/DSC2/arch
-
-
配置DSC2的dmarch.ini文件
vi /home/dmdba/config/dsc2/dmarch.ini
-
内容如下:
ARCH_LOCAL_SHARE = 1[ARCHIVE_LOCAL1]ARCH_TYPE = LOCALARCH_DEST = +DMDATA/DSC/DSC2/archARCH_FILE_SIZE = 128ARCH_SPACE_LIMIT = 0[ARCHIVE_REMOTE]ARCH_TYPE = REMOTEARCH_DEST = DSC0ARCH_FILE_SIZE = 128ARCH_SPACE_LIMIT = 0ARCH_INCOMING_PATH = +DMDATA/DSC/DSC1/arch
-
-
配置dm.ini
-
分别编辑两个DMDSC节点的dm.ini文件,打开归档参数
ARCH_INI = 1
备份DMDSC库
-
重启两个DMDSC集群的dmserver实例,然后再正常退出,便于后续校验日志连续型时使用
-
启用dmrman
./dmrman use_ap=2 dcr_ini=/home/dmdba/config/dmdcr.ini
-
脱机备份DMDSC集群
BACKUP DATABASE '/home/dmdba/config/dsc1/dm.ini' FULL BACKUPSET '/home/dmdba/config/dsc1/bak/db_full_bak_for_DSC';
-
将备份拷贝到单机备库上
scp -r bak/ 192.168.19.139:/home/dmdba/dmbak
-
配置主备库环境
初始化备库
-
启动dmrman,使用DMDSC库的备份集还原恢复到单节点备库
##启动dmrman ./dmrman use_ap=2##还原备份 RMAN>RESTORE DATABASE '/home/dmdba/dmdbms/data/DSC/dm.ini' FROM BACKUPSET '/home/dmdba/dmbak/bak/db_full_bak_for_DSC';RMAN>RECOVER DATABASE '/home/dmdba/dmdbms/data/DSC/dm.ini' FROM BACKUPSET '/home/dmdba/dmbak/bak/db_full_bak_for_DSC';RMAN>RECOVER DATABASE '/home/dmdba/dmdbms/data/DSC/dm.ini' UPDATE DB_MAGIC;
配置dm.ini
依次配置DSC主库所有节点和单节点备库的dm.ini
-
配置DSC1节点的dm.ini文件
-
主要修改的内容如下:
##实例名,建议使用“组名_守护环境_序号”的命名方式,总长度不能超过16INSTANCE_NAME = DSC1PORT_NUM = 5236 ##数据库实例监听端口DW_INACTIVE_INTERVAL = 60 ##接收守护进程消息超时时间ALTER_MODE_STATUS = 0 ##不允许手工方式修改实例模式/状态/OGUIDENABLE_OFFLINE_TS = 2 ##不允许备库OFFLINE表空间MAL_INI = 1 ##打开MAL系统ARCH_INI = 1 ##打开归档配置RLOG_SEND_APPLY_MON = 64 ##统计最近64次的日志发送信息
- 我这里使用CONSOLE工具,这里展示一个就好,其他的都是一样查找之后进行修改
-
-
配置DSC2的dm.ini文件
-
主要的配置内容:
INSTANCE_NAME = DSC2PORT_NUM = 5236DW_INACTIVE_INTERVAL = 60ALTER_MODE_STATUS = 0ENABLE_OFFLINE_TS = 2MAL_INI = 1ARCH_INI = 1RLOG_SEND_APPLY_MON = 64
-
-
配置单机备库DSC_beiku的dm.ini文件
-
主要的内容:
INSTANCE_NAME = DSC_beikuPORT_NUM = 5236DW_INACTIVE_INTERVAL = 60ALTER_MODE_STATUS = 0ENABLE_OFFLINE_TS = 2MAL_INI = 1ARCH_INI = 1RLOG_SEND_APPLY_MON = 64
-
配置dmmal.ini文件
-
在DMDSC集群的dmmal.ini基础上,增加备库DSC_beiku的配置顶
-
所有实例的dmmal.ini文件内容一致,配置完后直接复制到对应的目录就行
MAL_CHECK_INTERVAL = 30 ##MAL链路检测时间间隔 MAL_CONN_FAIL_INTERVAL = 10 ##判定MAL链路断开的时间[MAL_INST0]MAL_INST_NAME = DSC1 ##实例名,和dm.ini中的INSTANCE_NAME一致MAL_HOST = 10.10.10.7 ##MAL系统监听TCP连接的IP地址MAL_PORT = 9236 ##MAL系统监听TCP连接的端口MAL_INST_HOST = 192.168.19.130 ##实例的对外服务IP地址MAL_INST_PORT = 5236 ##实例的对外服务端口,和dm.ini中的PORT_NUM一致MAL_DW_PORT = 3567 ##实例本地的守护进程监听TCP连接的端口MAL_INST_DW_PORT = 4567 ##实例监听守护进程TCP连接的端口[MAL_INST1]MAL_INST_NAME = DSC2 ##实例名,和dm.ini中的INSTANCE_NAME一致MAL_HOST = 10.10.10.4 ##MAL系统监听TCP连接的IP地址MAL_PORT = 9236 ##MAL系统监听TCP连接的端口MAL_INST_HOST = 192.168.19.137MAL_INST_PORT = 5236MAL_DW_PORT = 3568MAL_INST_DW_PORT = 4568[MAL_INST2]MAL_INST_NAME = DSC_BEIKUMAL_HOST = 10.10.10.2MAL_PORT = 9236MAL_INST_HOST = 192.168.19.139MAL_INST_PORT = 5236MAL_DW_PORT = 3569MAL_INST_DW_PORT = 4569
-
配置dmarch.ini
再次编辑各个节点的 dmarch.ini 文件,增加实时归档配置
-
修改DSC1的dmarch.ini文件
vi /home/dmdba/config/dsc1
-
内容:
ARCH_LOCAL_SHARE = 1[ARCHIVE_LOCAL1]ARCH_TYPE = LOCAL ARCH_DEST = +DMDATA/DSC/DSC1/archARCH_FILE_SIZE = 128 ARCH_SPACE_LIMIT = 0 [ARCHIVE_REMOTE]ARCH_TYPE = REMOTEARCH_DEST = DSC2ARCH_FILE_SIZE = 128ARCH_SPACE_LIMIT = 0 ARCH_INCOMING_PATH = +DMDATA/DSC/DSC2/arch[ARCHIVE_REALTIME]ARCH_TYPE = REALTIMEARCH_DEST = DSC_BEIKU
-
-
修改DSC2的dmarch.ini文件
vi /home/dmdba/config/dsc2
-
内容:
ARCH_LOCAL_SHARE = 1[ARCHIVE_LOCAL1]ARCH_TYPE = LOCALARCH_DEST = +DMDATA/DSC/DSC2/archARCH_FILE_SIZE = 128ARCH_SPACE_LIMIT = 0[ARCHIVE_REMOTE]ARCH_TYPE = REMOTEARCH_DEST = DSC1ARCH_FILE_SIZE = 128ARCH_SPACE_LIMIT = 0ARCH_INCOMING_PATH = +DMDATA/DSC/DSC1/arch[ARCHIVE_REALTIME] ARCH_TYPE = REALTIME ARCH_DEST = DSC_BEIKU
-
-
修改DSC_beiku的dmarch.ini文件
vi /home/dmdba/dmdbms/data/DSC
-
内容:
[ARCHICE_LOCAL1]ARCH_TYPE = LOCALARCH_DEST = /home/dmdba/dmdbms/data/DSC/archARCH_FILE_SIZE = 128ARCH_SPACE_LIMIT = 0[ARCHIVE_REALTIME1]ARCH_TYPE = REALTIMEARCH_DEST = DSC1/DSC2
-
配置dmwatcher.ini文件
依次配置每个节点实例的 dmwatcher.ini 文件
注意:
DMDSC 集群各节点实例的自动拉起是由各自本地的 dmcss 执行的,不是由守护进程执行,如果要打开 DMDSC 集群的自动拉起,需要再去配置 dmdcr.ini 中的自动拉起参数。
-
配置DSC1的dmwatcher.ini文件
-
位置
vi /home/dmdba/config/dsc1/dmwatcher.ini
-
内容:
[GRP1]DW_TYPE = GLOBAL ##全局守护类型DW_MODE = MANUAL ##手动切换模式DW_ERROR_TIME = 60 ##远程守护进程故障认定时间INST_RECOVER_TIME = 60 ##主库守护进程启动恢复的间隔时间INST_ERROR_TIME = 35 ##本地实例故障认定时间INST_INI = /home/dmdba/config/dsc1/dm.ini ##dm.ini配置文件路径DCR_INI = /home/dmdba/config/dmdcr.ini ##dmdcr.ini配置文件路径INST_OGUID = 1000 ##守护系统唯一OGUID值INST_STARTUP_CMD = /home/dmdba/dmdbms/bin/dmserver ##命令行方式启动INST_AUTO_RESTART = 0 ##关闭实例的自动启动功能RLOG_SEND_THRESHOLD = 0 ##指定主库发送日志到备库的时间阈值,默认关闭RLOG_APPLY_THRESHOLD = 0 ##指定备库重演日志的时间阈值,默认关闭
-
-
配置DSC2的dmwatcher.ini文件
-
位置
vi /home/dmdba/config/dsc2/dmwatcher.ini
-
内容:
[GRP1]DW_TYPE = GLOBALDW_MODE = MANUALDW_ERROR_TIME = 60INST_RECOVER_TIME = 60INST_ERROR_TIME = 35INST_INI = /home/dmdba/config/dsc2/dm.iniDCR_INI = /home/dmdba/config/dmdcr.iniINST_OGUID = 1000INST_STARTUP_CMD = /home/dmdba/dmdbms/bin/dmserverINST_AUTO_RESTART = 0RLOG_SEND_THRESHOLD = 0RLOG_APPLY_THRESHOLD = 0
-
-
配置DSC_beiku的dmwatcher.ini文件
-
位置
vi /home/dmdba/dmdbms/data/DSC/dmwatcher.ini
-
内容:
[GRP1]DW_TYPE = GLOBALDW_MODE = MANUALDW_ERROR_TIME = 60INST_RECOVER_TIME = 60INST_ERROR_TIME = 35INST_INI = /home/dmdba/dmdbms/data/DSC/dm.iniINST_OGUID = 1000INST_STARTUP_CMD = /home/dmdba/dmdbms/bin/dmserverINST_AUTO_RESTART = 0 ##对单节点,如果需要打开自动拉起功能,将此配置修改为1即可RLOG_SEND_THRESHOLD = 0RLOG_APPLY_THRESHOLD = 0
-
配置dmmonitor.ini
-
在备库上添加监视器,放在/home/dmdba/dmdbms/data目录下
MON_LOG_PATH = /home/dmdba/dmdbms/data/logMON_LOG_INTERVAL = 60MON_LOG_FILE_SIZE = 64MON_LOG_SPACE_LIMIT = 0MON_DW_CONFIRM = 0[GRP1]MON_INST_OGUID = 1000MON_DW_IP = 10.10.10.7:3567/10.10.10.4:3568MON_DW_IP = 10.10.10.2:3569
启动主备库
启动主库
-
启动DMDSC集群的两个dmserver实例(注意实例要使用Mount方式启动)
-
DSC1启动实例:
./dmserver path=/home/dmdba/config/dsc1/dm.ini dcr_ini=/home/dmdba/config/dmdcr.ini mount
-
DSC2启动实例:
./dmserver path=/home/dmdba/config/dsc2/dm.ini dcr_ini=/home/dmdba/config/dmdcr.ini mount
-
报错处理:这里我遇到错误:
Local instance isDSC cluster,need configure remote archive!
-
原因:未开启归档
-
解决方法:需要开启归档配置
alter database mount; alter database archivelog; alter database add archivelog 'DEST=/home/dmdba/dmarch, TYPE=LOCAL, FILE_SIZE=1024, SPACE_LIMIT=102400'; alter database add archivelog 'DEST=dsc1, TYPE=REMOTE, FILE_SIZE=1024, SPACE_LIMIT=102400, INCOMING_PATH=/home/dmdba/remote_arch'; alter database open;
- 先要启动好实例,再用disql工具连接进行归档配置
-
-
报错:
Remote/local archive path is equal to local/remote archive path of the other node,please check ini configure and try again!
- 原因:两个节点的归档配置文件上的本地和远程归档路径没有相互对应
- 解决方法:对比两个节点的dmarch.ini文件,要节点1的本地归档的路径能与节点2的远程归档路径对应
-
启动单节点备库
-
使用服务的方式启动
DmServiceDSC_beiku start mount
设置OGUID
-
主库:
-
连接DSC集群任意节点,我这里使用DSC1节点,设置DMDSC的主库OGUID值
SQL>SP_SET_PARA_VALUE(1, 'ALTER_MODE_STATUS', 1);SQL>SP_SET_OGUID(1000);SQL>SP_SET_PARA_VALUE(1, 'ALTER_MODE_STATUS', 0);
-
-
备库:
-
连接单节点备库,设置OGUID
SQL>SP_SET_PARA_VALUE(1, 'ALTER_MODE_STATUS', 1);SQL>SP_SET_OGUID(1000);SQL>SP_SET_PARA_VALUE(1, 'ALTER_MODE_STATUS', 0);
-
修改主备模式
-
主库:
-
连接DSC集群任意节点,同样是DSC1节点,修改DMDSC库为Primary模式
SQL>ALTER DATABASE PRIMARY;
-
-
备库:
-
连接单节点备库,修改备库为 Standby 模式
SQL>ALTER DATABASE STANDBY;
-
启动守护进程
-
主库:
-
启动DMDSC集群的所有守护进程(2个)
./dmwatcher /home/dmdba/config/dsc1/dmwatcher.ini./dmwatcher /home/dmdba/config/dsc2/dmwatcher.ini
-
-
备库:
-
启动备库的守护进程:
./dmwatcher /home/dmdba/dmdbms/data/DAMENG/dmwatcher.ini
-
启动监视器
-
在备库上利用配置好的dmmonitor.ini启动监视器
./dmmonitor path=/home/dmdba/dmdbms/data/DAMENG/dmmonitor.ini
-
DMDSC集群上也有自己的监视器,需要时也可以启动
./dmcssm ini_path=/home/dmdba/config/dmcssm.ini
-
在监视器上使用
show
命令查看集群状态- 这里DSC1的实例没有启动起来,但是可以看出,DSC集群中一个节点出现故障不会影响整个主备集群
至此,在DSC集群的基础上添加实时备库的部署就完成了。
配置异步备库
数据准备
-
数据备份
-
同样的在数据库脱机情况下,使用dmrman工具进行脱机备份
./dmrman use_ap=2 dcr_ini=/home/dmdba/config/dmdcr.ini RMAN>BACKUP DATABASE '/home/dmdba/config/dsc1/dm.ini' FULL BACKUPSET '/home/dmdba/config/dsc1/bak/db_full_bak2_for_DSC'; RMAN>EXIT
-
-
数据还原
-
将备份文件拷贝到异步备库DSC_yibu上,然后进行初始化库、还原操作
##在DSC主库上进行拷贝 scp -r /home/dmdba/config/dsc1/bak/db_full_bak2_for_DSC/ dmdba@192.168.19.142:/home/dmdba/dmbak#回到备机DW_LC,打开dmrman进行还原恢复 ./dmrman use_ap=2 RESTORE DATABASE '/home/dmdba/dmdbms/data/DSC/dm.ini' FROM BACKUPSET '/home/dmdba/dmbak/db_full_bak2_for_DSC'; RECOVER DATABASE '/home/dmdba/dmdbms/data/DSC/dm.ini' FROM BACKUPSET '/home/dmdba/dmbak/db_full_bak2_for_DSC'; RECOVER DATABASE '/home/dmdba/dmdbms/data/DSC/dm.ini' UPDATE DB_MAGIC;
-
配置dm.ini
-
DSC集群、实时备库
-
前面已经配置好了很多参数了,这里只用再配置一个即可
TIMER_INI = 1
-
-
异步备库
-
异步备库需要配置的就比较多
INSTANCE_NAME = DSC_yibu PORT_NUM = 5236 ##数据库实例监听端口 ALTER_MODE_STATUS = 0 ##不允许手工方式修改实例模式/状态/OGUID ENABLE_OFFLINE_TS = 2 ##不允许备库OFFLINE表空间 MAL_INI = 1 ##打开MAL系统 ARCH_INI = 1 ##打开归档配置
-
配置dmmal.ini
-
所有的实例的dmmal.ini配置文件都是一样的内容,这里因为有了异步备库的加入,所以需要在之前的基础上添加异步备库的相关配置信息
-
增加的内容:
[MAL_INST3]MAL_INST_NAME = DSC_yibuMAL_HOST = 10.10.10.8 ##MAL系统监听TCP连接的IP地址MAL_PORT = 9236 ##MAL系统监听TCP连接的端口MAL_INST_HOST = 192.168.19.142 ##实例的对外服务IP地址MAL_INST_PORT = 5236 ##实例的对外服务端口,和dm.ini中的PORT_NUM一致MAL_DW_PORT = 3670 ##实例对应的守护进程监听TCP连接的端口MAL_INST_DW_PORT = 4570 ##实例监听守护进程TCP连接的端口
-
配置dmarch.ini
-
DSC集群、实时备库
-
在之前的基础上,增加异步备库的归档配置
[ARCHIVE_ASYNC]ARCH_TYPE = ASYNC ##异步归档ARCH_DEST = DSC_yibu ##异步归档目标实例名ARCH_TIMER_NAME = RT_TIMER ##定时器名称,和dmtimer.ini中的名称一致
-
-
异步备库
-
异步备库未配置dmarch.ini,这里进行添加配置
##添加dmarch.ini vi /home/dmdba/dmdbms/data/DSC/dmarch.ini##配置信息: [ARCHIVE_LOCAL1]ARCH_TYPE = LOCAL ##本地归档类型ARCH_DEST = /home/dmdba/dmdbms/data/DSC/arch ##本地归档文件路径ARCH_FILE_SIZE = 128 ##单位Mb,本地单个归档文件最大值ARCH_SPACE_LIMIT = 0 ##单位Mb,0表示无限制
-
配置dmtimer.ini
-
这和配置文件只需在DSC集群和实时备库上进行配置,用于定时触发实例发送归档日志到异步备库。
-
放置位置:
##DSC1 vi /home/dmdba/config/dsc1/dmtimer.ini##DSC2 vi /home/dmdba/config/dsc2/dmtimer.ini##DSC_beiku vi /home/dmdba/dmdbms/data/DSC/dmtimer.ini
-
配置内容:
[RT_TIMER] ##和dmarch.ini中的ARCH_TIMER_NAME一致TYPE = 2FREQ_MONTH_WEEK_INTERVAL = 1FREQ_SUB_INTERVAL = 0FREQ_MINUTE_INTERVAL = 0START_TIME = 17:30:00END_TIME = 17:31:00DURING_START_DATE = 2016-02-11 17:36:09DURING_END_DATE = 9999-12-31 23:59:59NO_END_DATE_FLAG = 1DESCRIBE = RT TIMERIS_VALID = 1
-
配置dmwatcher.ini
-
这里DSC集群和实时备库已经配置好了,所以只需要配置异步备库的dmwatcher.ini就好
[GRP1]DW_TYPE = LOCAL ##本地守护类型DW_MODE = MANUAL ##故障手动切换模式DW_ERROR_TIME = 10 ##远程守护进程故障认定时间INST_ERROR_TIME = 10 ##本地实例故障认定时间INST_OGUID = 1000 ##守护系统唯一OGUID值INST_INI = /home/dmdba/dmdbms/data/DSC/dm.ini ##dm.ini配置文件路径INST_AUTO_RESTART = 1 ##打开实例的自动启动功能INST_STARTUP_CMD = /home/dmdba/dmdbms/bin/dmserver ##命令行方式启动
启动主备库
启动DSC集群主库
-
同样,使用mount方式启动
./dmserver path=/home/dmdba/config/dsc1/dm.ini dcr_ini=/home/dmdba/config/dmdcr.ini mount./dmserver path=/home/dmdba/config/dsc2/dm.ini dcr_ini=/home/dmdba/config/dmdcr.ini mount
启动实时备库
-
使用mount方式启动
./dmserver /home/dmdba/dmdbms/data/DSC/dm.ini mount
启动异步备库
-
使用mount方式启动
./DmServiceDSC_yibu start mount
设置OGUID与备库模式
-
前面已经给DSC集群和实时备库设置过了,所以这里只用给异步备库设置就行
##在bin目录下登录disql ./disql SYSDBA/SYSDBA##修改内容 SQL>SP_SET_PARA_VALUE(1, 'ALTER_MODE_STATUS', 1); SQL>SP_SET_OGUID(1000); SQL>ALTER DATABASE STANDBY; SQL>SP_SET_PARA_VALUE(1, 'ALTER_MODE_STATUS', 0);
启动守护进程及监视器
-
启动守护进程
-
DSC1:
./dmwatcher /home/dmdba/config/dsc1/dmwatcher.ini
-
DSC2:
./dmwatcher /home/dmdba/config/dsc2/dmwatcher.ini
-
DSC_beiku:
./dmwatcher /home/dmdba/dmdbms/data/DSC/dmwatcher.ini
-
DSC_yibu:
./dmwatcher /home/dmdba/dmdbms/data/DSC/dmwatcher.ini
-
-
启动监视器
-
在实时备库DSC_beiku上
./dmmonitor path=/home/dmdba/dmdbms/data/dmmonitor.ini
-
使用
show
命令来查看当前集群的状态- 可以看到,DSC集群、实时备库、异步备库都启动了
-
-
报错集结
-
启动监视器查看集群情况时,未出现异步备库的相关信息
-
原因:异步备库的主机上没有关闭防火墙,导致无法进行相关的链接通信
-
解决方法:关闭防火墙和SELinux
-
关闭防火墙:
systemctl status firewalld.service systemctl stop firewalld.service systemctl disable firewalld.service
-
关闭SELinux
getenforce vi /etc/selinux/config # 进入文件后修改 SELINUX = disabled # 保存退出文件 reboot
-
-
参考
- 达梦在线服务平台-- https://eco.dameng.com/document/dm/zh-cn/pm/dsc-build.html