DM8数据守护集群
1 系统(软硬件)环境
1.1 硬件环境
服务器具体配置信息
名称 CPU 内存 硬盘SSD 网卡
虚拟机centos7.5 I7-4720M 2G 40G 1000M
虚拟机centos7.5 I7-4720M 2G 40G 1000M
1.2 软件环境
操作系统 数据库版本
centos7.5 DM8.1
2 安装前规划
2.1 数据库存放路径规划
名称 存放路径 说明
安装路径 /opt/dmdbms
数据文件路径 /dmdata
归档日志文件 /dmbak/arch
备份文件
2.2 网络及端口规划
IP规划
主机类型 IP 实例名
主库 192.168.142.3(内部通信) GRP1_RT_01
备库 192.168.142.5(内部通信) GRP1_RT_02
监视器 192.168.142.16
端口规划
实例名 PORT_NUM MAL_INST_DW_PORT MAL_HOST MAL_PORT MAL_DW_PORT
GRP1_RT_01 5236 5336 192.168.142.3 5436 5536
GRP1_RT_02 5236 5336 192.168.142.5 5436 5536
2.3 调整 sysctl.conf
vim /etc/sysctl.conf
#注释掉kernel.shmmax和kernel.shmall两行,并添加以下行数
fs.file-max = 6815744
fs.aio-max-nr = 1048576
kernel.shmall = 2097152
kernel.shmmax = 2147483648
kernel.sem = 250 32000 100 128
net.ipv4.ip_local_port_range = 9000 65500
net.core.rmem_default = 4194304
net.core.rmem_max = 4194304
net.core.wmem_default = 262144
net.core.wmem_max = 1048576
vm.swappiness = 0
vm.dirty_background_ratio = 3
vm.dirty_ratio = 80
vm.dirty_expire_centisecs = 500
vm.dirty_writeback_centisecs = 100
:x保存退出
sysctl -p 立即生效
2.4 调整 Limits.conf
vim /etc/security/limits.conf添加以下内容
* soft nproc 65536
* hard nproc 65536
* soft nofile 65536
* hard nofile 65536
:x保存退出
备注:如果有该文件:/etc/security/limits.d/90-nproc.conf ,也需要修改。
该文件主要限制 nproc,优先级比 /etc/security/limits.conf 高,
即:如果 /etc/security/limits.d/90-nproc.conf 设置了 nproc 参数时,
生效的是 /etc/security/limits.d/90-nproc.conf 文件中的限制,而不是 /etc/security/limits.conf 的限制
vim /etc/security/limits.d/90-nproc.conf
* soft nproc 65536
重启后生效
2.5 调整 login
vim /etc/pam.d/login添加以下内容
session required /lib64/security/pam_limits.so
session required pam_limits.so
:x保存退出
2.6创建dmdba用户
groupadd dinstall
useradd -g dinstall -m -d /home/dmdba -s /bin/bash dmdba
echo dmdba | passwd --stdin dmdba
2.7目录及权限
mkdir /opt/dmdbms -p
mkdir /dmdata -p
mkdir /dmbak/arch -p
chown -R dmdba.dinstall /opt/dmdbms /dmdata /dmbak
2.8 数据库初始化参数
参数名称 值
页大小 8
簇大小 16
字符集 utf8
Varchar类型以字符为单位 否
大小写敏感 否
3 安装部署数据守护
3.1 安装DM数据库软件
3.1.1 配置环境变量
Redhat系列
换dmdba用户,在~/.bash_profile添加
vim /home/dmdba/.bash_profile
export TMP=/tmp
export DM_INSTALL_TMPDIR=$TMP
export LD_LIBRARY_PATH="$LD_LIBRARY_PATH:/opt/dmdbms/bin"
export DM_HOME="/opt/dmdbms"
export PATH="$DM_HOME/bin:$DM_HOME/tool:$PATH"
3.1.2 更改主机名
hostnamectl set-hostname dmrt01/dmrt02
3.2 初始化实例
3.2.1 初始化实例,注册实例服务
root用户
#初始化实例(GRP1_RT_01)
dminit PATH=/dmdata INSTANCE_NAME=GRP1_RT_01 EXTENT_SIZE=16 PAGE_SIZE=8 CASE_SENSITIVE=N CHARSET=1 LOG_SIZE=1024 SYSDBA_PWD=SYSDBA123 ARCH_FLAG=1
#初始化实例(GRP1_RT_02)
dminit PATH=/dmdata INSTANCE_NAME=GRP1_RT_02 EXTENT_SIZE=16 PAGE_SIZE=8 CASE_SENSITIVE=N CHARSET=1 LOG_SIZE=1024 SYSDBA_PWD=SYSDBA123 ARCH_FLAG=1
#启停一次主库
[dmdba@yuanzjdmrt01 ~]# dmserver /dmdata/DAMENG/dm.ini
当提示system is ready后 输入exit停止
3.3 准备数据
3.3.1 脱机备份、脱机还原方式
- 正常关闭主库
- 进行脱机备份
dmrman CTLSTMT="BACKUP DATABASE '/dmdata/DAMENG/dm.ini' FULL TO BACKUP_FILE1 BACKUPSET '/dmdata/DAMENG/BACKUP_FILE_01'"
- 拷贝备份文件到备库所在机器
scp -r /dmdata/DAMENG/BACKUP_FILE_01 dmdba@192.168.6.161:/dmdata/DAMENG/ - 在备库上执行脱机数据库还原与恢复
./dmrman CTLSTMT="RESTORE DATABASE '/dmdata/DAMENG/dm.ini' FROM BACKUPSET '/dmdata/DAMENG/BACKUP_FILE_01'"
./dmrman CTLSTMT="RECOVER DATABASE '/dmdata/DAMENG/dm.ini' FROM BACKUPSET '/dmdata/DAMENG/BACKUP_FILE_01'"
./dmrman CTLSTMT="RECOVER DATABASE '/dmdata/DAMENG/dm.ini' UPDATE DB_MAGIC"
3.4 --------------------------------配置主库GRP1_RT_01--------------------------------------------------
3.4.1 配置主库dm.ini(对应修改参数)
#实例名,建议使用―组名_守护环境_序号‖的命名方式,总长度不能超过 16
INSTANCE_NAME = GRP1_RT_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 次的日志发送信息
3.4.2 配置主库dmmal.ini
2节点配置配置一样。具体如下:
MAL_CHECK_INTERVAL = 5 #MAL链路检测时间间隔
MAL_CONN_FAIL_INTERVAL = 5 #判定MAL链路断开的时间
[MAL_INST1]
MAL_INST_NAME = GRP1_RT_01 #实例名和dm.ini中的INSTANCE_NAME一致
MAL_HOST = 192.168.142.3 #MAL 系统监听TCP连接的IP地址
MAL_PORT = 5436 #MAL #系统监听TCP连接的端口
MAL_INST_HOST = 192.168.142.3 #实例的对外服务IP地址
MAL_INST_PORT = 5236 #实例的对外服务端口,和dm.ini中的PORT_NUM一致
MAL_DW_PORT = 5536 #实例对应的守护进程监听TCP连接的端口
MAL_INST_DW_PORT = 5336
[MAL_INST2]
MAL_INST_NAME = GRP1_RT_02
MAL_HOST = 192.168.142.5
MAL_PORT = 5436
MAL_INST_HOST = 192.168.142.5
MAL_INST_PORT = 5236
MAL_DW_PORT = 5536
MAL_INST_DW_PORT = 5336
3.4.3 配置主库dmarch.ini
[ARCHIVE_REALTIME]
ARCH_TYPE = REALTIME #实时归档类型
ARCH_DEST = GRP1_RT_02 #实时归档目标实例名(远程库实例名)
[ARCHIVE_LOCAL1]
ARCH_TYPE = LOCAL #本地归档类型
ARCH_DEST = /dmbak/DAMENG/arch #本地归档文件存放路径
ARCH_FILE_SIZE = 512 #单位Mb,本地单个归档文件最大值
ARCH_SPACE_LIMIT = 102400 #单位Mb,0表示无限制,范围1024~4294967294M
3.4.4 配置主库dmwatcher.ini
[GRP1]
DW_TYPE = GLOBAL #全局守护类型
DW_MODE = MANUAL #切换模式
DW_ERROR_TIME = 10 #远程守护进程故障认定时间
INST_RECOVER_TIME = 60 #主库检测备库故障恢复的时间间隔
INST_ERROR_TIME = 10 #本地实例故障认定时间
INST_OGUID = 453332 #守护系统唯一OGUID值
INST_INI = /dmdata/DAMENG/dm.ini #dm.ini配置文件路径
INST_AUTO_RESTART = 1 #实例自动重启
INST_STARTUP_CMD = /opt/dmdbms/bin/dmserver #命令行方式启动
RLOG_SEND_THRESHOLD = 0 #指定主库发送日志到备库的时间阀值,默认关闭
RLOG_APPLY_THRESHOLD = 0 #指定备库重演日志的时间阀值,默认关闭
3.4.5 主库启动至mount状态
dmserver /dmdata/DAMENG/dm.ini mount
3.4.6 主库设置OGUID
SQL> SP_SET_PARA_VALUE(1, 'ALTER_MODE_STATUS', 1);
SQL> sp_set_oguid(453332);
3.4.7 主库修改数据库模式
#主库修改数据库为 primary
SQL>alter database primary;
SQL>SP_SET_PARA_VALUE(1, 'ALTER_MODE_STATUS', 0);
3.4.8 拷贝主库配置文件至备库
cd /dmdata/DAMENG/
scp -r dmwatcher.ini dmmal.ini dmarch.ini dmdba@192.168.6.161:/dmdata/DAMENG
dmwatcher.ini 、dmmal.ini不需要修改
修改dmarch.ini中的ARCH_DEST
3.5 ---------------------------------配置备库GRP1_RT_02------------------------------------
3.5.1 配置dm.ini
#实例名,建议使用―组名_守护环境_序号‖的命名方式,总长度不能超过 16
INSTANCE_NAME = GRP1_RT_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 次的日志发送信息
3.5.2 配置dmmal.ini
2节点配置配置一样,此处不用修改。 具体如下:
MAL_CHECK_INTERVAL = 5 #MAL 链路检测时间间隔
MAL_CONN_FAIL_INTERVAL = 5 #判定MAL链路断开的时间
[MAL_INST1]
MAL_INST_NAME = GRP1_RT_01 #实例名和dm.ini中的INSTANCE_NAME 一致
MAL_HOST = 192.168.6.160 #MAL 系统监听TCP连接的 IP 地址
MAL_PORT = 5436 #MAL #系统监听 TCP 连接的端口
MAL_INST_HOST = 192.168.6.160 #实例的对外服务IP地址
MAL_INST_PORT = 5236 #实例的对外服务端口,和dm.ini中的 PORT_NUM 一致
MAL_DW_PORT = 5536 #实例对应的守护进程监听TCP连接的端口
MAL_INST_DW_PORT = 5336
[MAL_INST2]
MAL_INST_NAME = GRP1_RT_02
MAL_HOST = 192.168.6.161
MAL_PORT = 5436
MAL_INST_HOST = 192.168.6.161
MAL_INST_PORT = 5236
MAL_DW_PORT = 5536
MAL_INST_DW_PORT = 5336
3.5.3 配置dmarch.ini
当前实例 GRP1_RT_02 是备库,守护系统配置完成后, 可能在各种故障处理中,
GRP1_RT_02 切换为新的主库,正常情况下, GRP1_RT_01 会切换为新的备库,需要向GRP1_RT_01 同步数据,因此实时归档的 ARCH_DEST 配置为 GRP1_RT_01
[ARCHIVE_REALTIME]
ARCH_TYPE = REALTIME #实时归档类型
ARCH_DEST = GRP1_RT_01 #实时归档目标实例名(远程库实例名)
[ARCHIVE_LOCAL1]
ARCH_TYPE = LOCAL #本地归档类型
ARCH_DEST = /dmdata/DAMENG/arch #本地归档文件存放路径
ARCH_FILE_SIZE = 512 #单位Mb,本地单个归档文件最大值
ARCH_SPACE_LIMIT = 102400 #单位Mb,0表示无限制,范围1024~4294967294M
3.5.4 配置dmwatcher.ini
[GRP1]
DW_TYPE = GLOBAL #全局守护类型
DW_MODE = MANUAL #自动切换模式
DW_ERROR_TIME = 10 #远程守护进程故障认定时间
INST_RECOVER_TIME = 60 #主库检测备库故障恢复的时间间隔
INST_ERROR_TIME = 10 #本地实例故障认定时间
INST_OGUID = 453332 #守护系统唯一OGUID值
INST_INI = /dmdata/DAMENG/dm.ini #dm.ini配置文件路径
INST_AUTO_RESTART = 1 #实例自动重启
INST_STARTUP_CMD = /opt/dmdbms/bin/dmserver #命令行方式启动
RLOG_SEND_THRESHOLD = 0 #指定主库发送日志到备库的时间阀值,默认关闭
RLOG_APPLY_THRESHOLD = 0 #指定备库重演日志的时间阀值,默认关闭
3.5.5 启动至mount状态
dmserver /dmdata/DAMENG/dm.ini mount
3.5.6 设置OGUID
SQL> SP_SET_PARA_VALUE(1, 'ALTER_MODE_STATUS', 1);
SQL> sp_set_oguid(453332);
3.5.7 修改数据库模式
#备库修改数据库为 standby
SQL>alter database standby;
SQL>SP_SET_PARA_VALUE(1, 'ALTER_MODE_STATUS', 0);
3.8 执行优化脚本
执行优化性能参数脚本,2节点都执行
4 配置监视器(单独安装或者安装在备机)
4.1 配置dmmonitor.ini
MON_DW_CONFIRM = 0 #普通监视器模式
MON_LOG_PATH = /opt/dmdbms/log #监视器日志文件存放路径
MON_LOG_INTERVAL = 60 #每隔 60s 定时记录系统信息到日志文件
MON_LOG_FILE_SIZE = 32 #每个日志文件最大32M
MON_LOG_SPACE_LIMIT = 0 #不限定日志文件总占用空间
[GRP1]
MON_INST_OGUID = 453332 #组 GRP1 的唯一OGUID 值
MON_DW_IP = 192.168.142.3:5536
MON_DW_IP = 192.168.142.5:5536
5 主备同步测试及主备切换测试
5.1 主备同步
-----主库创建表test1
SQL> create table test1 as select * from sysobjects;
-----备库查询
SQL> select count(*) from test1;
5.2 主备切换
dmmonitor /dmdata/DAMENG/dmmal.ini
show
login
switchover GRP1.GRP1_RT_02
switchover GRP1.GRP1_RT_01
6 定时备份策略
全量备份
全量备份:定时每周六晚22点整进行
call SP_CREATE_JOB('JOB_FULL_BAK_TIMELY',1,0,'',0,0,'',0,'定时全量备份');
call SP_JOB_CONFIG_START('JOB_FULL_BAK_TIMELY');
call SP_ADD_JOB_STEP('JOB_FULL_BAK_TIMELY', 'STEP_FULL_BAK', 6, '01000000/dmbak/DAMENG', 1, 2, 0, 0, NULL, 0);
call SP_ADD_JOB_SCHEDULE('JOB_FULL_BAK_TIMELY', 'SCHEDULE_FULL_BAK', 1, 2, 1, 64, 0, '22:00:00', NULL, '2019-07-01 22:00:00', NULL, '');
call SP_JOB_CONFIG_COMMIT('JOB_FULL_BAK_TIMELY');
增量备份
增量备份:定时每周一、二、三、四、五、日晚22点整进行
call SP_CREATE_JOB('JOB_INCREMENT_BAK_TIMELY',1,0,'',0,0,'',0,'定时增量备份');
call SP_JOB_CONFIG_START('JOB_INCREMENT_BAK_TIMELY');
call SP_ADD_JOB_STEP('JOB_INCREMENT_BAK_TIMELY', 'STEP_INCREMENT_BAK', 6, '11000000/dmbak/DAMENG|/dmbak/DAMENG', 1, 2, 0, 0, NULL, 0);
call SP_ADD_JOB_SCHEDULE('JOB_INCREMENT_BAK_TIMELY', 'SCHEDULE_INCREMENT_BAK', 1, 2, 1, 63, 0, '22:00:00', NULL, '2019-07-01 22:00:00', NULL, '');
call SP_JOB_CONFIG_COMMIT('JOB_INCREMENT_BAK_TIMELY');
备份清理
备份保留7天,清除7天前的备份,每晚21点整进行
call SP_CREATE_JOB('JOB_DEL_BAK_TIMELY',1,0,'',0,0,'',0,'定时删除备份');
call SP_JOB_CONFIG_START('JOB_DEL_BAK_TIMELY');
call SP_ADD_JOB_STEP('JOB_DEL_BAK_TIMELY', 'STEP_DEL_BAK', 0, 'SP_DB_BAKSET_REMOVE_BATCH(NULL,SYSDATE-7);', 1, 2, 0, 0, NULL, 0);
call SP_ADD_JOB_SCHEDULE('JOB_DEL_BAK_TIMELY', 'SCHEDULE_DEL_BAK', 1, 2, 1, 1, 0, '1:00:00', NULL, '2019-07-01 21:00:00', NULL, '');
call SP_JOB_CONFIG_COMMIT('JOB_DEL_BAK_TIMELY');
定时删除归档
归档保留7天,每周六凌晨3点执行
call
SP_CREATE_JOB('JOB_DEL_ARCH_TIMELY',1,0,'',0,0,'',0,'定时删除归档');
call SP_JOB_CONFIG_START('JOB_DEL_ARCH_TIMELY');
call SP_ADD_JOB_STEP('JOB_DEL_ARCH_TIMELY', 'STEP_DEL_ARCH', 0, 'SF_ARCHIVELOG_DELETE_BEFORE_TIME(SYSDATE-7);', 1, 2, 0, 0, NULL, 0);
call SP_ADD_JOB_SCHEDULE('JOB_DEL_ARCH_TIMELY', 'SCHEDULE_DEL_ARCH', 1, 2, 1, 1, 0, '03:00:00', NULL, '2019-07-01 21:00:00', NULL, '');
call SP_JOB_CONFIG_COMMIT('JOB_DEL_ARCH_TIMELY');
全备 增备 定时删除过期备份
每周六22:00点全备 每周日、周一至周五01:00增备 每周五删除7天前的备份数据