注册
DM7主备集群部署
技术分享/ 文章详情 /

DM7主备集群部署

一五八六七 2026/03/27 155 0 0

1.基础环境设置

1.1 创建用户和目录

使用root用户进行创建,两节点执行

[root@dsc01 ~]# groupadd dinstall
[root@dsc01 ~]# mkdir -p /home/dmdba
[root@dsc01 ~]# useradd -g dinstall -m -d /home/dmdba/dm -s /bin/bash dmdba
[root@dsc01 ~]# echo dmdba| passwd --stdin dmdba
[root@dsc01 ~]# mkdir -p /dbbak/dmbak

数据库管理用户创建完成后,将数据库目录归属权限给dmdba

[root@dsc02 ~]# chown -R dmdba:dinstall /home/dmdba/ /dbbak/dmbak/

1.2 服务器参数配置

1.2.1 存储测速
[root@dsc01 ~]# dd if=/dev/zero of=/dbdata/test bs=32k count=4k oflag=dsync
以上磁盘测试参数是每次写入32k大小文件,循环4千次,执行完成后会显示磁盘读写速度。根据以往项目经验30Mb/s为正常磁盘速度,如低于此数值特别多需要和磁盘厂商、操作系统进行确认是否合理。
1.2.2 关闭防火墙
[root@dsc01 ~]# systemctl status firewalld.service
[root@dsc01 ~]# systemctl stop firewalld.service
[root@dsc01 ~]# systemctl disable firewalld.service
1.2.3 dmdba用户内核参数调整
cat <<-EOF>>/etc/security/limits.conf
dmdba soft as unlimited
dmdba hard as unlimited
dmdba soft fsize unlimited
dmdba hard fsize unlimited
dmdba soft nproc 131072
dmdba hard nproc 131072
dmdba soft nofile 131072
dmdba hard nofile 131072
dmdba soft core unlimited
dmdba hard core unlimited
dmdba soft data unlimited
dmdba hard data unlimited
dmdba soft memlock unlimited 
dmdba hard memlock unlimited
EOF
1.2.4 sysctl.conf配置调整

这一步用于调整core文件路径、虚拟内存和swap使用策略、min_free_kbyte参数。
当内存很大的情况下建议关闭交换分区或最小化交换的使用,避免内核的内存申请到交换分区影响数据库性能over commit_memory配置为0。内存小于256GB时swapiness参数设置为10以下,大于256GB时关闭。

[root@dsc01 ~]# vi /etc/sysctl.conf
添加以下内容
kernel.core_pattern=/dbbak/core/core-e%-p%-t%-s%
vm.swappiness=10
vm.overcommit_memory=0
##当物理内存小于等于64G时,设置系统保留的最小空闲内存量为1153434(单位KB)
##当物理内存大于64G时,设置系统保留的最小空闲内存量为物理内存的2%;
vm.min_free_kbytes = 物理内存的2%(单位KB)

#保存后执行
[root@dsc01 ~]# sysctl -p
1.2.5 磁盘IO调度算法
建议将IO调度算法设置为noop或deadline,优化数据库的磁盘性能。
如个人临时调整可参考以下方式:

#手动临时调整 sdc 为盘符,需要对应数据库使用的真实盘符
[root@dsc01 ~]# echo deadline >  /sys/block/sdc/queue/scheduler
1.2.6 ARENA参数配置
[root@dsc01 ~]# vim /home/dmdba/dm/dmdbms/bin/dmserverd
添加如下内容
#将其写入到数据库启动脚本中
export MALLOC_ARENA_MAX=1
注意:此配置是调整数据库启动脚本
1.2.7 关闭SELinux
#查看当前selinux的状态:
[root@dsc01 ~]# /usr/sbin/sestatus -v
[root@dsc01 ~]# vi /etc/selinux/config
设置SELINUX=disabled,重启机器生效。
1.2.8关闭透明大页
1.编辑 /etc/default/grub 文件, 添加transparent_hugepage=never
GRUB_CMDLINE_LINUX="rd.lvm.lv=centos/root rd.lvm.lv=centos/swap rhgb quiet transparent_hugepage=never"
2. 重新生成/etc/grub2.cfg 配置文件:
grub2-mkconfig -o /etc/grub2.cfg
3. 重启操作系统。
reboot
4. 重启之后进行确认。
dmesg | grep -i numa
5. 再次确认。
cat /proc/cmdline
BOOT_IMAGE=/vmlinuz-3.10.0-957.el7.x86_64 root=/dev/mapper/centos-root ro rd.lvm.lv=centos/root rd.lvm.lv=centos/swap rhgb quiet transparent_hugepage=never

