DM主备安装
1.配置环境说明
1.1机器说明| - 机器名 | - Ip地址 | - 初始状态 | - 操作系统 |
| - dmserver_01 | - 168.164.129 | - 主库 | - Centos7 |
| - dmserver_02 | - 168.164.130 | - 备库 | - Centos7 |
| - dmserver_03 | - 168.164.131 | - 守护进程 | - Centos7 |1.2端口说明| - 实例名 | - PORT_NUM | - MAL_INST_DW_PORT | - MAL_HOST | - MAL_PORT | - MAL_DW_PORT |
| - DMSERVER_01 | - 5236 | - 5237 | - 168.164.129 | - 5238 | - 5239 |
| - DMSERVER_02 | - 5236 | - 5237 | - 168.164.130 | - 5238 | - 5239 |1.3注意事项
配置数据守护 V4.0 之前,必须先通过备份还原方式同步各数据库的数据,确保各数据库的数据保持完全一致。主库可以是新初始化的数据库,也可以是正在生产、使用中的数据库。备库在备份还原前,需要先准备初始化一个新库。
不能使用分别初始化库或者直接拷贝数据文件的方法来直接配置数据库守护,原因如下:
1)每个库都有一个永久魔数(permenant_magic),一经生成,永远不会改变,主库传送日志时会判断这个值是否一样,确保是来自同一个数据守护环境中的库,否则传送不了日志。
2)由于 dminit 初始化数据库时,会生成随机密钥用于加密,每次生成的密钥都不相同,备库无法解析采用主库密钥加密的数据。
3)每个库都有一个数据库魔数(DB_MAGIC),每经过一次还原、恢复操作,DB_MAGIC 就会产生变化,需要通过这种方式来区分同一个数据守护环境中各个不同的库。
4)如果需要使用Huge表,在初始化库时需要将建库参数HUGE_WITH_DELTA和RLOG_GEN_FOR_HUGE都配置为1。
5)对于新初始化的库,首次启动不允许使用Mount方式,需要先正常启动并正常退出,然后才允许Mount方式启动。
6)准备数据时,如果主库是新初始化的库,先正常启动并正常退出,然后再使用备份还原方式准备备库数据。
- 1.4备库备份
- 如果是初始搭建环境,可以通过对主库脱机备份、对备库脱机还原的方式来准备数据,如果主库已经处于运行状态,则可以对主库进行联机备份、对备库脱机还原的方式来准备数据。
- 1.4.1 脱机备份与脱机还原
- 正常关闭数据库
- 进行脱机备份
./dmrman CTLSTMT=“BACKUP DATABASE ‘/dm/data/DAMENG/dm.ini’ FULL TO BACKUP_FILE1 BACKUPSET ‘/dm/data/BACKUP_FILE_01’”
3)拷贝备份文件到备库所在机器
4)执行脱机数据库还原与恢复
./dmrman CTLSTMT=“RESTORE DATABASE ‘/dm/data/DAMENG/dm.ini’ FROM BACKUPSET ‘/dm/data/BACKUP_FILE_01’”
因为脱机备份没有产生任何 REDO 日志,所以恢复这一步此处省略。
./dmrman CTLSTMT=“RECOVER DATABASE ‘/dm/data/DAMENG/dm.ini’ UPDATE DB_MAGIC”
- 1.4.2 联机备份脱机还原
- 对主库进行联机备份操作
SQL> BACKUP DATABASE BACKUPSET ‘/dm/data/BACKUP_FILE_01’;- 拷贝备份文件到备库所在机器
- 执行脱机数据库还原与恢复
./dmrman CTLSTMT=“RESTORE DATABASE ‘/dm/data/DAMENG/dm.ini’ FROM BACKUPSET ‘/dm/data/BACKUP_FILE_01’”
./dmrman CTLSTMT=“RECOVER DATABASE ‘/dm/data/DAMENG/dm.ini’ FOR STANDBY FROM BACKUPSET ‘/dm/data/BACKUP_FILE_01’”
./dmrman CTLSTMT=“RECOVER DATABASE ‘/dm/data/DAMENG/dm.ini’ UPDATE DB_MAGIC”
配置实时主备
主库准备
129机器上初始化主库目录/dm8/data
./dminit path=/dm8/data SYSDBA_PWD=Sysdba123 SYSAUDITOR_PWD=Sysauditor123
主库参数配置
2.2.1 dm.ini
在 129 机器上配置主库的实例名为 DMSERVER_01,dm.ini 参数修改如下:
##实例名,建议使用“组名_守护环境_序号”的命名方式,总长度不能超过16
INSTANCE_NAME = DMSERVER_01
PORT_NUM = 5236 ##数据库实例监听端口
DW_INACTIVE_INTERVAL = 60 ##接收守护进程消息超时时间
ALTER_MODE_STATUS = 0 ##不允许手工方式修改实例模式/状态/OGUID
ENABLE_OFFLINE_TS = 2 ##不允许备库OFFLINE表空间
MAL_INI = 1 ##打开MAL系统
ARCH_INI = 1 ##打开归档配置
RLOG_SEND_APPLY_MON = 64 ##统计最近64次的日志发送信息
2.2.2 dmmal.ini
配置 MAL 系统,各主备库的 dmmal.ini 配置必须完全一致,MAL_HOST 使用内部网络 IP,MAL_PORT 与 dm.ini 中 PORT_NUM 使用不同的端口值,MAL_DW_PORT 是各实例对应的守护进程之间,以及守护进程和监视器之间的通信端口,配置如下:
MAL_CHECK_INTERVAL = 5 ##MAL链路检测时间间隔
MAL_CONN_FAIL_INTERVAL = 5 ##判定MAL链路断开的时间
[MAL_INST1]
MAL_INST_NAME = DMSERVER_01 ##实例名,和dm.ini中的INSTANCE_NAME一致
MAL_HOST = 192.168.164.129 ##MAL系统监听TCP连接的IP地址
MAL_PORT = 5238 ##MAL系统监听TCP连接的端口
#MAL_INST_HOST = 192.168.1.131 ##实例的对外服务IP地址
MAL_INST_PORT = 5236 ##实例的对外服务端口,和dm.ini中的PORT_NUM一致
MAL_DW_PORT = 5239 ##实例本地的守护进程监听TCP连接的端口
MAL_INST_DW_PORT = 5237 ##实例监听守护进程TCP连接的端口
[MAL_INST2]
MAL_INST_NAME = DMSERVER_02
MAL_HOST = 192.168.164.130
MAL_PORT = 5238
#MAL_INST_HOST = 192.168.1.132
MAL_INST_PORT = 5236
MAL_DW_PORT = 5239
MAL_INST_DW_PORT = 5237
2.2.3 dmarch.ini
修改 dmarch.ini,配置本地归档和实时归档。
除了本地归档外,其他归档配置项中的 ARCH_DEST 表示实例是 PRIMARY 模式时,需要同步归档数据的目标实例名。
当前实例 DMSERVER_01 是主库,需要向 DMSERVER_02(实时备库)同步数据,因此实时归档的 ARCH_DEST 配置为 DMSERVER_02
[ARCHIVE_REALTIME]
ARCH_TYPE = REALTIME ##实时归档类型
ARCH_DEST = DMSERVER_02 ##实时归档目标实例名
[ARCHIVE_LOCAL1]
ARCH_TYPE = LOCAL ##本地归档类型
ARCH_DEST = /dm8/data/DAMENG/arch ##本地归档文件存放路径
ARCH_FILE_SIZE = 128 ##单位Mb,本地单个归档文件最大值
ARCH_SPACE_LIMIT = 0 ##单位Mb,0表示无限制,范围1024~2147483647M。
2.2.4 dmwatcher.ini
[DMWATCHER_01]
DW_TYPE = GLOBAL ##全局守护类型
DW_MODE = AUTO ##自动切换模式
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 ##指定备库重演日志的时间阈值,默认关闭
2.2.5 启动主库
正常启动
./dmserver path=/dm8/data/DAMENG/dm.ini
以mount方式启动
./dmserver path=/dm8/data/DAMENG/dm.ini mount
启动命令行工具 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,登录主库修改数据库为 PRIMARY 模式
SQL>SP_SET_PARA_VALUE(1, ‘ALTER_MODE_STATUS’, 1);SQL>ALTER DATABASE PRIMARY;SQL>SP_SET_PARA_VALUE(1, ‘ALTER_MODE_STATUS’, 0);2.2.6 备份主库
./dmrman CTLSTMT=“BACKUP DATABASE ‘/dm8/data/DAMENG/dm.ini’ FULL TO BACKUP_FILE1 BACKUPSET ‘/dm8/data/BACKUP_FILE_01’”
- 2.2.7主库注册服务
- ./dm_service_installer.sh -t dmserver -p DMSERVER_01 -dm_ini /dm8/data/DAMENG/dm.ini -m mount
./dm_service_installer.sh -t dmwatcher -p DMWATCHER_01 -watcher_ini /dm8/data/DAMENG/dmwatcher.ini
2.3备库准备
129机器上初始化主库目录/dm8/data
./dminit path=/dm8/data SYSDBA_PWD=Sysdba123 SYSAUDITOR_PWD=Sysauditor123
2.4备库参数配置
2.4.1 dm.ini
在 129 机器上配置主库的实例名为 DMSERVER_02,dm.ini 参数修改如下:
##实例名,建议使用“组名_守护环境_序号”的命名方式,总长度不能超过16
INSTANCE_NAME = DMSERVER_02
PORT_NUM = 5236 ##数据库实例监听端口
DW_INACTIVE_INTERVAL = 60 ##接收守护进程消息超时时间
ALTER_MODE_STATUS = 0 ##不允许手工方式修改实例模式/状态/OGUID
ENABLE_OFFLINE_TS = 2 ##不允许备库OFFLINE表空间
MAL_INI = 1 ##打开MAL系统
ARCH_INI = 1 ##打开归档配置
RLOG_SEND_APPLY_MON = 64 ##统计最近64次的日志发送信息
2.4.2****dmmal.ini
配置 MAL 系统,各主备库的 dmmal.ini 配置必须完全一致,MAL_HOST 使用内部网络 IP,MAL_PORT 与 dm.ini 中 PORT_NUM 使用不同的端口值,MAL_DW_PORT 是各实例对应的守护进程之间,以及守护进程和监视器之间的通信端口,配置如下:
MAL_CHECK_INTERVAL = 5 ##MAL链路检测时间间隔
MAL_CONN_FAIL_INTERVAL = 5 ##判定MAL链路断开的时间
[MAL_INST1]
MAL_INST_NAME = DMSERVER_01 ##实例名,和dm.ini中的INSTANCE_NAME一致
MAL_HOST = 192.168.164.129 ##MAL系统监听TCP连接的IP地址
MAL_PORT = 5238 ##MAL系统监听TCP连接的端口
#MAL_INST_HOST = 192.168.1.131 ##实例的对外服务IP地址
MAL_INST_PORT = 5236 ##实例的对外服务端口,和dm.ini中的PORT_NUM一致
MAL_DW_PORT = 5239 ##实例本地的守护进程监听TCP连接的端口
MAL_INST_DW_PORT = 5237 ##实例监听守护进程TCP连接的端口
[MAL_INST2]
MAL_INST_NAME = DMSERVER_02
MAL_HOST = 192.168.164.130
MAL_PORT = 5238
#MAL_INST_HOST = 192.168.1.132
MAL_INST_PORT = 5236
MAL_DW_PORT = 5239
MAL_INST_DW_PORT = 5237
- 2.4.3 dmarch.ini
- 修改 dmarch.ini,配置本地归档和实时归档。
- 除了本地归档外,其他归档配置项中的 ARCH_DEST 表示实例是 PRIMARY 模式时,需要同步归档数据的目标实例名。
当前实例 DMSERVER_02 是备库,守护系统配置完成后,可能在各种故障处理中, DMSERVER_02切换为新的主库,正常情况下,DMSERVER_01 会切换为新的备库,需要向 GRP1_RT_01 同步数据,因此实时归档的 ARCH_DEST 配置为 DMSERVER_01。
[ARCHIVE_REALTIME]
ARCH_TYPE = REALTIME ##实时归档类型
ARCH_DEST = DMSERVER_01 ##实时归档目标实例名
[ARCHIVE_LOCAL1]
ARCH_TYPE = LOCAL ##本地归档类型
ARCH_DEST = /dm8/data/DAMENG/arch ##本地归档文件路径
ARCH_FILE_SIZE = 128 ##单位Mb,本地单个归档文件最大值
ARCH_SPACE_LIMIT = 0 ##单位Mb,0表示无限制,范围1024~2147483647M
**2.4.4 dmwatcher.ini
**[DMWATCHER_02]
DW_TYPE = GLOBAL ##全局守护类型
DW_MODE = AUTO ##自动切换模式
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 ##指定备库重演日志的时间阈值,默认关闭
2.4.5恢复备库
*
- 2.4.6启动备库
- 注意更新db_magic!!!
**
**
- ****1)正常启动
- ./dmserver path=/dm8/data/DAMENG/dm.ini
- 以mount方式启动
- ./dmserver path=/dm8/data/DAMENG/dm.ini mount
- 启动命令行工具 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,登录主库修改数据库为 standby 模式
SQL>SP_SET_PARA_VALUE(1, ‘ALTER_MODE_STATUS’, 1); SQL>alter database standby;SQL>SP_SET_PARA_VALUE(1, ‘ALTER_MODE_STATUS’, 0);
**2.4.7备库注册服务
**./dm_service_installer.sh -t dmserver -p DMSERVER_02 -dm_ini /dm8/data/DAMENG/dm.ini -m mount
./dm_service_installer.sh -t dmwatcher -p DMWATCHER_02 -watcher_ini /dm8/data/DAMENG/dmwatcher.in
配置监视器
由于主库和实时备库的守护进程配置为自动切换模式,因此这里必须配置确认监视器。和普通监视器相比,确认监视器除了相同的命令支持外,在主库发生故障时,能够自动通知实时备库接管为新的主库,具有自动故障处理的功能。配置确认监视器时可以选择配置单实例监视器或配置多实例监视器,下面将分别介绍配置单实例监视器以及多实例监视器时 dmmonitor.ini 配置文件中的配置信息。
- 3.1配置单实例监视器
- 修改 dmmonitor.ini 配置确认监视器,其中 MON_DW_IP 中的 IP 和 PORT 和 dmmal.ini 中的 MAL_HOST 和 MAL_DW_PORT 配置项保持一致。
- MON_DW_CONFIRM = 1 ##确认监视器模式
- MON_LOG_PATH = /dm8/data/log ##监视器日志文件存放路径
- MON_LOG_INTERVAL = 60 ##每隔60s定时记录系统信息到日志文件
- MON_LOG_FILE_SIZE = 32 ##每个日志文件最大32M
- MON_LOG_SPACE_LIMIT = 0 ##不限定日志文件总占用空间
- [GRP1]
- MON_INST_OGUID = 453331 ##组GRP1的唯一OGUID值
- ##以下配置为监视器到组GRP1的守护进程的连接信息,以“IP:PORT”的形式配置
- ##IP对应dmmal.ini中的MAL_HOST,PORT对应dmmal.ini中的MAL_DW_PORT
- MON_DW_IP = 192.168.164.129:5239
- MON_DW_IP = 192.168.164.130:5239
- 3.2注册监视器服务
- ./dm_service_installer.sh -t dmmonitor -p DMMONITOR -monitor_ini /dm8/data/dmmonitor.ini
启动主备
- 4.1启动顺序
- 主机实例 -> 备机实例 -> 备机守护进程 -> 主机守护进程 -> 监视器
- 4.2 监视器状态
守护进程启动后,进入 Startup 状态,此时实例都处于 Mount 状态。守护进程开始广播自身和其监控实例的状态信息,结合自身信息和远程守护进程的广播信息,守护进程将本地实例 Open,并切换为 Open 状态。
**
**
由该图可以看到实例DMSERVER_01为主库,DMSERVER_02为备库
- 4.3 主备库测试
- 4.3.1建表测试
- 在主库中创建测试表test,观察备库是否同步
- 主库执行
备库查询
4.3.2 insert测试
在主库中向表test_sync插入数据,观察备库是否同步
主库执行
备库查询
- 4.3.3 delete测试
- 在主库中向表test_sync进行delete操作,观察备库是否同步。
- 主库执行
备库查看
- 4.3.4 update测试
- 在主库中向表test_sync进行update操作,观察备库是否同步
- 主库执行
**
**
备库查看
**
**
4.3.5手动切换测试
在监视器中执行switchover,手动切换主备库
当前状态
执行switchvor
切换成功
- 4.3.6 故障切换
- 手动kill掉130上的主进程实例,模拟故障,观察主库是否会切换到129实例上
**
**
切换成功