实时主备集群规划
dmdbpri 11.50.3.201 ---主机
dmdbstd 11.51.3.201 ---备机
dmdbmon 11.52.3.250 ---监视器(自动模式建议,手动模式可选)
数据库名 | 实例名 | PORT_NUM | MAL_INST_DW_PORT | MAL_HOST | MAL_PORT | MAL_DW_PORT |
---|---|---|---|---|---|---|
DMDB | DMDBPRI | 15236 | 45101 | 11.50.3.201 | 55101 | 65101 |
DMDB | DMDBSTD | 15236 | 45121 | 11.51.3.201 | 55121 | 65121 |
实时主备集群要求实例名不同,数据库名不做要求,为便于管理,我们数据库名保持一致。
主库操作
安装主库
如果没有数据库模版,则参考规范全新安装一台主库。
如果要为正在运行的主库配置数据守护,则执行如下操作:
重新注册服务(MOUNT):
# /dmdb/dmdbms/script/root/dm_service_uninstaller.sh -n DmServiceDM
# /dmdb/dmdbms/script/root/dm_service_installer.sh -t dmserver -dm_ini /dmdb/dmdata/DMDB/dm.ini -p DM -m mount
也可以不用重新注册,直接修改 /dmdb/dmdbms/bin/DmServiceDM 文件中的 START_MODE=open 为 START_MODE=mount。
建议注册成 mount,虽然注册成 open 其实也行,因为 primary 或者 standby 会自动启动到 mount 状态。但不排除故障时被直接 open 起来的可能。
关闭主库
$ DmServiceDM stop <---- 如果是现存运行中的数据库,则关闭
备份主库
$ dmrman CTLSTMT="BACKUP DATABASE '/dmdb/dmdata/DMDB/dm.ini' FULL TO BACKUP_FILE1 BACKUPSET '/orabak/BACKUP_FILE_01'"
编辑数据库配置文件 dm.ini
$ vim /dmdb/dmdata/DMDB/dm.ini
INSTANCE_NAME = DMDBPRI # 不用改,初始化时自动生成。
PORT_NUM = 15236 # 不用改,初始化时自动生成。
DW_INACTIVE_INTERVAL = 60 # 不用改,默认值。接收守护进程消息超时时间。
ALTER_MODE_STATUS = 0 # 需要修改,默认值为1。不允许手工方式修改实例模式/状态/OGUID。
ENABLE_OFFLINE_TS = 2 # 需要修改,默认值为1。是否允许 OFFLINE 表空间。0:不允许;1:允许;2:备库不允许。注:数据守护环境下建议配置为 2。
MAL_INI = 1 # 需要修改,默认值为0。打开 MAL 系统。
ARCH_INI = 1 # 需要修改,默认值为0。打开归档配置。
RLOG_SEND_APPLY_MON = 64 # 不用改,默认值。统计最近 64 次的日志发送信息。
新建 MAL 配置文件
邮件系统(MAL 系统)是一个内部高速通信系统,基于 TCP/IP 协议实现。节点间通信的机制。
$ vim /dmdb/dmdata/DMDB/dmmal.ini
MAL_CHECK_INTERVAL = 5 # 不用改,MAL 链路检测时间间隔,默认30S
MAL_CONN_FAIL_INTERVAL = 5 # 不用改,判定 MAL 链路断开的时间,默认 10S
[MAL_INST1]
MAL_INST_NAME = DMDBPRI # 不用改,和 dm.ini 中的 INSTANCE_NAME 一致
MAL_HOST = 11.50.3.201 # 需要修改,MAL 系统的监听地址,如果规划了内部网络,就用内部网络地址
MAL_PORT = 55101 # 不用改,MAL 系统的监听端口
MAL_INST_HOST = 11.50.3.201 # 需要修改,实例的对外服务 IP 地址,即连接数据库服务器使用的 IP 地址
MAL_INST_PORT = 15236 # 不用改,实例的对外服务端口,和 dm.ini 中的 PORT_NUM 一致
MAL_DW_PORT = 65101 # 不用改,守护进程监听端口,其他守护进程或监视器使用 MAL_HOST + MAL_DW_PORT 创建 TCP 连接
MAL_INST_DW_PORT = 45101 # 不用改,实例对守护进程的监听端口,守护进程使用 MAL_HOST + MAL_INST_DW_PORT 创建到实例的 TCP 连接
[MAL_INST2]
MAL_INST_NAME = DMDBSTD # 不用改
MAL_HOST = 11.51.3.201 # 需要修改
MAL_PORT = 55121 # 不用改
MAL_INST_HOST = 11.51.3.201 # 需要修改
MAL_INST_PORT = 15236 # 不用改
MAL_DW_PORT = 65121 # 不用改
MAL_INST_DW_PORT = 45121 # 不用改
新建归档配置文件 dmarch.ini
按照我们的标准,直接复制如下内容即可。
$ vim /dmdb/dmdata/DMDB/dmarch.ini
ARCH_WAIT_APPLY = 0
[ARCHIVE_LOCAL1]
ARCH_TYPE = LOCAL # 归档类型为本地归档
ARCH_DEST = /dmdb/dmarch/DMDB # 本地归档文件存放路径
ARCH_FILE_SIZE = 1024 # 单位 Mb,本地单个归档文件最大值
ARCH_SPACE_LIMIT = 10240 # 单位 Mb,0 表示无限制,范围 1024~2147483647M
ARCH_FLUSH_BUF_SIZE = 2
ARCH_HANG_FLAG = 1
[ARCHIVE_REALTIME]
ARCH_TYPE = REALTIME # 归档类型为实时归档
ARCH_DEST = DMDBSTD # 写对端的实例名
新建守护进程配置文件 dmwatcher.ini
对于我们的环境,只需要修改组名和 OGUID 即可。
$ vim /dmdb/dmdata/DMDB/dmwatcher.ini
[DMDB03] #需要修改,我们规划与数据库编号保持一致
DW_TYPE = GLOBAL #实时主备和读写分离集群需要将守护进程配置为全局守护
DW_MODE = MANUAL #金融场景建议为 MANUAL 手动切换模式,避免误判而发生抖动或脑裂
DW_ERROR_TIME = 10 #远程守护进程故障认定时间
INST_RECOVER_TIME = 60 #主库守护进程启动恢复的间隔时间
INST_ERROR_TIME = 10 #本地实例故障认定时间
INST_OGUID = 453003 #需要修改,守护系统唯一 OGUID 值,每套数据守护集群唯一,我们规划003与数据库编号保持一致
INST_INI = /dmdb/dmdata/DMDB/dm.ini #dm.ini 配置文件路径
INST_AUTO_RESTART = 1 #打开实例的自动启动功能
##INST_STARTUP_CMD = /dmdb/dmdbms/bin/dmserver #打开实例使用的命令
INST_STARTUP_CMD = /dmdb/dmdbms/bin/DmServiceDM start #DM工程师推荐使用这种
RLOG_SEND_THRESHOLD = 0 #指定主库发送日志到备库的时间阈值,默认关闭
RLOG_APPLY_THRESHOLD = 0 #指定备库重演日志的时间阈值,默认关闭
启动主库到 mount 状态
$ dmserver /dmdb/dmdata/DMDB/dm.ini mount 或者
$ DmServiceDM start mount
注意:
一定要以 Mount 方式启动数据库实例,否则系统启动时会重构回滚表空间,生成 Redo 日志。
并且,启动后应用可能连接到数据库实例进行操作,破坏主备库的数据一致性。
数据守护配置结束后,守护进程会自动 Open 数据库。
修改主库的模式和设置oguid。
SQL>SP_SET_PARA_VALUE(1, 'ALTER_MODE_STATUS', 1);
SQL>sp_set_oguid(453003); # 需要修改
SQL>alter database primary;
SQL>SP_SET_PARA_VALUE(1, 'ALTER_MODE_STATUS', 0);
系统通过 OGUID 值确定一个守护进程组,由用户保证 OGUID 值的唯一性,并确保数据守护系统中,数据库、守护进程和监视器配置相同的 OGUID 值。
备库操作
安装备库
如果没有数据库模版,则参考规范全新安装一台备库。
如果是从模版生成的数据库备机,则执行如下操作:
关闭 dmdba 的备份 Crond:
$ crontab -e
删除服务和实例:
# systemctl stop DmServiceDM
# /dmdb/dmdbms/script/root/dm_service_uninstaller.sh -n DmServiceDM
# rm -fr /dmdb/dmdata/DMDB/
初始化备库实例:
$ dminit PATH=/dmdb/dmdata PAGE_SIZE=32 EXTENT_SIZE=16 CASE_SENSITIVE=1 CHARSET=1 PAGE_CHECK=0 LOG_SIZE=2048 DB_NAME=DMDB INSTANCE_NAME=DMDBSTD PORT_NUM=15236 SYSDBA_PWD=xxx SYSAUDITOR_PWD=xxx
$ dmserver /dmdb/dmdata/DMDB/dm.ini # 出现 "SYSTEM IS READY." 后,执行 exit 退出,数据库自动关闭
注册服务:
# /dmdb/dmdbms/script/root/dm_service_installer.sh -t dmserver -dm_ini /dmdb/dmdata/DMDB/dm.ini -p DM -m mount
Created symlink /etc/systemd/system/multi-user.target.wants/DmServiceDM.service → /usr/lib/systemd/system/DmServiceDM.service.
恢复备库
将备份从主库传输到备库后,进行恢复:
$ dmrman CTLSTMT="RESTORE DATABASE '/dmdb/dmdata/DMDB/dm.ini' FROM BACKUPSET '/orabak/BACKUP_FILE_01'"
$ dmrman CTLSTMT="RECOVER DATABASE '/dmdb/dmdata/DMDB/dm.ini' FROM BACKUPSET '/orabak/BACKUP_FILE_01'"
$ dmrman CTLSTMT="RECOVER DATABASE '/dmdb/dmdata/DMDB/dm.ini' UPDATE DB_MAGIC"
编辑数据库配置文件
$ vim /dmdb/dmdata/DMDB/dm.ini
INSTANCE_NAME = DMDBSTD # 不用改,初始化时自动生成。
PORT_NUM = 15236 # 不用改,初始化时自动生成。
DW_INACTIVE_INTERVAL = 60 # 不用改,默认值。接收守护进程消息超时时间。
ALTER_MODE_STATUS = 0 # 需要修改,默认值为1。不允许手工方式修改实例模式/状态/OGUID。
ENABLE_OFFLINE_TS = 2 # 需要修改,默认值为1。是否允许 OFFLINE 表空间。0:不允许;1:允许;2:备库不允许。注:数据守护环境下建议配置为 2。
MAL_INI = 1 # 需要修改,默认值为0。打开 MAL 系统。
ARCH_INI = 1 # 需要修改,默认值为0。打开归档配置。
RLOG_SEND_APPLY_MON = 64 # 不用改,默认值。统计最近 64 次的日志发送信息。
新建 MAL 配置文件
MAL 配置文件主备库一致,只需要将主库 dmmal.ini 拷备过来就行。
新建归档配置文件 dmarch.ini
只需要将主库 dmarch.ini 拷备过来,修改 ARCH_DEST 为 DMDBPRI 就行。
新建守护进程配置文件 dmwatcher.ini
按照我们的标准,只需要将主库 dmwatcher.ini 拷备过来就行。
如果不是按照我们的标准来安装,则根据实际情况修改含有路径信息的条目。
启动备库到 mount 状态
$ dmserver /dmdb/dmdata/DMDB/dm.ini mount 或者
$ DmServiceDM start mount
设置备库模式和oguid值
SQL>SP_SET_PARA_VALUE(1, 'ALTER_MODE_STATUS', 1);
SQL>sp_set_oguid(453003); # 需要修改
SQL>alter database standby;
SQL>SP_SET_PARA_VALUE(1, 'ALTER_MODE_STATUS', 0);
注册守护进程服务
主备库上均执行如下操作:
# /dmdb/dmdbms/script/root/dm_service_installer.sh -t dmwatcher -p DM -watcher_ini /dmdb/dmdata/DMDB/dmwatcher.ini
$ DmWatcherServiceDM start
启动后,数据库就可以正常使用了,但是不能切换
守护进程启动后,进入 Startup 状态,此时实例都处于 Mount 状态。守护进程开始广播自身和其监控实例的状态信息,结合自身信息和远程守护进程的广播信息,守护进程将本地实例 Open,并切换为 Open 状态。
配置监视器
监视器所在主机只需要安装 DM8 软件即可,不需要初始化实例。
我们统一在主备机上都部署普通监视器。
编辑配置文件:
$ vim /dmdb/dmmonitor.ini
MON_DW_CONFIRM = 0 #确认监视器模式
MON_LOG_PATH = /dmdb/dmdbms/log/monitor #监视器日志文件存放目录
MON_LOG_INTERVAL = 60 #每隔 60s 定时记录系统信息到日志文件
MON_LOG_FILE_SIZE = 32 #每个日志文件最大 32M
MON_LOG_SPACE_LIMIT = 1024 #0 表示不限定日志文件总占用空间
[DMDB03]
MON_INST_OGUID = 453003
MON_DW_IP = 11.50.3.201:65101 # IP 和 PORT 对应 dmmal.ini 中的 MAL_HOST 和 MAL_DW_PORT
MON_DW_IP = 11.51.3.201:65121
注册监视器服务:
为了保证确认监视器一直处于工作状态,需要注册 dmmonitor 服务,开机启动。
查看信息和操作时,使用普通监视器,普通监视器使用时启动即可,不用注册服务。
# /dmdb/dmdbms/script/root/dm_service_installer.sh -t dmmonitor -p DM -monitor_ini /dmdb/dmmonitor.ini
# systemctl enable DmMonitorServiceDM.service
# systemctl start DmMonitorServiceDM.service
启动监视器并检查:
dmmonitor /dmdb/dmmonitor.ini
help
show
exit