2 集群配置

2.1 数据库软件安装及初始化

2.2 主库配置

2.2.1 修改参数文件dm.ini
vi /dbdata/dmdata/DAMENG/dm.ini
#修改以下参数
INSTANCE_NAME = DW01 #数据库实例名(长度不超过16个字符)
PORT_NUM = 5236 #数据库实例监听端口
DW_PORT = 5536 #守护环境下,监听守护进程连接端口,dm7主备集群的dmmal.ini配置文件中没有MAL_INST_DW_PORT参数
DW_ERROR_TIME = 60 #接收守护进程消息超时时间,服务器认定守护进程未启动的时间,有效值范围(0~1800),单位为S,默认60s 
ALTER_MODE_STATUS = 0 #不允许手工方式修改实例模式/状态,1表示允许,0表示不允许,此参数可动态修改,默认为1,数据守护环境下建议配置为0,避免用户手工干预。
ENABLE_OFFLINE_TS = 2 #不允许备库脱机表空间
MAL_INI = 1 #打开MAL系统
ARCH_INI = 1 #打开归档配置
SVR_LOG=1 #打开SQLLOG配置
2.2.2.配置MAL文件
vi /dbdata/dmdata/DAMENG/dmmal.ini
#添加以下内容
MAL_CHECK_INTERVAL = 10 #MAL链路检测时间间隔,单位为S
MAL_CONN_FAIL_INTERVAL = 10 #判定MAL链路断开的时间,单位为S
[MAL_INST1]#主库
MAL_INST_NAME = DW01 #实例名,和dm.ini中的INSTANCE_NAME一致
MAL_HOST = xxx.xxx.xxx.xxx #MAL系统监听TCP连接的IP地址
MAL_PORT = 5336 #MAL系统监听TCP连接的端口
MAL_INST_HOST = xxx.xxx.xxx.xxx #实例的对外服务IP地址
MAL_INST_PORT = 5236 #实例的对外服务端口,和dm.ini中的PORT_NUM一致
MAL_DW_PORT = 5436 #实例对应的守护进程监听TCP连接的端口
[MAL_INST2]#备库
MAL_INST_NAME = DW02
MAL_HOST = xxx.xxx.xxx.xxx
MAL_PORT = 5336
MAL_INST_HOST = xxx.xxx.xxx.xxx
MAL_INST_PORT = 5236
MAL_DW_PORT =5436
2.2.3.配置归档文件dmarch.ini
vi /dbdata/dmdata/DAMENG/dmarch.ini
#添加以下内容
ARCH_WAIT_APPLY         = 0 #高性能模式,配置为1为事务一致模式
[ARCHIVE_REALTIME1]
ARCH_TYPE = REALTIME #实时归档类型
ARCH_DEST = DW02 #实时归档目标实例名
[ARCHIVE_LOCAL]
ARCH_TYPE = LOCAL #本地归档类型
ARCH_DEST = /dbarch/dmarch #本地归档文件存放路径
ARCH_FILE_SIZE = 2048 #单位Mb,本地单个归档文件最大值
ARCH_SPACE_LIMIT = 204800 #单位Mb,根据现场磁盘情况修改,一般为 /dbarch/dmarch磁盘空间的80%
2.2.4.配置守护进程文件dmwatcher.ini
vi /dbdata/dmdata/DAMENG/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 = /dbdata/dmdata/DAMENG/dm.ini #dm.ini配置文件路径
INST_AUTO_RESTART = 1 #打开实例的自动启动功能
INST_STARTUP_CMD =/home/dmdba/dmdbms/bin/DmServiceDW01 start #命令行方式启动
RLOG_SEND_THRESHOLD = 0 #指定主库发送日志到备库的时间阈值,默认关闭
RLOG_APPLY_THRESHOLD = 0 #指定备库重演日志的时间阈值,默认关闭
2.2.5.生成守护进程的控制文件dmwatcher.ctl
dm7主备集群需要手动生成dmwatcher.ctl文件,并将其拷贝到主备库对应的文件夹下
./dmctlcvt TYPE=3 SRC=/dbdata/dmdata/DAMENG/dmwatcher.ini DEST=/dbdata/dmdata/DAMENG/
cp /dbdata/dmdata/DAMENG/GRP1/dmwatcher.ctl /dbdata/dmdata/DAMENG/
scp /dbdata/dmdata/DAMENG/GRP1/dmwatcher.ctl root@xxx.xxx.xxx.xxx:/dbdata/dmdata/DAMENG/
#以现场环境路径为准
2.2.6 sqllog 配置
BUF_TOTAL_SIZE          = 102400         #SQLs Log Buffer Total Size(K)(1024~1024000)
BUF_SIZE                = 10240          #SQLs Log Buffer Size(K)(50~409600)
BUF_KEEP_CNT            = 12             #SQLs Log buffer keeped count(1~100)

