DM8 主备守护集群搭建(实战版搭建指南)
一 前期准备工作
数据库服务器都建议关闭防火墙,以 root 运行命令:
systemctl status firewalld
如果未关闭,关闭加入开机不自启
Systemctl stop firewalld
Systemctl disable firewalld
操作系统资源限制检查
cpu
内存
dmdba 用户执行 ulimit -a
- data seg size 建议设置为 1048576 以上或 unlimited,此参数过小将导
致数据库启动失败。 - file size 建议设置 unlimited(无限制),此参数过小导致数据库安装或初
始化失败。 - open files 建议设置为 65536 以上或 unlimited。用 vim 打开配置文
件 vi /etc/security/limits.conf 在下面加两行。
dmdba soft nofile 65536
dmdba hard nofile 65536 - virtual memory 建议设置为 1048576 以上或 unlimited,此参数过小
将导致数据库启动失败。 - max user processes 最大线程数这个参数建议修改为 10240。用 vim
打开配置文件 vi /etc/security/limits.conf 在下面加两行。
dmdba soft nproc 10240
dmdba hard nproc 10240
1.3.1 操作系统时间
确认操作系统时间为真实时间,如果时间不匹配,请及时调整系统时间
1.3.2 磁盘环境检查
确认磁盘大小以及挂载点,根据实际情况规划数据库程序安装位置以及数据
文件、备份文件位置,归档日志文件大小限制以及位置。
时间同步
搭建集群时,将节点内操作系统时间同步。
查看时间: date
磁盘调度算法
磁盘调度算法要求:deadline
I/O 调度方法的查看与设置
- 查看当前系统的 I/O 调度
cat/sys/block/sda/queue/scheduler
上图中选择的是:deadline 算法;
永久更改 I/O 调度
修改内核引导参数,加入 elevator=调度程序名
[root@test1 tmp]# vi /boot/grub/menu.lst
更改到如下内容:
kernel /boot/vmlinuz-2.6.18-8.el5 ro root=LABEL=/ elevator=deadline
rhgb quiet
重启之后,查看调度方法:
[root@test1 ~]# cat /sys/block/sda/queue/scheduler
noop anticipatory [deadline] cfq #已经是 deadline 了
二 部署信息
三 搭建
3.1.1创建用户(主备同时操作创建同名用户,初始化实例)
groupadd dinstall
useradd -g dinstall -m -d /home/dmdba -s /bin/bash dmdba
passwd dmdba
输入dmdba用户密码:
mkdir /dm8 /data #程序安装目录
chown -R dmdba:dinstall /dm8 /data ##修改目录权限
3.1.2 挂载光盘,修改安装文件权限
mount dm8*.iso /opt
cd /opt
chmod 755 ./DMInstall.bin
3.1.3初始化实例
切换程序用户进行安装
su - dmdba
cd /opt
[dmdba@localhost opt]$ ./DMInstall.bin -i
Please select the installer's language (E/e:English C/c:Chinese) [E/e]:C
是否输入Key文件路径? (Y/y:是 N/n:否) [Y/y]:y
是否设置时区? (Y/y:是 N/n:否) [Y/y]:y
设置时区: 21
请选择安装类型的数字序号 [1 典型安装]: 1
请选择安装目录 [/home/dmdba/dmdbms]:/dm8/
可用空间: 14G
是否确认安装路径(/dm/bin)? (Y/y:是 N/n:否) [Y/y]:y
是否确认安装? (Y/y:是 N/n:否):y
注册DmAPservice服务,和启动DmAPService备份工具服务
[dmdba@localhost bin]$ exit # 退出到root用户目录下
[root@localhost root]# cd /dm7/bin/script/root/
[root@localhost root]# ./root_installer.sh
初始化服务(此处是默认只指定了目录,如需其他要求根据客户要求添加./dminit -h可以查看初始化参数)
dmdba用户
[dmdba@localhost opt]$ cd /dm7/bin/
[dmdba@localhost bin]$ ./dminit path=/data
[dmdba@localhost bin]$ ./dminit path=/data
3.2.1主备库数据一致性
本地归档配置
配置 dm.ini,打开 ARCH_INI 参数
ARCH_INI = 1 #打开归档配置
3.2.2配置 dmarch.ini
[ARCHIVE_LOCAL1]
ARCH_TYPE = LOCAL #本地归档类型
ARCH_DEST = /data/DAMENG/arch #本地归档文件存放路径
ARCH_FILE_SIZE = 128 #单位 Mb,本地单个归档文件最大值
ARCH_SPACE_LIMIT = 0 #单位 Mb,0 表示无限制,范围 1024~4294967294M
脱机备份、脱机还原方式
正常关闭数据库
进行脱机备份
./dmrman CTLSTMT="BACKUP DATABASE '/data/DAMENG/dm.ini' FULL TO BACKUP_FILE1 BACKUPSET '/data/BACKUP_FILE_01'"
拷贝备份文件到备库所在机器
scp -r BACKUP_FILE_01 dmdba@192.168.65.207:/data
执行脱机数据库还原与恢复
./dmrman CTLSTMT="RESTORE DATABASE '/data/DAMENG/dm.ini' FROM BACKUPSET '/data/BACKUP_FILE_01'"
./dmrman CTLSTMT="RECOVER DATABASE '/data/DAMENG/dm.ini' FROM BACKUPSET '/data/BACKUP_FILE_01'"
./dmrman CTLSTMT="RECOVER DATABASE '/data/DAMENG/dm.ini' UPDATE DB_MAGIC"
3.3.1配置主库 GRP1_RT_01
3.2.1配置 dm.ini
在 DW_P 机器上配置主库的实例名为 GRP1_RT_01,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.3.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 = GRP1_RT_01 #实例名,和 dm.ini 中的 INSTANCE_NAME 一致
MAL_HOST = 192.168.65.206 #MAL 系统监听 TCP 连接的 IP 地址
MAL_PORT = 61141 #MAL 系统监听 TCP 连接的端口
MAL_INST_HOST = 192.168.65.206 #实例的对外服务 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 = GRP1_RT_02
MAL_HOST = 192.168.65.207
MAL_PORT = 61142
MAL_INST_HOST = 192.168.65.207
MAL_INST_PORT = 5237
MAL_DW_PORT = 52142
MAL_INST_DW_PORT = 33142
3.3.3配置 dmarch.ini
修改 dmarch.ini,配置本地归档和实时归档。除了本地归档外,其他归档配置项中的 ARCH_DEST 表示实例是 Primary 模式时,需要同步归档数据的目标实例名。当前实例 GRP1_RT_01 是主库,需要向 GRP1_RT_02(实时备库)同步数据,因此实时归档的 ARCH_DEST 配置为GRP1_RT_02。
[ARCHIVE_REALTIME]
ARCH_TYPE = REALTIME #实时归档类型
ARCH_DEST = GRP1_RT_02 #实时归档目标实例名
[ARCHIVE_LOCAL1]
ARCH_TYPE = LOCAL #本地归档类型
ARCH_DEST = /data/DAMENG/arch #本地归档文件存放路径
ARCH_FILE_SIZE = 128 #单位 Mb,本地单个归档文件最大值
ARCH_SPACE_LIMIT = 2048 #单位 Mb,0 表示无限制,范围 1024~4294967294M
3.3.4配置 dmwatcher.ini
修改 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 = /data/DAMENG/dm.ini #dm.ini 配置文件路径
INST_AUTO_RESTART = 1 #打开实例的自动启动功能
INST_STARTUP_CMD = /dm8/bin/dmserver #命令行方式启动
RLOG_SEND_THRESHOLD = 0 #指定主库发送日志到备库的时间阈值,默认关闭
RLOG_APPLY_THRESHOLD = 0 #指定备库重演日志的时间阈值,默认关闭
拷贝守护配置文件mal文件到备库
scp dmmal.ini dmwatcher.ini dmdba@192.168.65.207:/data/DAMENG/
3.3.5启动主库
以 Mount 方式启动主库
./dmserver /data/DAMENG/dm.ini mount
设置 OGUID,修改数据库模式
启动命令行工具 DIsql,登录主库设置 OGUID 值。
SP_SET_PARA_VALUE(1, 'ALTER_MODE_STATUS', 1);
sp_set_oguid(453331);
alter database primary;
SP_SET_PARA_VALUE(1, 'ALTER_MODE_STATUS', 0);
3.4 配置备库 GRP1_RT_02
3.4.1配置 dm.ini
INSTANCE_NAME = GRP1_RT_02
PORT_NUM = 5237 #数据库实例监听端口
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配置 dmarch.ini
修改 dmarch.ini,配置本地归档和实时归档。除了本地归档外,其他归档配置项中的 ARCH_DEST 表示实例是 Primary 模式时,需要同步归档数据的目标实例名。当前实例 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 = /data/DAMENG/arch #本地归档文件路径
ARCH_FILE_SIZE = 128 #单位 Mb,本地单个归档文件最大值
ARCH_SPACE_LIMIT = 2048 #单位 Mb,0 表示无限制,范围 1024~4294967294M
3.4.3启动备库
以 Mount 方式启动备库
./dmserver /data/DAMENG/dm.ini mount
设置 OGUID修改数据库模式
启动命令行工具 DIsql,登录备库设置 OGUID 值为 453331
SQL>SP_SET_PARA_VALUE(1, 'ALTER_MODE_STATUS', 1);
SQL>sp_set_oguid(453331);
SQL>alter database standby;
SQL>SP_SET_PARA_VALUE(1, 'ALTER_MODE_STATUS', 0);
3.4.4配置监视器(主库)
vim /data/DAMENG/dmmonitor.ini
MON_DW_CONFIRM = 1 #确认监视器模式
MON_LOG_PATH = /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 ,MAL_DW_PORT
MON_DW_IP = 192.168.65.206:52141
MON_DW_IP = 192.168.65.207:52142
3.4.5启动守护进程(主备库同时启动)
启动各个主备库上的守护进程:
./dmwatcher /data/DAMENG/dmwatcher.ini
守护进程启动后,进入 Startup 状态,此时实例都处于 Mount 状态。守护进程开始
3.4.6启动监视器
./dmmonitor /data/dmmonitor.ini
show 查看监控状态,open 主备都处于启用状态,表示数据库正常
3.5优化
3.5.1参数优化:(根据自身CPU 内存 磁盘容量更改 此根据 磁盘20G 内存1G cpu 1核进行更改的 )
内存参数:
MAX_OS_MEMORY 95 95
DM 数据库占用的内存占操作系统物理内存和虚拟内存之和百分比,需要设置为 95
BUFFER 100 800
用于缓存数据页,一般配置为操作系统物理内存的 60%~80%
MAX_BUFFER 100 800
用于控制系统缓冲区的上限,一般配置为和 BUFFER 参数相等
BUFFER_POOLS 1 61
BUFFER 的分区数,一般配置为质数,取值范围为 1~512,并发较大的系统需要配置这个参数;建议BUFFER/BUFFER_POOLS>=500MB ;MAX_BUFFER>BUFFER 时,动态扩展的缓冲区不参与分区
RECYCLE 64 4000
高并发或大量使用 with、临时表、排序等应该适当调整
RECYCLE_POOLS 1 7
RECYCLE 的分区数,一般配置为质数,建议 RECYCLE/RECYCLE_POOLS>=500MB
HJ_BUF_GLOBAL_SIZE 500 500
HASH 连接操作符的数据总缓存大小(>=HJ_BUF_SIZE),系统级参数,以兆为单位。有效值范围(10~500000)
HJ_BUF_SIZE 50 300
单个 HASH 连接操作符的数据总缓存大小,以兆为单位。有效值范围。有效值范围(2~100000)
DICT_BUF_SIZE 5 50
字典缓冲区大小,以兆为单位当数据库对象较多时建议适当放大
TEMP_SIZE 10 100
默认创建的临时表空间大小,以兆为单位。有效值范围(10~1048576 ),不断的扩充临时表空间也会影响性能,生产系统建议改为 1000
VM_POOL_SIZE 64 256
系统执行时虚拟机内存池大小,在执行过程中用到的内存大部分是从这里申请的。当系统中存储过程、存储函数、包等对象较多时,此参数可以适当放大
SESS_POOL_SIZE 16 256
会话缓冲区大小,以 KB 为单位,有效值范围(16~1024*1024)。若所申请的内存超过实际能申请的大小,则系统将按 16KB 大小重新申请
CACHE_POOL_SIZE 10 200
SQL 缓冲池大小,以兆为单位。有效 值 范 围 : 32 位 平 台 下 为(1~2048);64 位平台下为(1~67108864)。单位:MB
MEMORY_MAGIC_CHECK 2 2
建议为 2 开启,性能有明显下降的话,可以设置为 1
PK_WITH_CLUSTER 1 0
在建表语句中指定主关键字时,是否缺省指定 为 CLUSTER,0:不指定;1:指定 注:该参数对列存储表和堆表无效
CPU参数
WORKER_THREADS 1 2
工作线程个数,有效值范围 1~64,一般配置为 CPU 核数相等或其 2倍
TASK_THREADS 1 2
任务线程个数,一般配置为与WORKER_THREADS 相等
SESSION相关参数
MAX_SESSION 100 200
系统允许同时连接的最大数,同时还受到 LICENSE 的限制,取二者中较小的值,有效值范围(1~65000 )
MAX_SESSION_STATEMENT 100 200
单个会话上允许同时打开的语句句柄最大数,有的应用忘记关闭语句句柄,导致报错,这个参数可以适当放大
查询相关参数
USE_PLN_POOL 1 1
是否重用执行计划。0:禁止执行计划的重用;1:启用执行计划的重用功能 ;2:对不包含显式参数的语句进行常量参数化优化;3:即使包含显式参数的语句,也进行常量参数化优化
OLAP_FLAG 0 2
OLTP 类型的应用建议设置 2,OLAP 类型应用建议设置为 1
OPTIMIZER_MODE 0 1
OPTIMIZWE_MODE=0,表示使用 老 优 化 器 模 式 ;
OPTIMIZWE_MODE=1,表示使用新优化器模式。新老优化器模式对一些优化的处理方式不同,最主要的不同在于:老优化器采用卡特兰树方式探测最优计划;新优化器模式采用左深二叉树方式探测最优计划,对于CROSS JOIN 尝试采用把左表连接列转为变量 VAR,并下放到右表的处理方式。2016 年以后的 DM7 版本建议使用新优化器,老版本基于老优化器调优好的可以采用老优化器
VIEW_PULLUP_FLAG 0 1
是否对视图进行上拉优化,把视图转换为其原始定义,消除视图。可取值 0、1、2。0:不进行视图上拉优化;1:对不包含别名和同名列的视图进行上拉优化;2:对包含别名和同名列的视图也进行上拉优化
兼容性参数
COMPATIBLE_MODE 0 2( ORACLE 环境是 2,建 议 根据 源 库类 型 进行设置)
是否兼容其他数据库模式
0:不兼容
1:兼容 SQL92 标准
2:兼容 ORACLE
3:兼容 MS SQL SERVER
4:兼容 MYSQL,
5:兼容 DM6
6:兼容 TERADATA
监控参数
ENABLE_MONITOR 2 1
启用动态监控功能标记
0:不启用;
1:低级别监控;
2:高级别监控;
3:在高级别监控的基础上增加搜集各操作符的执行时间对性能影响较大,生产环境建议改为 0
日志相关
SVR_LOG 0 1
是否打开 SQL 日志功能,0:表示关闭;1:表 示日志文件非切换模式,但输出的日志格式是 详细模
式;2:表示日志文件为切换模式,输出 的日志也是详细模式;3:表示日志为非切换模 式,但输出日志为简单模式生产环境对性能影响较大,建议改为 0
IO相关
direct_io 0 0或1 使用 SSD 时推荐为 1
Purge相关
purge_del_opt 0 0 不能修改为 1 或 2
VM_POOL_SIZE = 64
VM_POOL_TARGET = 32768
SESS_POOL_SIZE = 64
SESS_POOL_TARGET = 32768
日志优化(扩容REDO重写日志大小)
./disql SYSDBA/SYSDBA*local:5236 #登录数据库,默认账号密码和端口根据实际配置更改
alter database resize logfile 'DAMENG01.log' to 2048;
alter database resize logfile 'DAMENG02.log' to 2048;
添加日志(添加REDO日志数量)
alter database add logfile 'DAMENG03.log' size 2048;
alter database add logfile 'DAMENG04.log' size 2048;
3.6注册服务
主备注册数据库服务,守护服务
[root@localhost root]# ./dm_service_installer.sh -t dmserver -dm_ini /data/DAMENG/dm.ini -p DMSERVER
[root@localhost root]# ./dm_service_installer.sh -t dmwatcher -watcher_ini /data/DAMENG/dmwatcher.ini -p DMWATCHER
注册监视器
[root@localhost root]# ./dm_service_installer.sh -t dmmonitor -monitor_ini /data/DAMENG/dmmonitor.ini -p DMMONITOR
启动数据库服务顺序:
第一步 启动主备数据库
cd /dm8/bin
[dmdba@localhost bin]$ ./DmServiceDMSERVER start
Starting DmServiceDMSERVER: [ OK ]
第二步 启动主备守护进程服务
[dmdba@localhost bin]$ ./DmWatcherServiceDMWATCHER start
Starting DmWatcherServiceDMWATCHER: [ OK ]
第三步 启动监视器服务
[dmdba@localhost bin]$ ./DmMonitorServiceDMMONITOR start
Starting DmMonitorServiceDMMONITOR: [ OK ]
停止数据库服务顺序:
第一步 停止备库守护进程服务
./DmWatcherServiceDMWATCHER stop
第二步 停止主库守护进程服务
./DmWatcherServiceDMWATCHER stop
第三步 停止主库数据库服务
./DmServiceDMSERVER stop
第四步 停止备库数据库服务
./DmServiceDMSERVER stop
3.7正常的启动停止顺序
启动服务
启动服务时要严格按照顺序执行。启动顺序为主库服务——备库服务——主库守护——备库守护。
停止服务
停止服务也要严格按照顺序执行,否则可能导致主备出现问题。停止服务顺序为:备库守护——主库守护 ——主库服务——备库服务
四 主备切换
4.1 手动切换
一主一备切换方式不指定切换备库
前台登录监视器
cd /dm8/bin
./dmmonitor /data/dmmonitor.ini
进入监视器登录
4.2 切换主备库
输入: switchover
备库RT_02已经接管RT_01成为主库切换成功正常对外提供服务
4.3指定备库切换备库命令:
takeover force GRP1.GRP1_RT_02 # 组名.实例名
五.备份还原
5.1登录数据库备份
全备(热备登录数据库备份)
BACKUP DATABASE FULL BACKUPSET '/data/dmbackup/db_full_bak_01';
5.2恢复还原
数据库的恢复还原操作只能脱机进行,使用dmrman
./dmrman CTLSTMT="RESTORE DATABASE '/data/DAMENG/dm.ini' FROM BACKUPSET '/data/dmbackup/db_full_bak_01'"
./dmrman CTLSTMT="RECOVER DATABASE '/data/DAMENG/dm.ini' FROM BACKUPSET '/data/dmbackup/db_full_bak_01'"
./dmrman CTLSTMT="RECOVER DATABASE '/data/DAMENG/dm.ini' UPDATE DB_MAGIC"
一次恢复,两次还原(注意:新库只需要还原一次即可,还原DB_MAGIC)
两个指定:指定dm.ini文件,指定备份集路径