环境介绍:
三台主机,分别为主库、备库、监视器
端口规划
准备工作
主库系统检查
CPU信息检查
#lscpu
内存信息检查
#free -m
检查/proc/sys/vm/overcommit_memory是否设置为0。设置为1或者2时可能会出现操作物理内存有空余,但数据库服务无法申请内存的严重问题。
#cat /proc/sys/vm/overcommit_memory
#vim /etc/sysctl.conf
vm.overcommit_memory=0
#sysctl -p ######使配置文件生效
为避免操作系统内存因大量使用SWAP内存而降低数据库性能,在安装部署时需检查设置相关变量来控制系统对swap的使用倾向,从而使系统最大发挥内存性能。
#vim /etc/sysctl.conf
vm.swappiness = 10
vm.min_free_kbytes = 默认值或按需设置
swappiness的取值范围为1~100,
当操作系统内存不足时,swappiness值建议设置为1;
当系统内存足够时,swappiness推荐设置为10,以提供操作系统最佳性能。
同时也可配合设置vm.min_free_kbytes参数限制值。
注意,当参数vm.min_free_kbytes没有做限制时,建议根据实际情况至少配置一个最小限制值;当操作系统有默认值时,可以不进行改动。
为避免arena分配区开辟过多造成内存损耗,在安装部署时需设置环境变量来限制arena的最大数量,将其写入到dmdba环境变量设置中。
#vim /etc/profile
export MALLOC_ARENA_MAX=1
磁盘信息检查
#df -h
磁盘调度算法检查
#cat /sys/block/sda*/queue/scheduler
DM使用的调度算法是[deadline],上图即是,无需调整。
更改I/O调度方法:
#vim /boot/grub/menu.lst
kernel /boot/vmlinuz-2.6.32-504.el6 ro root=LABEL=/ elevator=deadline rhgb quiet
测试主库磁盘读写速度(/dbdata、/dbbak、/dblog)
#dd if=/dev/zero of=/dbdata/test bs=64k count=4k oflag=dsync
备库系统检查步骤与主库相同
主备库防火墙检查
#systemctl status firewalld
#systemctl stop firewalld
#systemctl disable firewalld
主备库Selinux安全检查
#vim /etc/selinux/config
SELINUX=DISABLED
主备库系统资源限制检查与配置
为了使达梦数据库能够正常运行, 建议用户检查 ulimit 的参数。首先用户使用 dmdba用户进行登录,运行命令(ulimit -a)进行查询。
$ulimit -a
#vi /etc/security/limits.conf
dmdba soft data unlimited
dmdba hard data unlimited
##data seg size建议设置为1048576以上或unlimited,此参数过小将导致数据库启动失败。
dmdba soft fsize unlimited
dmdba hard fsize unlimited
##file size建议设置unlimited(无限制),此参数过小导致数据库安装或初始化失败。
dmdba soft nolife 65536
dmdba hard nolife 65536
##open files建议设置为 65536 以上或 unlimited。
dmdba soft nproc 10240
dmdba hard nproc 10240
##max user processes 最大线程数这个参数建议修改为10240。
dmdba soft nice 0
dmdba hard nice 0
##nice 设置优先级,值越小表示进程“优先级”越高。
dmdba soft as unlimited
dmdba hard as unlimited
##地址空间限制设置为ulimited。
dmdba soft core unlimited
dmdba hard core unlimited
##内核文件大小建议设置为ulimited。
注意:通过systemctl或者systemd service方式设定随机自启动的数据库服务, 其能打开的最大文件描述符、proc数量等不受limits.conf控制,需要修改/etc/systemd/system.conf文件,增加类似DefaultLimitNOFILE=65535重启服务器,才有效果,如下:
DefaultLimitFSIZE=unlimited
DefaultLimitDATA=unlimited
DefaultLimitCORE=unlimited
DefaultLimitNOFILE=65536
DefaultLimitAS=unlimited
DefaultLimitNPROC=10240
DefaultLimitNICE=0
在数据库运行之后,可通过cat /proc/pid号/limits,检查实际资源限制是否生效:
创建所需的组和用户
#groupadd dinstall
#useradd -g dinstall dmdba
#passwd dmdba
#chown -R dmdba:dinstall /dbdata
#chown -R dmdba:dinstall /dbbak
#chown -R dmdba:dinstall /dblog
#chmod -R 775 /dbdata
#chmod -R 775 /dbbak
#chmod -R 775 /dblog
#mkdir -p /dbdata/dmdata/ ###数据文件
#mkdir -p /dblog/dmlog ###跟踪日志
#mkdir -p /dblog/dmarch #####归档日志
主备库安装DM7并初始化
主备库安装DM7
$ ./DMInstall.bin -i
#/dmdbms/dm8/script/root/root_installer.sh
主库初始化
$ dminit PATH=/dbdata/dmdata/ DB_NAME=DAMENG INSTANCE_NAME=DMSERVER01 page_size=32 log_size=2048
备库初始化
$ dminit PATH=/dbdata/dmdata/ DB_NAME=DAMENG INSTANCE_NAME=DMSERVER02 page_size=32 log_size=2048
主库注册服务
#./dm_service_installer.sh -s /home/dmdba/dmdbms/bin/DmService
主库开启归档
$ disql sysdba
SQL> select arch_mode from v$database;
SQL> alter database mount;
SQL> alter database add archivelog ‘DEST=/dblog/dmarch,type=local,file_size=128,space_limit=700000’;
SQL> alter database archivelog;
SQL> alter database open;
主库脱机备份
#ps -ef | grep dmserver
#systemctl stop DmServiceDMSERVER
$ cp /dbdata/dmdata/DAMENG/dm.ini /home/dmdba/dmdbms/bin/
$ mkdir -p /home/dmdba/fullback #####主备库均创建
$ dmrman
RMAN> backup database ‘/home/dmdba/dmdbms/bin/dm.ini’ full backupset ‘/home/dmdba/fullbak’;
$ scp -p /home/dmdba/fullback/* dmdba@10.xx.xx.2:/home/dmdba/fullbak/
备库脱机还原
$ dmrman
RMAN>restore database ‘/home/dmdba/dmdbms/bin/dm.ini’ from backupset ‘/home/dmdba/fullbak’;
RMAN>recover database ‘/home/dmdba/dmdbms/bin/dm.ini’ from backupset ‘/home/dmdba/fullbak’;
DM7无需执行恢复DB_MAGIC;
配置文件修改
主库
Dm.ini
INSTANCE_NAME=DMSERVER01
ALTER_MODE_STATUS=0
ENABLE_OFFLINE_TS=2
MAL_INI=1
ARCH_INI=1
SVR_LOG = 1
PORT_NUM = 5236 #数据库实例监听端口
DW_PORT = 5336 #守护环境下,监听守护进程连接端口
DW_ERROR_TIME = 60 #接收守护进程消息超时时间
HA_INST_CHECK_FLAG = 1 #检测是否多个实例进程同时启动
RLOG_SEND_APPLY_MON = 64 #统计最近 64 次的日志发送信息
PAPALLEL_PURGE_FLAG = 1
EXCLUDE_RESERVED_WORDS = context,frequence ,domain,precision,off,percent
Dmmal.ini
MAL_CHECK_INTERVAL = 5 #MAL 链路检测时间间隔
MAL_CONN_FAIL_INTERVAL = 5 #判定 MAL 链路断开的时间
[MAL_INST1]
MAL_INST_NAME = DMSERVER01 #实例名,和 dm.ini 中的 INSTANCE_NAME 一致
MAL_HOST = 10.xx.xx.1 #MAL系统监听TCP连接的IP地址
MAL_PORT = 5237 #MAL系统监听TCP连接的端口
MAL_INST_HOST = 10.xx.xx.1 #实例的对外服务IP地址
MAL_INST_PORT = 5236 #实例的对外服务端口,和 dm.ini 中的 PORT_NUM 一致
MAL_DW_PORT = 5239 #实例对应的守护进程监听 TCP 连接的端口
[MAL_INST2]
MAL_INST_NAME = DMSERVER2
MAL_HOST = 10.xx.xx.2
MAL_PORT = 5237
MAL_INST_HOST = 10.xx.xx.2
MAL_INST_PORT = 5236
MAL_DW_PORT = 5239
Dmarch.ini
[ARCHIVE_REALTIME]
ARCH_TYPE = REALTIME
ARCH_DEST = DMSERVER02 ##注意:此处写对方实例名
[ARCHIVE_LOCAL1]
ARCH_TYPE = LOCAL
ARCH_DEST = /dblog/dmarch
ARCH_FILE_SIZE = 128
ARCH_SPACE_LIMIT = 700000
Dmwatcher.ini
[GRP1]
DW_TYPE = GLOBAL
DW_MODE = AUTO
DW_ERROR_TIME = 10
INST_RECOVER_TIME = 60
INST_ERROR_TIME = 10
INST_OGUID = 453331
INST_INI = /home/dmdba/dmdbms/bin/dm.ini
INST_AUTO_RESTART = 1
INST_STARTUP_CMD = /home/dmdba/dmdbms/bin/dmserver
RLOG_SEND_THRESHOLD = 0
RLOG_APPLY_THRESHOLD = 0
备库
Dm.ini
INSTANCE_NAME=DMSERVER02
ALTER_MODE_STATUS=0
ENABLE_OFFLINE_TS=2
MAL_INI=1
ARCH_INI=1
SVR_LOG = 1
PORT_NUM = 5236 #数据库实例监听端口
DW_PORT = 5336 #守护环境下,监听守护进程连接端口
DW_ERROR_TIME = 60 #接收守护进程消息超时时间
HA_INST_CHECK_FLAG = 1 #检测是否多个实例进程同时启动
RLOG_SEND_APPLY_MON = 64 #统计最近 64 次的日志发送信息
PAPALLEL_PURGE_FLAG = 1
EXCLUDE_RESERVED_WORDS = context,frequence ,domain,precision,off,percent
Dmmal.ini
MAL_CHECK_INTERVAL = 5 #MAL 链路检测时间间隔
MAL_CONN_FAIL_INTERVAL = 5 #判定 MAL 链路断开的时间
[MAL_INST1]
MAL_INST_NAME = DMSERVER01 #实例名,和 dm.ini 中的 INSTANCE_NAME 一致
MAL_HOST = 10.xx.xx.1 #MAL系统监听TCP连接的IP地址
MAL_PORT = 5237 #MAL系统监听TCP连接的端口
MAL_INST_HOST = 10.xx.xx.1 #实例的对外服务IP地址
MAL_INST_PORT = 5236 #实例的对外服务端口,和 dm.ini 中的 PORT_NUM 一致
MAL_DW_PORT = 5239 #实例对应的守护进程监听 TCP 连接的端口
[MAL_INST2]
MAL_INST_NAME = DMSERVER2
MAL_HOST = 10.xx.xx.2
MAL_PORT = 5237
MAL_INST_HOST = 10.xx.xx.2
MAL_INST_PORT = 5236
MAL_DW_PORT = 5239
Dmarch.ini
[ARCHIVE_REALTIME]
ARCH_TYPE = REALTIME
ARCH_DEST = DMSERVER01 ##注意:此处写对方实例名
[ARCHIVE_LOCAL1]
ARCH_TYPE = LOCAL
ARCH_DEST = /dblog/dmarch
ARCH_FILE_SIZE = 128
ARCH_SPACE_LIMIT = 700000
Dmwatcher.ini
[GRP1]
DW_TYPE = GLOBAL
DW_MODE = AUTO
DW_ERROR_TIME = 10
INST_RECOVER_TIME = 60
INST_ERROR_TIME = 10
INST_OGUID = 453331
INST_INI = /home/dmdba/dmdbms/bin/dm.ini
INST_AUTO_RESTART = 1
INST_STARTUP_CMD = /home/dmdba/dmdbms/bin/dmserver
RLOG_SEND_THRESHOLD = 0
RLOG_APPLY_THRESHOLD = 0
$ ./dmctlcvt TYPE=3 SRC=/dbdata/dmdata/DAMENG/dmwatcher.ini DEST=/dbdata/dmdata/
$ cd /dbdata/dmdata/GRP1
$ cp dmwatcher.ctl /dbdata/dmdata/DAMENG/
$ scp -p dmwatcher.ctl dmdba@10.xx.xx.2: /dbdata/dmdata/DAMENG/
Mount模式启动主备库
主库
$ dmserver /dmdbms/dm8/data/DAMENG/dm.ini mount
备库
$ dmserver /dmdbms/dm8/data/DAMENG/dm.ini mount
主备库设置OGUID
主库
SQL> sp_set_oguid(453331);
备库
SQL> sp_set_oguid(453331);
修改主备库模式
主库
SQL> alter database primary;
SQL> SP_SET_PARA_VALUE(1, ‘ALTER_MODE_STATUS’, 0);
备库
SQL> alter database standby;
SQL> SP_SET_PARA_VALUE(1, ‘ALTER_MODE_STATUS’, 0);
配置监视器(10.xx.xx.101)
创建所需的组和用户
#groupadd dinstall
#useradd -g dinstall dmdba
#passwd dmdba
#su – dmdba
$ mkdir -p /home/dmdba/dmdbms/
从备库拷贝bin目录至监视器服务器
$scp -rp /home/dmdba/dmdbms/bin dmdba@10.xx.xx.101:/home/dmdba/dmdbms/
Dmmonitor.ini
$ vim /home/dmdba/dmdbms/bin/dmmonitor.ini
MON_DW_CONFIRM = 1 #确认监视器模式
MON_LOG_PATH = /home/dmdba/dmdbms/log #监视器日志文件存放路径
MON_LOG_INTERVAL = 60 #每隔 60s 定时记录系统信息到日志文件
MON_LOG_FILE_SIZE = 32 #每个日志文件最大 32M
MON_LOG_SPACE_LIMIT = 0 #不限定日志文件总占用空间
[GRP1]
MON_INST_OGUID = 453331 #组 GRP1 的唯一 OGUID 值
MON_DW_IP = 10.xx.xx.1:5239 ###监视器到组 GRP1 的守护进程的连接信息
MON_DW_IP = 10.xx.xx.2:5239 #IP 对应 dmmal.ini 中的 MAL_HOST,PORT 对应 dmmal.ini 中的 MAL_DW_PORT
主备库启动dmwatcher
主库
$./dmwatcherd start
备库
$./dmwatcherd start
$ dmmonitor /home/dmdba/dmdbms/bin/dmmonitor.ini
设置dmmonitor开机自启动
$ ll /home/dmdba/dmdbms/bin/service_template/DmMonitorService
$ cd /home/dmdba/dmdbms/bin/service_template/
$ cp DmMonitorService /home/dmdba/dmdbms/bin/
$ cd /home/dmdba/dmdbms/bin/
$ vim DmMonitorService
INI_PATH=/home/dmdba/dmdbms/bin/dmmonitor.ini
#./dm_service_installer.sh -s /home/dmdba/dmdbms/bin/DmMonitorService
其他服务同样方法。
测试同步
收尾工作
配置sqllog.ini文件,默认在data/DAMENG下
$ vim sqllog.ini
[SLOG_ALL]
FILE_PATH =/dblog/dmlog --sql日志存放目录,根据现场环境修改
PART_STOR =1
SWITCH_MODE =1
SWITCH_LIMIT =10000
ASYN_FLUSH =1
FILE_NUM =100
ITEMS =0
SQL_TRACE_MASK =2:3:23:25
MIN_EXEC_TIME =0
USER_MODE =0
USERS =
配置nmon
通过操作系统作业调度功能配置数据库服务器性能监控程序。
$ mkdir -p /home/dmdba/nmon_log
上传nmon脚本文件至该目录下
$crontab -e
0 0 * * * /home/dmdba/nmon_log/nmon -s20 -c4320 -fT -m /home/dmdba/nmon_log > /dev/null 2>&1
0 0 * * * find /home/dmdba/nmon_log -type f -mtime +365 -exec rm -f {} ;
备份设置
通过manager工具登录数据库
代理->创建代理环境
作业->新建作业
作业步骤->添加
选择“高级”
添加删除过期备份作业步骤
CALL SF_BAKSET_BACKUP_DIR_ADD(‘DISK’,‘/dbbak/dmbak’);
–在会话生效,每次必须增加备份集目录
CALL SF_BAKSET_REMOVE_BATCH (‘DISK’,now()-7,NULL,NULL);
–now()为当前时间,指定删除7天前的备份
作业调度
社区地址:https://eco.dameng.com