[SLOG_ALL]
    FILE_PATH    = ../log    #根据实际环境填写
    PART_STOR    = 1
    SWITCH_MODE  = 2
    SWITCH_LIMIT   = 256
    ASYNC_FLUSH    = 1
    FILE_NUM      = 100    #根据实际情况配置,至少保留3天的日志量
    ITEMS            = 0 
    SQL_TRACE_MASK  = 2:3:23:25
    MIN_EXEC_TIME = 0 
    USER_MODE   = 0 
    USERS =
2.2.7 注册系统服务
#注册数据库服务
su - root
cd /home/dmdba/dmdbms/script/root
./dm_service_installer.sh -t dmserver -i /dbdata/dmdata/DAMENG/dm.ini -p DW01
#注册守护进程服务
./dm_service_installer.sh -t dmwatcher -i /dbdata/dmdata/DAMENG/dm.ini -p DW01

2.3 备库配置

2.3.1.修改参数文件dm.ini
vi /dbdata/dmdata/DAMENG/dm.ini
#修改以下参数
INSTANCE_NAME = DW02 #数据库实例名(长度不超过16个字符)
PORT_NUM = 5236 #数据库实例监听端口
DW_PORT = 5536 #守护环境下,监听守护进程连接端口,dm7主备集群的dmmal.ini配置文件中没有MAL_INST_DW_PORT参数
DW_ERROR_TIME = 60 #接收守护进程消息超时时间,服务器认定守护进程未启动的时间,有效值范围(0~1800),单位为S,默认60s 
ALTER_MODE_STATUS = 0 #不允许手工方式修改实例模式/状态,1表示允许,0表示不允许,此参数可动态修改,默认为1,数据守护环境下建议配置为0,避免用户手工干预。
ENABLE_OFFLINE_TS = 2 #不允许备库OFFLINE表空间
MAL_INI = 1 #打开MAL系统
ARCH_INI = 1 #打开归档配置
SVR_LOG=1 #打开SQLLOG配置
2.3.2.配置MAL文件
vi /dbdata/dmdata/DAMENG/dmmal.ini
#添加以下内容
MAL_CHECK_INTERVAL = 10 #MAL链路检测时间间隔,单位为S
MAL_CONN_FAIL_INTERVAL = 10 #判定MAL链路断开的时间,单位为S
[MAL_INST1]#主库
MAL_INST_NAME = DW01 #实例名,和dm.ini中的INSTANCE_NAME一致
MAL_HOST = xxx.xxx.xxx.xxx #MAL系统监听TCP连接的IP地址
MAL_PORT = 5336 #MAL系统监听TCP连接的端口
MAL_INST_HOST = xxx.xxx.xxx.xxx #实例的对外服务IP地址
MAL_INST_PORT = 5236 #实例的对外服务端口,和dm.ini中的PORT_NUM一致
MAL_DW_PORT = 5436 #实例对应的守护进程监听TCP连接的端口
[MAL_INST2]#备库
MAL_INST_NAME = DW02
MAL_HOST = xxx.xxx.xxx.xxx
MAL_PORT = 5336
MAL_INST_HOST = xxx.xxx.xxx.xxx
MAL_INST_PORT = 5236
MAL_DW_PORT =5436

