一、环境简介:
ip | prot | |||
GRP1集群 | DMSERVER主库 | 192.168.17.2 | 5236 | PORT_NUM实例的对外服务端口 |
52141 | MAL_DW_PORT实例对应的守护进程监听TCP连接的端口 | |||
61141 | MAL_PORT系统监听TCP连接的端口 | |||
33141 | MAL_INST_DW_PORT守护环境下,监听守护进程连接端口 | |||
DMSERVER1备库 | 192.168.17.3 | 5236 | 实例的对外服务端口 | |
52141 | 实例对应的守护进程监听TCP连接的端口 | |||
61141 | 系统监听TCP连接的端口 | |||
33141 | 守护环境下,监听守护进程连接端口 | |||
监视器 | 192.168.17.129 |
本文档以192.168.17.2/192.168.17.3主备集群为例。
二、主备环境准备
1、按照单机部署前准备对三个环境进行相关配置更改
2、在主、备环境中各部署一套dm数据库,重要目录:
oguid:453331
(1) dm.ini 存放目录没有限制,一般直接放在数据库目录中。
(2)dmmal.ini 、 dmarch.ini 、 dmtimer.ini 存 放目录由 dm.ini 的 CONFIG_PATH 配置项指定
(3)dmwatcher.ini 存放目录没有限制,一般和 dm.ini 存放在同一个目录。
(4)dmmonitor.ini 存放目录没有限制,一般和 dm.ini 存放在同一个目录。这里放在/home/dmdba/dmdbms/monitor下
(5)dm.ctl 存放目录由 dm.ini 的 CTL_PATH 配置项指定。
(6)dmmpp.ctl 存放目录由 dm.ini 的 SYSTEM_PATH 配置项指定。
3、实际生产,原则上数据文件、备份文件、归档文件建议分别放在三个磁盘里。
4、初始化时如果是需要从原有DM库迁移数据过来,最好查到原有DM库的初始化参数,部署时和原有DM库初始化参数一致(如果是备份还原的话就无所谓是否一致,还原后都会变成和源库一模一样),用select * from V$option;查询较为准确,dminitxxx.log里的不一定对。
5、对于新初始化的库,首次启动不允许使用 mount 方式,需要先正常启动并正常退出,然后才允许 mount 方式启动。
三、数据准备
主库脱机备份,复制备份文件到备库,备库脱机还原,更新DBMAGIC。
1、先关闭数据库,查看dmap进程是否开启
2、开始脱机备份(主库执行):
cd /home/dmdba/dmdbms/bin
./dmrman CTLSTMT="BACKUP DATABASE '/dm8/dmdata/DMDB/dm.ini' FULL TO BACKUP_FILE1 BACKUPSET '/dm8/dmbak/BACKUP_FILE_01'"
3、传输主库备份集至备份服务器(主库执行):
scp -r /dm8/dmbak/BACKUP_FILE_01/ dmdba@192.168.17.3:/dm8/dmbak
4、备库执行脱机数据库还原与恢复(备库执行):
./dmrman CTLSTMT="RESTORE DATABASE '/dm8/dmdata/DMDB/dm.ini' FROM BACKUPSET '/dm8/dmbak/BACKUP_FILE_01'"
注:
还原是备价的逆过程,就是从备份集中读取数据页,并将数据页写入到目标数据库对应数据文件相应位置的过程。
由于联机备份时,系统中可能存在一些处于活动状态的事务正在执行。并不能保证备份集中的所有数据页是处于一致性状态;而脱机备份时,数据页不一定是正常关闭的,也不能保证备份集中所有数据页是处于一致性状态。因此,还原结束后目标库有可能处于非一致性状态,不能马上提供数据库服务,必需要进行数据库恢复操作后,才能正需启动。
所以即便脱机备份过程中没有产生日志,还原之后最好也进行下面的恢复步骤:
./dmrman CTLSTMT="RECOVER DATABASE '/dm8/dmdata/DMDB/dm.ini' FROM BACKUPSET '/dm8/dmbak/BACKUP_FILE_01'"
./dmrman CTLSTMT="RECOVER DATABASE '/dm8/dmdata/DMDB/dm.ini' UPDATE DB_MAGIC"
5、检查还原是否有效
恢复之后,用disql登录查看主备FLSN和CLSN以及永久魔数是否相同,相同再进行下一步。
select permanent_magic;
select file_LSN,cur_LSN from V$rlog;
四、主库配置
4.1 配置dm.ini(主备实例名不同)
在dm.ini文件中修改下列参数并保存:
INSTANCE_NAME = DMSERVER
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 次的日志发送信息
参数详解:
DW_INACTIVE_INTERVAL:用于确定DMWATCHER是否存在的时间(以秒为单位)
ALTER_MODE_STATUS:是否允许手工修改服务器的模式、状态和OGUID,1:允许;0:不允许。 注:数据守护环境下建议配置为0,实例处于主机或备机模式后,不允许用户直接通过SQL语句修改服务器的模式、状态和OGUID。
ENABLE_OFFLINE_TS:是否允许OFFLINE表空间,0:不允许;1:允许;2:备库不允许。 注:数据守护环境下建议配置为2
MAL_INI:是否启用MAL系统,0:不启用;1:启用
ARCH_INI:是否启用归档,0:不启用;1:启用
RLOG_SEND_APPLY_MON:数据守护中,对于主库,用于指定统计最近N次主库到每个备库的归档发送时间;对于备库,用于指定统计最近N次备库重演日志的时间,N为此参数设置的值。取值范围1~1024。
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 #实例名,和 dm.ini 中的 INSTANCE_NAME 一致
MAL_HOST = 192.168.17.2 #MAL 系统监听 TCP 连接的 IP 地址
MAL_PORT = 61141 #MAL 系统监听 TCP 连接的端口
MAL_INST_HOST = 192.168.17.2 #实例的对外服务 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 = DMSERVER1
MAL_HOST = 192.168.17.3
MAL_PORT = 61141
MAL_INST_HOST = 192.168.17.3
MAL_INST_PORT = 5236
MAL_DW_PORT = 52141
MAL_INST_DW_PORT = 33141
注:若同一网络存在多套主备集群,除实例的对外服务端口5236可以一样,其他端口和OGUID要都不一致。
4.3 配置 dmarch.ini(归档配置要合理)
[ARCHIVE_REALTIME1]
ARCH_TYPE = REALTIME #实时归档类型
ARCH_DEST = DMSERVER1 #实时归档目标实例名
[ARCHIVE_LOCAL1]
ARCH_TYPE = LOCAL #本地归档类型
ARCH_DEST = /dm8/dmarch #本地归档文件存放路径
ARCH_FILE_SIZE = 512 #单位 Mb,本地单个归档文件最大值
ARCH_SPACE_LIMIT = 5120 #单位 Mb, 0 表示无限制,范围 1024~4294967294M (必须改成非0)
注意:
归档限制大小是根据磁盘容量和业务规模配置,空间足够的情况下尽量把归档限制大小配置大;如果磁盘空间容量500G以内配置归档限制大小至少50GB,超过1TB的归档配置限制大小至少100GB,可酌情再改大;禁止不管现场磁盘空间是500GB,还是4TB,所有的归档限制大小都配置10GB的情况!
4.4 配置 dmwatcher.ini(主备重启服务脚本名不同)
[GRP1]
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/dmdata/DMDB/dm.ini #dm.ini 配置文件路径
INST_AUTO_RESTART = 1 #打开实例的自动启动功能
INST_STARTUP_CMD = /home/dmdba/dmdbms/bin/DmServiceDMSERVER restart #服务脚本方式启动
RLOG_SEND_THRESHOLD = 0 #指定主库发送日志到备库的时间阀值,默认关闭
RLOG_APPLY_THRESHOLD = 0 #指定备库重演日志的时间阀值,默认关闭
五、配置备库
1、拷贝主库配置文件略作修改:
scp dmarch.ini dmmal.ini dmwatcher.ini dmdba@192.168.17.3:/dm8/dmdata/DMDB/
2、备份备库dm.ini文件,然后对dm.ini文件进行修改:
修改INSTANCE_NAME = DMSERVER = DMSERVER1 其他与主库配置一致。
3、dmmal.ini与主库一致
4、dmarch.ini中的归档目标为修改为主库实例DMSERVER;本地归档存放路径按实际情况填写。
5、dmwatcher.ini修改成备库dmserver对应的服务名
INST_STARTUP_CMD = /dm8/dmdata/bin/DmServiceDMSERVER1 restart
六、修改OGUID和数据库模式
6.1启动主库
以mount方式启动数据库:
cd /home/dmdba/dmdbms/bin/
./DmServiceDMDB start mount
设置OGUID值:
SP_SET_PARA_VALUE(1, 'ALTER_MODE_STATUS', 1);
sp_set_oguid(453331);
--修改数据库为 primary 模式
alter database primary;
SP_SET_PARA_VALUE(1, 'ALTER_MODE_STATUS', 0);
--查OGUID
SELECT OGUID FROM V$INSTANCE;
6.2启动备库
以mount方式启动数据库:
cd /dm8/dmdata/bin
./DmServiceDMDB start mount
设置OGUID值:
SP_SET_PARA_VALUE(1, 'ALTER_MODE_STATUS', 1);
sp_set_oguid(453331);
--修改数据库为 Standby 模式
alter database standby;
SP_SET_PARA_VALUE(1, 'ALTER_MODE_STATUS', 0);
七、配置监视器
7.1 配置确认监视器
vim dmmonitor.ini
MON_DW_CONFIRM = 1 #确认监视器模式
MON_LOG_PATH = /data/log1 #监视器日志文件存放路径
MON_LOG_INTERVAL = 60 #每隔 60s 定时记录系统信息到日志文件
MON_LOG_FILE_SIZE = 32 #每个日志文件最大 32M
MON_LOG_SPACE_LIMIT = 4096 #不限定日志文件总占用空间(必须改为非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.17.2:52141
MON_DW_IP = 192.168.17.3:52141
7.2配置非确认监视器
Vim dmmonitor_nor.ini
MON_DW_CONFIRM = 0 #非确认监视器模式
MON_LOG_PATH = /data/log0 #监视器日志文件存放路径
MON_LOG_INTERVAL = 60 #每隔 60s 定时记录系统信息到日志文件
MON_LOG_FILE_SIZE = 32 #每个日志文件最大 32M
MON_LOG_SPACE_LIMIT = 4096 #不限定日志文件总占用空间(必须改为非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.17.2:52141
MON_DW_IP = 192.168.17.3:52141
注意:再配置一个非确认监视器,日志文件路径不能和监视器一样,两个监视器的日志会写到同一个文件里,增加排查难度。
八、注册服务并启动
8.1 注册dmserver服务(主备)
cd /home/dmdba/dmdbms/script/root
./dm_service_installer.sh -p DMDB -t dmserver -dm_ini /dm8/dmdata/DMDB/dm.ini -m mount
8.2 注册dmwatcher服务(主备)
cd /home/dmdba/dmdbms/script/root/
./dm_service_installer.sh -t dmwatcher -p DMDB -watcher_ini /dm8/dmdata/DMDB/dmwatcher.ini
8.3 注册监视服务(监视器主机)
cd /home/dmdba/dmdbms/script/root/
./dm_service_installer.sh -p DmMonitor -t dmmonitor -monitor_ini /dm8/dmmonitor/dmmonitor.ini
/dm8/dmmonitor/dmmonitor.ini为监视器创建的路径
删除监视服务
如果想更换监视主机,可删除原来的监视服务
/home/dmdba/dmdbms/script/root/dm_service_uninstaller.sh –n DmMonitorServiceDmMonit
8.4 启动服务
先启动主备库实例服务,再启动主备库守护进程,最后启动确认监视器。
启动顺序:
1.启动主库dmserver ./DmServiceDM1 start
2.启动备库dmserver ./DmServiceDM2 start
3.启动主库dmwatcher ./DmWatcherServiceDM1 start
4.启动备库dmwatcher ./DmWatcherServiceDM2 start
5.启动确认监视器 ./DmMonitorServicedmmo start
前台打开非确认监视器,查看集群状态是否正常
./dmmonitor /home/dmdba/dmdbms/monitor/dmmonitor_nor.ini
在监视器上执行 show 命令
守护系统正常运行时,同一个守护进程组中,只有一个主库,其他的都是备库。
主库处于 Open 状态,主库守护进程也处于 Open 状态,本地没有守护进程控制文件,其内存值是 Valid 有效状态。
所有备库也处于 Open 状态,所有备库守护进程处于 Open 状态,本地没有守护进程控制文件,其内存值是 Valid 有效状态。
主库到所有备库的归档也都处于 Valid 有效状态。
需要关注的数值:
守护进程状态 WSTATUS 为 OPEN
实例状态 ISTATUS 为 OPEN
归档类型 RTYPE 为 REALTIME
归档状态 RSTAT 为 VALID
8.5 关闭顺序
关闭:关闭数据守护系统有着严格的顺序要求,需要先关闭监视器,其次关闭守护进程,最后关闭数据库服务
1. 手动关闭顺序
1)关闭确认监视器
2)关闭备库的守护进程
3)关闭主库的守护进程
4)关闭主库的数据库服务
5)关闭备库的数据库服务
确认监视器最先关闭的原因是:防止自动接管
守护进程比数据库服务要先关闭的原因:防止数据库服务关闭了,守护进程又将数据库服务启动。
主库数据库服务比备库数据库服务先关闭的原因:主库在关闭过程中会Purge已提交的事务,产生redo日志,如果备库先关闭,会导致主库发送归档日志失败。
九、故障测试
搭建完毕之后,关闭主库。查看dmmonitor是否切换主库,并自动拉起故障库。两边都测试一下是否正常自动切换和自动拉起。
十、dm_svc.conf配置
使用DM数据守护,一般要求编辑DM_svc.conf文件配置连接服务名,以实现故障自动重连。
初始dm_svc.conf文件由DM安装时自动生成。不同的平台生成目录有所不同注意需要访问的通过服务名访问的用户对该文件需要有读权限。它必须和接口/客户端工具(tomcat|was中间件)位于同一台机器上才能生效。
32位的DM安装在Win32操作平台下,此文件位于%SystemRoot%\system32目录;
64位的DM安装在Win64操作平台下,此文件位于%SystemRoot%\system32目录;
32位的DM安装在Win64操作平台下,此文件位于%SystemRoot%\SysWOW64目录;
在Linux平台下,此文件位于/etc目录
编辑DM_svc.conf文件(注意符号都是英文的):
TIME_ZONE=(480)
LANGUAGE=(cn)
DM_DW=(192.168.17.2:5236,192.168.17.3:5236)
[DM_DW]
LOGIN_MODE=(1)
--读写分离集群需加上RW_SEPARATE=(1)
读写分离一定要配置成:LOGIN_MODE=(1)
实时主备加强一致性一定要自动切换模式
更多相关资料请参考达梦云适配技术社区