概要
介绍DM8的数据守护的实时主备环境搭建
实时主备使用三台主机,主库实例名DW01,备库实例名DW2,操作系统CentOS7。内部通信的MAL_HOST的IP地址可与本地IP相同,也可以不同,根据个人喜好配置。
INST_OGUID=453331
类型 IP 实例名 PORT_NUM DW_PORT MAL_HOST MAL_PORT MAL_DW_PORT
主库 192.168.149.135 DW01 5236 5237 192.168.149.135 5238 5239
备库 192.168.149.132 DW01 5236 5237 192.168.149.132 5238 5239
监听 192.168.149.134 DW01 5236 5237 192.168.222.120 5238 5239
整体架构流程
提示:这里可以添加技术整体架构
网络端口及IP的配置,根据个人电脑实际进行操作。但用VM的nat模式下,一定要注意虚拟机的IP会随着每次开关机的变化而发生变化
创建主库并同步原始数据
同一个数据守护环境中主备库的数据库名相同,实例名不同。本实操数据同步方法为直接停止主库,采用脱机备份的方式备份主库,然后复制到备库中恢复。
创建主库
-
创建主库实例
配置实例前准备
附加实例存放路径。初始化实例到/dm8/data目录下为例
(执行初始化命令前,需要使用 root 用户授予 /dm8/data 目录相应权限)
mkdir /dm8/data
chown dmdba:dinstall -R /dm8/data
chmod -R 755 /dm8/datadmdba用户进入bin目录 数据库名为 dw实例名为dw01 DBSERVER端口为 5236 ./dminit path=/dm8/data DB_NAME=dw INSTANCE_NAME=dw01 PORT_NUM=5236
-
root用户注册主库实例服务,便于管理
root 用户进入数据库安装目录
cd /home/dmdba/dmdbms/script/root
root目录下注册服务
/home/dmdba/dmdbms/script/root/dm_service_installer.sh -t dmserver -dm_ini /dm8/data/dw/dm.ini -p dw (dw为服务名称) -
使用DMINIT创建的实例,在第一次启动时进行初始化
dmdba在安装目录bin下执行
./dmserver /dm8/data/dw/dm.ini
./disql SYSDBA/SYSDBA -
启动归档模式,否则无法备份主库
disql里执行
alter database add archivelog ‘dest=/dm/dmarch,type=local,file_size=128,space_limit=0’;
alter database archivelog;
alter database open;
脱机备份主库
- 使用DMRMAN脱机备份主库。备份之前要确保DMAP是启动的。
脱机备份主库时,出现错误:
服务器正在运行或者存在其他进程正在操作同一个库,查看所有进程
ps aux|grep dmser
root 3019 0.4 44.4 3737496 442800 pts/0 Sl+ 00:44 0:09 ./dmserver /dm8/data/dw/dm.ini
kill 3019
./dmrman CTLSTMT=“backup database ‘/dm8/data/dw/dm.ini’ backupset ‘/home/dmdba/dmdbms/dmbak/dw_full_01’”
其中,/home/dmdba/dmdbms/dmbak/dw_full_01为一个新空目录
主库在运行过程当中比较耗时,可直接在之前的窗口按“Ctrl+C”或者输入exit命令,完成实例的关闭。
创建备库
-
创建备库实例
在备库主机中创建备库实例
./dminit path=/dm8/data DB_NAME=dw INSTANCE_NAME=dw02 PORT_NUM=5236 -
root用户注册备库实例服务,便于管理
root 用户进入数据库安装目录
cd /home/dmdba/dmdbms/script/root
root目录下注册服务
/home/dmdba/dmdbms/script/root/dm_service_installer.sh -t dmserver -dm_ini /dm8/data/dw/dm.ini -p dw
备库恢复备份
-
主库备份传输到备库
dw1的bin目录下执行
备库上新建/home/dmdba/dmdbms/dmbak/dw_full_02文件
scp -r /home/dmdba/dmdbms/dmbak/dw_full_01 192.168.149.132:/home/dmdba/dmdbms/dmbak/dw_full_02 -
恢复备库
bin目录下执行
./dmrman CTLSTMT=“restore database ‘/dm8/data/dw/dm.ini’ from backupset ‘/home/dmdba/dmdbms/dmbak/dw_full_02/dw_full_01’”
数据库恢复
./dmrman CTLSTMT=“recover database ‘/dm8/data/dw/dm.ini’ from backupset ‘/home/dmdba/dmdbms/dmbak/dw_full_02/dw_full_01’”
更新数据库db_magic
./dmrman CTLSTMT=“recover database ‘/dm8/data/dw/dm.ini’ update db_magic”
配置主备库参数
实时主备的数据守护需要配置 4 个参数文件。配置文件都是在实例目录下创建。
-
配置dm.ini
此文件在创建实例时会自动生成,配置的参数根据不同节点进行操作。
dm.ini
INSTANCE_NAME = DW01
PORT_NUM =
DW_INACTIVE_INTERVAL=60
ALTER_MODE_STATUS = 0
ENABLE_OFFLINE_TS=2
MAI_INI=1
ARCH_INI=1
RLOG_SEND_APPLY_MON=64 -
配置dmmal.ini
需要单独创建此文件,主备库的配置必须完全一致。
新建dmmal.ini
MAL_CHECK_INTERVAL = 5
MAL_CONN_FAIL_INTERVAL =5[MAL_INST1]
MAL_INST_NAME=DW01
MAL_HOST=192.168.149.135
MAL_PORT=5238
MAL_INST_HOST=192.168.149.135
MAL_INST_PORT=5236
MAL_DW_PORT=5239
MAL_INST_DW_PORT=5237[MAL_INST2]
MAL_INST_NAME=DW02
MAL_HOST=192.168.149.132
MAL_PORT=5238
MAL_INST_HOST=192.168.149.132
MAL_INST_PORT=5236
MAL_DW_PORT=5239
MAL_INST_DW_PORT=5237 -
配置dmarch.ini
此文件在两个主备节点的环境中,数据同步的arch_dest互相写对方的实例。如DW01则写对应arch_dest写DW02,若之前已启动此文档,则文件存在,否则需要手动创建。
注意#注释的内容不能去掉,以主节点的为例:
#DaMeng Database Archive Configuration file
#this is comments[ARCHIVE_LOCAL1] ARCH_TYPE = LOCAL ARCH_DEST = /dm/dmarch ARCH_FILE_SIZE = 128 ARCH_SPACE_LIMIT = 0 ARCH_FLUSH_BUF_SIZE = 0 ARCH_HANG_FLAG = 1 #DaMeng Database Archive Configuration file #this is comments ARCH_WAIT_APPLY=1 [ARCHIVE_REALTIME] ARCH_TYPE = REALTIME ARCH_DEST = DW02
-
配置dmwatcher.ini
dmwatcher.ini是守护进程配置文件,除了异步主备,其他类型的主备必须配置为全局守护类型。在两个主备节点都创建并添加以下内容。
[GRP1]
DW_TYPE=GLOBAL
DW_MODE=AUTO
INST_RECOVER_TIME=60
INST_ERROR_TIME=10
INST_OGUID=453331
INST_INI=/dm8/data/dw/dm.ini
INST_AUTO_RESTART=1
INST_STARTUP_CMD=/home/dmdba/dmdbms/bin/dmserver
RLOG_SEND_THRESHOLD=0
RLOG_APPLY_THRESHOLD=0
启动主备库
为保证数据的一致性,在数据守护搭建时,这一部必须以配置模式启动主备库。
- 启动主库
cd /home/dmdba/dmdbms/bin
dmserver /dm8/data/dw/dm.ini mount - 启动备库
cd /home/dmdba/dmdbms/bin
dmserver /dm8/data/dw/dm.ini mount
设施OGUID
- disql中分别在主备库设置OGUID。
sp_set_oguid(453331);
修改数据库模式
-
使用SQL语句,将主库的模式设置为PRIMARY,备库的模式设置为STANDBY。
主库:
alter database primary;
备库:
alter database standby;
该操作是从NORMAL模式修改到其他模式,如果当前数据库不是NORMAL模式,那么需要先修改dm.ini中ALTER_MODE_STATUS值为1,使允许修改数据库模式,在修改对应模式后再将该值改为0。
注册并启动守护进程
用“root”用户将守护进程注册到服务,方便管理,在主库和备库都需要注册。以主库操作为例,备库操作与主库操作相同。
- 注册守护进程服务
/home/dmdba/dmdbms/script/root/dm_service_installer.sh -t dmwatcher -watcher_ini /dm8/data/dw/dmwatcher.ini -p dw - 启动守护进程
systemctl start DmWatcherServicedw - 守护进程启动后,自动将MOUNT状态的实例启动到OPEN
cd /home/dmdba/dmdbms/bin
./disql SYSDBA/SYSDBA
select instance_name,status , m o d e ,mode ,mode from v$instance;
配置监视器
为了确保数据守护高可用的正常运行,需要独立的服务器来部署监视器,监视器上只需要安装达梦数据库软件。
配置确认监视器参数文件
- /dmdbms/data/目录下创建并修改dmmonitor.ini配置文件。
在/home/dmdba/dmdbms/bin里新建dmmonitor.ini文件
MON_DW_CONFIRM=1
MON_LOG_PATH=/home/dmdba/dmdbms/bin/log
MON_LOG_INTERVAL=60
MON_LOG_FILE_SIZE=32
MON_LOG_SPACE_LIMIT=0
[GRP1]
MON_INST_OGUID=453331
MON_DW_IP=192.168.149.135:5239
MON_DW_IP=192.168.149.132:5239 - 用“root”用户注册,将确认监视器注册为服务。
/home/dmdba/dmdbms/script/root/dm_service_installer.sh -t dmmonitor -monitor_ini/home/dmdba/dmdbms/bin/dmmonitor.ini -p dw - 启动确认监视器
systemctl start DmMonitorServicedw.service
查看是否有dmmonitor进程
ps -ef|grep dmmonitor
配置普通监视器参数文件
在监控节点的/dmdbms/data/目录下创建并修改dmmonitor0.ini配置文件的命令如下。该配置文件供普通监视器使用。
在/home/dmdba/dmdbms/bin里新建dmmonitor0.ini文件
MON_DW_CONFIRM=0
MON_LOG_PATH=/home/dmdba/dmdbms/bin/log
MON_LOG_INTERVAL=60
MON_LOG_FILE_SIZE=32
MON_LOG_SPACE_LIMIT=0
[GRP1]
MON_INST_OGUID=453331
MON_DW_IP=192.168.149.135:5239
MON_DW_IP=192.168.149.132:5239
启动普通监视器
普通监视器用来查看和执行管理命令。其启动与否不影响数据守护的运行。
dmmonitor /dm8/dmdbms/data/dmmoitor0.ini
主备同步测试
主库建表
create table dave as select * from sysobjects;
select count(1) from dave;
备库查询
select instance_name,status
,
m
o
d
e
,mode
,mode from v$instance;
select count(1) from dave;
监听状态
总结
实时主备的搭建,需要有耐心,每一步的操作需要非常细致,文件的填入不要因为复制黏贴遗漏单词、文件的权限都需要符合dmdba的账户权限、运行中的线程没启动需要查看指令来操作。