2.3.3.配置归档文件dmarch.ini
vi /dbdata/dmdata/DAMENG/dmarch.ini
#添加以下内容
ARCH_WAIT_APPLY         = 0 #高性能模式,配置为1为事务一致模式
[ARCHIVE_REALTIME1]
ARCH_TYPE = REALTIME #实时归档类型
ARCH_DEST = DW01 #实时归档目标实例名
[ARCHIVE_LOCAL]
ARCH_TYPE = LOCAL #本地归档类型
ARCH_DEST = /dbarch/dmarch #本地归档文件存放路径
ARCH_FILE_SIZE = 2048 #单位Mb,本地单个归档文件最大值
ARCH_SPACE_LIMIT = 204800 #单位Mb,根据现场磁盘情况修改,一般为 /dbarch/dmarch磁盘空间的80%
2.3.4.配置守护进程文件dmwatcher.ini
vi /dbdata/dmdata/DAMENG/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 = /dbdata/dmdata/DAMENG/dm.ini #dm.ini配置文件路径
INST_AUTO_RESTART = 1 #打开实例的自动启动功能
INST_STARTUP_CMD =/home/dmdba/dmdbms/bin/DmServiceDW02 start #命令行方式启动
RLOG_SEND_THRESHOLD = 0 #指定主库发送日志到备库的时间阈值,默认关闭
RLOG_APPLY_THRESHOLD = 0 #指定备库重演日志的时间阈值,默认关闭

2.3.5 sqllog 配置
BUF_TOTAL_SIZE          = 102400         #SQLs Log Buffer Total Size(K)(1024~1024000)
BUF_SIZE                = 10240          #SQLs Log Buffer Size(K)(50~409600)
BUF_KEEP_CNT            = 12             #SQLs Log buffer keeped count(1~100)

[SLOG_ALL]
    FILE_PATH    = ../log    #根据实际环境填写
    PART_STOR    = 1
    SWITCH_MODE  = 2
    SWITCH_LIMIT   = 256
    ASYNC_FLUSH    = 1
    FILE_NUM      = 100    #根据实际情况配置,至少保留3天的日志量
    ITEMS            = 0 
    SQL_TRACE_MASK  = 2:3:23:25
    MIN_EXEC_TIME = 0 
    USER_MODE   = 0 
    USERS =
2.3.6 注册系统服务
#注册数据库服务
su - root
cd /home/dmdba/dmdbms/script/root
./dm_service_installer.sh -t dmserver -i /dbdata/dmdata/DAMENG/dm.ini -p DW02
#注册守护进程服务
./dm_service_installer.sh -t dmwatcher -i /dbdata/dmdata/DAMENG/dm.ini -p DW02

2.4 集群配置

2.4.1 主库脱机备份
cd /home/dmdba/dmdbms/bin
./dmrman 
backup database '/dbdata/dmdata/DAMENG/dm.ini' backupset '/dbbak/dmbak/DB_FULL_BACKUP_20260318'
#发送备份至备库
scp -r /dbbak/dmbak/DB_FULL_BACKUP_20260318 root@xxx.xxx.xxx.xxx:/dbbak/dmbak/
2.4.2 备库还原
cd /home/dmdba/dmdbms/bin
./dmrman
restore database '/dbdata/dmdata/DAMENG/dm.ini' from backupset '/dbbak/dmbak/DB_FULL_BACKUP_20260318'
recover database '/dbdata/dmdata/DAMENG/dm.ini' from backupset '/dbbak/dmbak/DB_FULL_BACKUP_20260318'
2.4.3 主备库mount启动
#修改服务启动脚本,将START_MODE参数由open修改为mount
vi DmServiceDW01
vi DmServiceDW02
#启动数据库服务
./DmServiceDW01 start
./DmServiceDW02 start
2.4.4 设置OGUID及修改数据库模式

