实时主备动态增加实时备库
环境准备
当需要进行系统扩容,希望系统运行不中断,或者影响运行的时间尽可能短时,可通过动态增加节点的方式进行。
一套主备,一个单机,数据库版本一致,初始化参数一致
|
ip
|
实例
|
操作系统 |
数据库版本
|
主库
|
192.168.20.64
|
RAC64 | centos 7.6 | DM8 ENT |
备库
|
192.168.20.63
|
RAC63
|
centos 7.6
|
DM8 ENT
|
单机
|
192.168.20.65
|
RAC65
|
centos 7.6
|
DM8 ENT
|
在新增备机节点安装数据库并初始化实例(大小写,数据页大小,字符串等一致)
./dminit path=/dm8/data instance_name=rac65
登录主库,执行联机备份
backup database backupset '/dm8/data/backup_file';
将备份文件复制到新增备机节点
scp -r /dm8/data/backup_file dmdba@192.168.20.65:/dm8/data
在新增节点使用dmrman执行脱机还原(注意,新增节点的数据库版本要和集群数据库版本一致)
RESTORE DATABASE '/dm8/data/DAMENG/dm.ini' FROM BACKUPSET '/dm8/data/backup_file';
RECOVER DATABASE '/dm8/data/DAMENG/dm.ini' FROM BACKUPSET '/dm8/data/backup_file';
RECOVER DATABASE '/dm8/data/DAMENG/dm.ini' UPDATE DB_MAGIC;
如果数据规模比较大、联机备份耗时较长、应用压力比较大的情况下,主库联机备份、备库脱机还原过程中,主库可能又新产生了大量归档日志。使用上述步骤重建备库后,主库向备库同步历史数据的时间会比较久,主备库数据会在比较长的一段时间内处于不一致状态。对这种情况,用户可以通过归档备份、还原和归档恢复功能,将备库数据恢复到更加接近主库的最新状态,有效减少备库加入主备系统后的历史数据同步时间
新增节点配置集群
vim dmmal.ini #将主库的dmmal.ini配置复制过来。增加自己的一项
MAL_CHECK_INTERVAL = 5 #MAL 链路检测时间间隔
MAL_CONN_FAIL_INTERVAL = 5 #判定 MAL 链路断开的时间
[MAL_INST1]
MAL_INST_NAME = RAC63 #实例名,和 dm.ini 中的 INSTANCE_NAME 一致
MAL_HOST = 192.168.20.63#MAL 系统监听 TCP 连接的 IP 地址
MAL_PORT = 61141 #MAL 系统监听 TCP 连接的端口
MAL_INST_HOST = 192.168.20.63#实例的对外服务 IP 地址
MAL_INST_PORT = 5236 #实例的对外服务端口,dm.ini 中的 PORT_NUM 一致
MAL_DW_PORT = 52141 #实例对应的守护进程监听 TCP 连接的端口
MAL_INST_DW_PORT = 33141 #实例监听守护进程 TCP 连接的端口
[MAL_INST2]
MAL_INST_NAME = RAC64
MAL_HOST = 192.168.20.64
MAL_PORT = 61141
MAL_INST_HOST = 192.168.20.64
MAL_INST_PORT = 5236
MAL_DW_PORT = 52141
MAL_INST_DW_PORT = 33141
[MAL_INST3]
MAL_INST_NAME = RAC65
MAL_HOST = 192.168.20.65
MAL_PORT = 61141
MAL_INST_HOST = 192.168.20.65
MAL_INST_PORT = 5236
MAL_DW_PORT = 52141
MAL_INST_DW_PORT = 33141
vim dmarch.ini #添加另外两个节点的目标实例
[ARCHIVE_REALTIME1]
ARCH_TYPE = REALTIME #实时归档类型
ARCH_DEST = RAC63 #实时归档目标实例名
[ARCHIVE_REALTIME2]
ARCH_TYPE = REALTIME #实时归档类型
ARCH_DEST = RAC64 #实时归档目标实例名
[ARCHIVE_LOCAL1]
ARCH_TYPE = LOCAL #本地归档类型
ARCH_DEST = /dm8/data/dmarch #本地归档文件存放路径
ARCH_FILE_SIZE = 128 #单位 Mb,本地单个归档文件最大值
ARCH_SPACE_LIMIT = 200000 #单位 Mb,0 表示无限制,范围 1024~4294967294M
vim dmwatcher.ini #守护系统配置和原系统一致
[GRP2]
DW_TYPE = GLOBAL #全局守护类型
DW_MODE = MANUAL#自动切换模式
DW_ERROR_TIME = 10 #远程守护进程故障认定时间
INST_RECOVER_TIME = 60 #主库守护进程启动恢复的间隔时间
INST_ERROR_TIME = 10 #本地实例故障认定时间
INST_OGUID = 453331 #守护系统唯一 OGUID 值
INST_INI = /dm8/data/DAMENG/dm.ini #dm.ini配置文件路径
INST_AUTO_RESTART = 1 #打开实例的自动启动功能
INST_STARTUP_CMD = /dm8/bin/dmserver #命令行方式启动
RLOG_SEND_THRESHOLD = 0 #指定主库发送日志到备库的时间阀值,默认关闭
RLOG_APPLY_THRESHOLD = 0 #指定备库重演日志的时间阀值,默认关闭
以 Mount 方式启动新增备库
./dmserver /dm8/data/DAMENG/dm.ini mount
启动命令行工具 DIsql,登录新增备库设置 OGUID 值,修改数据库为 Standby 模式
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);
原主备集群配置
动态添加 MAL 配置,原系统中每个实例单独执行
SF_MAL_CONFIG(1,0);
SF_MAL_INST_ADD('MAL_INST3','RAC65','192.168.20.65',61141,'192.168.20.65',5236,52141,0,33141);
SF_MAL_CONFIG_APPLY();
SF_MAL_CONFIG(0,0);
动态添加归档配置,原系统中每个实例单独执行,先将守护进程关闭
SP_SET_PARA_VALUE(1, 'ALTER_MODE_STATUS', 1);
alter database mount;
alter database add archivelog 'DEST= RAC65, TYPE= REALTIME ';
SP_SET_PARA_VALUE(1, 'ALTER_MODE_STATUS', 0);
vim dmmonitor.ini #监视器配置 。添加最后一行
MON_DW_Confirm =0 #1确认监视器模式
MON_LOG_PATH = /dm8/data/log #监视器日志文件存放路径
MON_LOG_INTERVAL = 60 #每隔 60s 定时记录系统信息到日志文件
MON_LOG_FILE_SIZE = 32 #每个日志文件最大 32M
MON_LOG_SPACE_LIMIT = 0 #不限定日志文件总占用空间
[GRP2]
MON_INST_OGUID = 453331 #组 GRP2 的唯一 OGUID 值
#配置为监视器到组 GRP2 的守护进程的连接信息,以―IP:PORT‖的形式配置
#IP 对应 dmmal.ini 中的 MAL_HOST,PORT 对应 dmmal.ini 中的 MAL_DW_PORT
MON_DW_IP = 192.168.20.63:52141
MON_DW_IP = 192.168.20.64:52141
MON_DW_IP = 192.168.20.65:52141
先将新增备库的实例和守护进程创建服务,以服务的方式启动所有守护进程和实例
登录监视器
./dmmonitor /dm8/data/DAMENG/dmmonitor.ini
查看日志报如下错误。 response message length invalid[ip:127.0.0.1
修改每个节点主机名 vim /etc/hosts
192.168.20.63 redo3
192.168.20.64 redo4
192.168.20.65 redo5
修改之后,重启系统,查看监视器
手工切换测试