前言:主备集群至少需要三台机器,一主一备一监视器,监视器只需要安装达梦数据库不需要初始化实例。达梦数据的安装需要一步一步按照文档说明安装,错一步拉一步可能就会安装不上,安装前一些numa、透明大页等必须都要设置。
| CPU | x86_64 |
| 数据库版本 | dm8 |
| 主ip | 192.168.126.170 |
| 备ip | 192.168.126.165 |
2、新建用户dmdba
useradd -g dinstall -m -d /home/dmdba -s /bin/bash -u 1001 dmdba
-- -m创建用户的主目录,-d新账户的主目录 -s新账户的登录 shell -u新账户的用户ID
cat /etc/security/limits.conf |grep -v ^#
ulimit -n 查看下是否是65536
-- 查看对应的调度算法:cat /sys/block/{DEVICE-NAME}/queue/scheduler,注意把{DEVICE-NAME}替换成数据库所使用的对应的磁盘名称
cat /sys/block/sda/queue/scheduler
echo deadline > /sys/block/sda/queue/scheduler
grubby --update-kernel=ALL --args="elevator=deadline"
cat /sys/block/sda/queue/scheduler
firewall-cmd --zone=public --list-ports
##添加(--permanent 永久生效,没有此参数重启后失效)
firewall-cmd --zone=public --add-port=5236/tcp --permanent
firewall-cmd --zone=public --query-port=5236/tcp
firewall-cmd --zone=public --remove-port=5236/tcp --permanent
注意:添加端口到防火墙时,使用 --permanent 后才能永久生效,否则重启后失效。
NUMA(Non-Uniform Memory Access)架构是为了解决多 CPU 下内存访问冲突,即不再将整个物理内存作为一个整体,而是根据不同的 CPU区分不同的内存块,如 2 颗 CPU 每颗 CPU 使用 64G 内存。当 NUMA 参数 zone_reclaim_mode 设置为 1 时,内核将要求多路 CPU 尽量从距离较近的系统内存节点(服务器的整体内存在 numa 架构下将被分成若干个节点)分配内存,而不是在整个服务器可访问内存的范围内进行内存分配。因此,在较高内存占用压力下,内存申请会触发内存频繁回收整理的机制,严重影响系统整体性能(长期处于内核态 sys 很高),进而可能导致 SQL卡顿问题的发生。
vi /etc/default/grub 如下图所示加上:numa=off
grub2-mkconfig -o /etc/grub2.cfg
编辑/etc/sysconfig/grub 文件,在 GRUB_CMDLINE_LINUX 那一行后面追加 transparent_hugepage=never。
grub2-mkconfig -o /etc/grub2.cfg
cat /sys/kernel/mm/transparent_hugepage/enabled
[root@node01 ~]# getenforce Permissive
##永久关闭 SELinux 需修改配置文件:/etc/selinux/config,修改 SELINUX=disabled
[root@node01 ~]# vi /etc/selinux/config
SELINUX=disabled #修改为 disabled
system.conf 为系统和服务管理的配置文件,当运行系统实例时,systemd 将读取这个配置文件system.conf,相反读取user.conf。
达梦数据库服务注册为系统服务的进程,如通过systemctl或者service方式设定随机自启动的数据库服务,其能打开的最大文件描述符、proc数量等不受 limits.conf 控制,需要修改 /etc/systemd/system.conf 文件。
1. DefaultLimitNOFILE:用户默认最大打开文件数。
2. DefaultLimitNPROC:用户默认最大进程数。
为避免操作系统内存因大量使用SWAP内存而降低数据库性能,在安装部署时需检查设置相关变量来控制系统对swap的使用倾向,从而使系统最大限度发挥内存性能。swappiness的取值范围为1~100,当操作系统内存不足时,建议设置为1;当系统内存足够时,推荐设置为10。
core文件大小和数据库已使用内存基本相当,配置路径所在存储空间大小需满足core文件生成,建议大于服务器内存值。core文件剩余空间低于物理总内存80%,进行检查和清理core文件存放空间。
-- vi /etc/sysctl.conf 添加对应core文件参数
kernel.core_pattern =/dmdata/core/core-%e-%p-%s
-- 手动产生core文件,并查看core文件路径是否在/home/dmdba/core下
-- 注意:core频繁发生可能会撑爆磁盘,建议对core生成目录设置清理策略,保证目录可用。
1.在bin目录下,执行./disql命令,打开disql工具。同时,在另一会话中,执行ps -ef|grep disql 查看disql进程号,执行kill -11 disql进程号,即可杀死disql进程,并生成core文件。
2.或者在问题报告单中查找对应版本的bug,利用bug验证core文件生成。
sed -ri 's/.*swap.*/#&/' /etc/fstab
chown -R dmdba:dinstall /dmdata/core
chown -R dmdba:dinstall /dmdata/data
chown -R dmdba:dinstall /dmdata/arch
chown -R dmdba:dinstall /dmdata/dmbak
chown -R dmdba:dinstall /dmdata/log
[root@node01 ~]# unzip dm8_20240920_x86_rh7_64.zip
[root@node01 ~]# mount -o loop dm8_20240920_x86_rh7_64.iso /mnt
切换至 dmdba 用户下,在 /mnt 目录下使用命令行安装数据库程序,执行 ./DMInstall.bin -i 命令安装 DM 数据库。
按需求选择安装语言,没有 key 文件选择 "n",时区按需求选择一般选择 “21”,安装类型选择“1”,安装目录按实际情况配置,这里使用默认安装位置。
数据库安装大概 1 到 2 分钟,数据库安装完成后,会看到完成的字样。然后需要切换至 root 用户执行上图中的命令
/home/dmdba/dmdbms/script/root/root_installer.sh
在root 用户进入 dmdba 用户的根目录下,配置对应的环境变量。DM_HOME 变量和动态链接库文件的加载路径在程序安装成功后会自动导入。
export PATH=$PATH:$DM_HOME/bin:$DM_HOME/tool
使用 dmdba 用户配置实例,进入到 DM 数据库安装目录下的 bin 目录中。
使用 dminit 命令初始化实例,dminit 命令可设置多种参数,可执行./dminit help命令查看可配置参数。
需要注意的是 页大小 (page_size)、簇大小 (extent_size)、大小写敏感 (case_sensitive)、字符集 (charset) 、空格填充模式 (BLANK_PAD_MODE) 、页检查模式(PAGE CHECK) 等部分参数,一旦确定无法修改,在初始化实例时确认需求后谨慎设置。
./dminit path=/dmdata/data PAGE_SIZE=32 EXTENT_SIZE=32 CASE_SENSITIVE=y CHARSET=1 DB_NAME=DMTEST INSTANCE_NAME=DBSERVER PORT_NUM=5237
-- 初始化实例(BLANK_PAD_MODE=0设置字符串比较时,结尾空格填充模式是否兼容oracle,1兼容,0不兼容)
[dmdba@~]$ ./dminit PATH=/dmdata/data INSTANCE_NAME=DM1 PAGE_SIZE=32 EXTENT_SIZE=32 CASE_SENSITIVE=0 CHARSET=1 LOG_SIZE=2048 BLANK_PAD_MODE=0
[dmdba@~]$ ./dminit PATH=/dmdata/data INSTANCE_NAME=DM2 PAGE_SIZE=32 EXTENT_SIZE=32 CASE_SENSITIVE=0 CHARSET=1 LOG_SIZE=2048 BLANK_PAD_MODE=0
page_size:数据文件使用的页大小。取值范围 4、8、16、32,单位:KB。缺省值为 8。可选参数。选择的页大小越大,则 DM 支持的元组长度也越大,但同时空间利用率可能下降。数据库创建成功后无法再修改页大小,可通过系统函数 SF_GET_PAGE_SIZE()获取系统的页大小。
extent_size:数据文件使用的簇大小,即每次分配新的段空间时连续的页数。取值范围 16、32、64。单位:页数。缺省值为 16。可选参数。数据库创建成功后无法再修改簇大小,可通过系统函数 SF_GET_EXTENT_SIZE()获取系统的簇大小。
case_sensitive: 标识符大小写敏感。当大小写敏感时,小写的标识符应用""括起,否则被系统自动转换为大写;当大小写不敏感时,系统不会转换标识符的大小写,系统比较函数会将大写字母全部转为小写字母再进行比较。取值:Y、y、1 表示敏感;N、n、0 表示不敏感。缺省值为 Y。可选参数。此参数在数据库创建成功后无法修改,可通过系统函数 SF_GET_CASE_SENSITIVE_FLAG()或 CASE_SENSITIVE()查询设置的参数置。
charset:字符集选项。取值范围 0、1、2。0 代表 GB18030,1 代表 UTF-8,2 代表韩文字符集 EUC-KR。缺省值为 0。可选参数。此参数在数据库创建成功后无法修改,可通过系统函数 SF_GET_UNICODE_FLAG()或 UNICODE()查询设置的参数置。
BLANK_PAD_MODE:设置字符串比较时,结尾空格填充模式是否兼容 ORACLE。1:兼容;0:不兼容。缺省值为 0。可选参数。此参数在数据库创建成功后无法修改,可通过查询 V$PARAMETER 中的 BLANK_PAD_MODE 参数名查看此参数的设置值。
PAGE_CHECK:PAGE_CHECK 为页检查模式。取值范围 0、1、2、3。0:禁用页校验;1:开启页校验并使用 CRC 校验;2:开启页校验并使用指定的 HASH 算法进行校验;3:开启页校验并使用快速 CRC 校验。缺省值为 3。可选参数。在数据库创建成功后无法修改。
命令行运行 前台启动./dmserver /dmdata/data/DAMENG/dm.ini 尝试是否能启动成功,然后用exit退出即可,保持数据库关闭状态。
./dmrman CTLSTMT="BACKUP DATABASE '/dmdata/data/DAMENG/dm.ini' FULL TO BACKUP_FILE1 BACKUPSET '/dmdata/dmbak/BACKUP_FILE'"
scp -r /dmdata/dmbak/BACKUP_FILE dmdba@192.168.126.165:/dmdata/dmbak/
./dmrman CTLSTMT="RESTORE DATABASE '/dmdata/data/DAMENG/dm.ini' FROM BACKUPSET '/dmdata/dmbak/BACKUP_FILE'"
./dmrman CTLSTMT="RECOVER DATABASE '/dmdata/data/DAMENG/dm.ini' FROM BACKUPSET '/dmdata/dmbak/BACKUP_FILE'"
./dmrman CTLSTMT="RECOVER DATABASE '/dmdata/data/DAMENG/dm.ini' UPDATE DB_MAGIC"
#实例名,建议使用―组名_守护环境_序号‖的命名方式,总长度不能超过 16
DW_INACTIVE_INTERVAL = 60 #接收守护进程消息超时时间
ALTER_MODE_STATUS = 0 #不允许手工方式修改实例模式/状态/OGUID
ENABLE_OFFLINE_TS = 2 #不允许备库 OFFLINE 表空间
2、创建dmarch.ini文件
[dmdba@node01 ~]$ vi /dmdata/data/DAMENG/dmarch.ini
ARCH_DEST = /dmdata/arch/ #本地归档存放路径
ARCH_FILE_SIZE = 1024 #单个归档大小,单位 MB 512 / 1024
ARCH_SPACE_LIMIT = 51200 #归档上限,单位 MB
3、创建dmmal.ini文件(必须在/data/DAMENG目录下)
vi /dmdata/data/DAMENG/dmmal.ini
MAL_CHECK_INTERVAL = 10 #MAL 链路检测时间间隔
MAL_CONN_FAIL_INTERVAL = 10 #判定 MAL 链路断开的时间
MAL_BUF_SIZE = 512 #单个 MAL 缓存大小,单位 MB
MAL_SYS_BUF_SIZE = 2048 #MAL 总大小限制,单位 MB
MAL_COMPRESS_LEVEL = 0 #MAL 消息压缩等级,0 表示不压缩
MAL_INST_NAME = DM1 #实例名,和 dm.ini 的 INSTANCE_NAME 一致
MAL_HOST = 192.168.126.170 #MAL 系统监听 TCP 连接的 IP 地址
MAL_PORT = 5336 #MAL 系统监听 TCP 连接的端口
MAL_INST_HOST = 192.168.126.170 #实例的对外服务 IP 地址
MAL_INST_PORT = 5236 #实例对外服务端口,和 dm.ini 的 PORT_NUM 一致
MAL_DW_PORT = 5436 #实例对应的守护进程监听 TCP 连接的端口
MAL_INST_DW_PORT = 5536 #实例监听守护进程 TCP 连接的端口
MAL_INST_HOST = 192.168.126.165
4、创建dmwatcher.ini 文件(必须在/data/DAMENG目录下)
[dmdba@node01 ~]$ vi /dmdata/data/DAMENG/dmwatcher.ini
DW_MODE = AUTO #MANUAL:故障手切 AUTO:故障自切
DW_ERROR_TIME = 20 #远程守护进程故障认定时间
INST_ERROR_TIME = 20 #本地实例故障认定时间
INST_RECOVER_TIME = 60 #主库守护进程启动恢复的间隔时间
INST_OGUID = 453331 #守护系统唯一 OGUID 值
INST_INI = /dmdata/data/DAMENG/dm.ini #dm.ini 文件路径
INST_AUTO_RESTART = 1 #打开实例的自动启动功能
INST_STARTUP_CMD = /home/dmdba/dmdbms/bin/DmServiceDM1 start #命令行方式启动
RLOG_SEND_THRESHOLD = 0 #指定主库发送日志到备库的时间阈值,默认关闭
dmarch.ini:ARCH_DEST = DM1 #实时归档目标实例名
./dmserver /dmdata/data/DAMENG/dm.ini mount
SP_SET_PARA_VALUE(1, 'ALTER_MODE_STATUS', 1);
SP_SET_PARA_VALUE(1, 'ALTER_MODE_STATUS', 0);
SP_SET_PARA_VALUE(1, 'ALTER_MODE_STATUS', 1);
SP_SET_PARA_VALUE(1, 'ALTER_MODE_STATUS', 0);
修改后exit退出即可。
需要安装dm,dmmonitor.ini文件的位置一般是放在安装目录的bin下边即可。不需要实例化
MON_DW_CONFIRM = 1 #0:非确认(故障手切) 1:确认(故障自切)
MON_LOG_PATH = /dmdata/log #监视器日志文件存放路径
MON_LOG_INTERVAL = 60 #每隔 60s 定时记录系统信息到日志文件
MON_LOG_FILE_SIZE = 32 #单个日志大小,单位 MB
MON_LOG_SPACE_LIMIT = 0 #日志上限,单位 MB
MON_INST_OGUID = 453331 #组 GRP1 的唯一 OGUID 值
MON_DW_IP = 192.168.126.170:5436 #IP 对应 MAL_HOST,PORT 对应 MAL_DW_PORT
MON_DW_IP = 192.168.126.165:5436
创建一个非确认监视器dmmonitor_manual.ini
MON_DW_CONFIRM = 0 #0:非确认(故障手切) 1:确认(故障自切)
MON_LOG_PATH = /dmdata/dmog #监视器日志文件存放路径
MON_LOG_INTERVAL = 60 #每隔 60s 定时记录系统信息到日志文件
MON_LOG_FILE_SIZE = 32 #单个日志大小,单位 MB
MON_LOG_SPACE_LIMIT = 0 #日志上限,单位 MB
MON_INST_OGUID = 453331 #组 GRP1 的唯一 OGUID 值
MON_DW_IP = 192.168.126.170:5436 #IP 对应 MAL_HOST,PORT 对应 MAL_DW_PORT
MON_DW_IP = 192.168.126.165:5436
说明:监视器dmmonitor.ini是自动切换的配置文件,监视器dmmonitor_manual.ini是手动切换的配置文件,如果后面又需要手动切换的场景就可以用监视器dmmonitor_manual.ini启动进行手动操作。
vi /dmdata/data/DAMENG/sqllog.ini
./dmwatcher /dmdata/data/DAMENG/dmwatcher.ini
./dmmonitor dmmonitor_manual.ini
cd /home/dmdba/dmdbms/script/root/
./dm_service_installer.sh -t dmserver -m mount -dm_ini /dmdata/data/DAMENG/dm.ini -p DM1
./dm_service_installer.sh -t dmwatcher -watcher_ini /dmdata/data/DAMENG/dmwatcher.ini -p DMWATCHER
cd /home/dmdba/dmdbms/script/root/
./dm_service_installer.sh -t dmserver -m mount -dm_ini /dmdata/data/DAMENG/dm.ini -p DM2
./dm_service_installer.sh -t dmwatcher -watcher_ini /dmdata/data/DAMENG/dmwatcher.ini -p DMWATCHER
cd /home/dmdba/dmdbms/script/root/
./dm_service_installer.sh -t dmmonitor -monitor_ini /home/dmdba/dmdbms/dmmonitor.ini -p DMMONITOR
(1) 启主机dmserver ./DmServiceDM1 start
(2) 启备机dmserver ./DmServiceDM2 start
(3) 启主机dmwatcher ./DmWatcherServiceDMWATCHER start
(4) 启备机dmwatcher ./DmWatcherServiceDMWATCHER start
(1) 停备机dmwatcher ./DmWatcherServiceDMWATCHER stop
(2) 停主机dmwatcher ./DmWatcherServiceDMWATCHER stop
(3) 停主机dmserver ./DmServiceDM1 stop
(4) 停备机dmserver ./DmServiceDM2 stop
./DmMonitorServiceDMMONITOR start
监视器中需要显示出两台机器,一主一备,同时两台机器的FLSN,CLSN不能相差太多,备库不能超过主库,否则是主备搭建失败的。一般显示如下图说明搭建成功。
查看是否生产core,又core产生则没有问题,然后删除core,守护进程会自动拉起服务
-- call SP_INIT_JOB_SYS(0);//清除代理环境
call SP_CREATE_JOB('bakall_one',1,0,'',0,0,'',0,'执行一次全量备份');
call SP_JOB_CONFIG_START('bakall_one');
call SP_ADD_JOB_STEP('bakall_one', 'bakall_one_work', 6, '01020000/dmdata/dmbak', 1, 2, 0, 0, NULL, 0);
call SP_ADD_JOB_SCHEDULE('bakall_one', 'bakall_one_time', 1, 0, 0, 0, 0, NULL, NULL, '2024-11-19 15:48:00', NULL, '');
call SP_JOB_CONFIG_COMMIT('bakall_one');
call SP_CREATE_JOB('BAK_FULL',1,0,'',0,0,'',0,'定时全库备份');
call SP_JOB_CONFIG_START('BAK_FULL');
call SP_ADD_JOB_STEP('BAK_FULL', 'BAK_FULL', 6, '01020000/dmdata/dmbak', 1, 1, 0, 0, NULL, 0);
call SP_ADD_JOB_SCHEDULE('BAK_FULL', 'BAK_FULL', 1, 2, 1, 64, 0, '01:00:00', NULL, '2024-08-21 14:58:20', NULL, '');
call SP_JOB_CONFIG_COMMIT('BAK_FULL');
call SP_CREATE_JOB('BAK_INC',1,0,'',0,0,'',0,'定时增量备份');
call SP_JOB_CONFIG_START('BAK_INC');
call SP_ADD_JOB_STEP('BAK_INC', 'BAK_INC', 6,'01020000/dmdata/dmbak', 1, 1, 0, 0, NULL, 0);
call SP_ADD_JOB_SCHEDULE('BAK_INC', 'BAK_INC', 1, 2, 1, 63, 0, '02:00:00', NULL, '2024-08-21 15:00:17', NULL, '');
call SP_JOB_CONFIG_COMMIT('BAK_INC');
call SP_CREATE_JOB('DEL_BAK',1,0,'',0,0,'',0,'DEL_BAK');
call SP_JOB_CONFIG_START('DEL_BAK');
call SP_ADD_JOB_STEP('DEL_BAK', 'DEL_BAK', 0, 'call sf_bakset_backup_dir_add(''DISK'', ''/dmdata/dmbak'');
call sp_db_bakset_remove_batch(''DISK'',SYSDATE-30);', 0, 0, 0, 0, NULL, 0);
call SP_ADD_JOB_SCHEDULE('DEL_BAK', 'DEL_BAK', 1, 2, 1, 127, 0, '04:00:00', NULL, '2023-05-23 13:35:02', NULL, '');
call SP_JOB_CONFIG_COMMIT('DEL_BAK');