登录数据库,执行下面几条sql

2.4.4.1 主库
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);
2.4.4.2 备库
SP_SET_PARA_VALUE(1, 'ALTER_MODE_STATUS', 1);
sp_set_oguid(453331);
alter database standby;
SP_SET_PARA_VALUE(1, 'ALTER_MODE_STATUS', 0);
2.4.5 主备库启动数据守护进程
./DmWatcherServiceDW01 start
./DmWatcherServiceDW02 start

守护进程启动后,进入Startup状态,此时实例都处于Mount状态。守护进程开始广播自身和其监控实例的状态信息,结合自身信息和远程守护进程的广播信息,守护进程将本地实例Open,并切换为Open状态。

2.4.6 配置监视器
2.4.6.1 配置确认监视器

确认监视器需要部署在除主备库之外的第三台机器,并注册系统服务后台启动

vi /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值
#以下配置为监视器到组GRP1的守护进程的连接信息,以“IP:PORT”的形式配置
#IP对应dmmal.ini中的MAL_HOST,PORT对应dmmal.ini中的MAL_DW_PORT
MON_DW_IP = xxx.xxx.xxx.xxx:5436
MON_DW_IP = xxx.xxx.xxx.xxx:5436
2.4.6.2 注册系统服务
cd /home/dmdba/dmdbms/script/root
./dm_service_installer.sh -t dmmonitor -i /home/dmdba/dmdbms/bin/dmmonitor.ini -p MON
#启动确认监视器
/home/dmdba/dmdbms/bin/DmMonitorServiceMON start
2.4.6.3 配置非确认监视器
vi /home/dmdba/dmdbms/bin/dmmonitor_0.ini
#添加下面的内容
MON_DW_Confirm = 0 #确认监视器模式
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值
#以下配置为监视器到组GRP1的守护进程的连接信息,以“IP:PORT”的形式配置
#IP对应dmmal.ini中的MAL_HOST,PORT对应dmmal.ini中的MAL_DW_PORT
MON_DW_IP = xxx.xxx.xxx.xxx:5436
MON_DW_IP = xxx.xxx.xxx.xxx:5436

#启动非确认监视
./dmmonitor dmmonitor_0.ini

2.4.6.4 两者作用和区别

非确认监视器(普通监视器)

  • 主要作用
    监控数据守护系统:接收守护进程消息,显示主备库状态变化、数据同步情况
    执行管理命令:支持 Switchover(主动切换)、Takeover(故障接管)等手动操作命令
    多实例并存:多个普通监视器相互独立、互不干扰,都可以获取集群状态
  • 使用场景
    日常运维查看集群状态
    手动执行主备切换
    作为确认监视器的辅助监控工具
    确认监视器
  • 核心功能
    除了具备普通监视器的所有功能外,确认监视器还拥有两个关键能力:
  1. 状态确认
    在故障自动切换模式下,当主库守护进程检测到备库故障时,会向确认监视器求证,确认故障是否真实发生
    避免脑裂:防止因网络故障导致主备库同时认为对方故障而各自切换为主库的情况
    确认监视器作为"裁判",确保故障判断的准确性
  2. 自动接管
    当确认监视器检测到主库故障后,自动选择一个符合条件的备库切换为新主库
    触发场景包括:主库实例异常终止、主库硬件故障、主库网络故障等

生产环境最佳实践

  • 确认监视器(后台服务):配置为多实例高可用模式,作为守护进程服务自动运行,负责故障自动切换。
  • 非确认监视器(前台终端):单独配置一个普通监视器,用于管理员日常查看集群状态和执行手动操作。
评论
后发表回复

作者

文章

阅读量

获赞

扫一扫
联系客服