dm7 一主两备数据库读写分离集群部署
1.部署环境
1.1 操作系统环境
节点名称 ip地址 cpu信息 内存信息 操作系统
DM01 192.168.3.132 Intel x86_64 4c 8G kylin v10
DM02 192.168.3.133 Intel x86_64 4c 8G kylin v10
DM03 192.168.3.134 Intel x86_64 4c 8G kylin v10
1.2 数据库部署目录规划
目录名称 目录
数据库软件目录 /opt/app/dmdbms
数据库数据目录 /dmdb/data_dm7a
数据库redo目录 /dmdb/redo_dm7a
数据库归档目录 /dmdb/archive_dm7a
数据库备份目录 /dmdb/backup_dm7a
2.数据库集群部署
2.1 操作系统参数配置
(1) 配置/etc/profile文件
echo "
export MALLOC_ARENA_MAX=4
" >> /etc/profile
(2) 配置sysctl.conf 文件
cp /etc/sysctl.conf /etc/sysctl.conf.dm.bak
echo "
#dm
vm.numa_stat = 0
vm.overcommit_memory=0
vm.swappiness=1
vm.min_free_kbytes= 45056
kernel.core_pattern =/dmdb/core/core-%e-%p-%s
" >> /etc/sysctl.conf
sysctl -p --验证
(3) 防火墙
systemctl status firewalld.service
(4) 配置selinux文件
cat /etc/selinux/config
[root@DM01 ~]# cat /etc/selinux/config
SELINUX=disabled
SELINUXTYPE=targeted
SETLOCALDEFS=0
(5) 配置资源
cp /etc/security/limits.conf /etc/security/limits.conf.dm.bak
echo "
#dm
dmdba soft data unlimited
dmdba hard data unlimited
dmdba soft fsize unlimited
dmdba hard fsize unlimited
dmdba soft nproc 10240
dmdba hard nproc 10240
dmdba soft nofile 65536
dmdba hard nofile 65536
dmdba soft core unlimited
dmdba hard core unlimited
dmdba soft nice 0
dmdba hard nice 0
dmdba soft as unlimited
dmdba hard as unlimited
dmdba soft memlock unlimited
dmdba hard memlock unlimited
#dm " >> /etc/security/limits.conf
cp /etc/systemd/system.conf /etc/systemd/system.conf.dm.bak
echo "
#dm
DefaultLimitFSIZE=unlimited
DefaultLimitDATA=unlimited
DefaultLimitCORE=unlimited
DefaultLimitNOFILE=65536
DefaultLimitAS=unlimited
DefaultLimitNPROC=10240
DefaultLimitNICE=0
#dm " >> /etc/systemd/system.conf
(6) 关闭numa和大页
[root@DM01 ~]# lsblk
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
sda 8:0 0 80G 0 disk
├─sda1 8:1 0 1G 0 part /boot
└─sda2 8:2 0 79G 0 part
├─vg00-root 253:0 0 69G 0 lvm /
└─vg00-swap 253:1 0 10G 0 lvm [SWAP]
sr0 11:0 1 1024M 0 rom
[root@DM01 ~]# cat /sys/block/sda/queue/scheduler
[mq-deadline] kyber bfq none
[root@DM01 ~]# grubby --update-kernel=ALL --args="numa=off transparent_hugepage=never
elevator=mq-deadline"
(7)创建dmdba用户;
groupadd -g 12345 dinstall
useradd -u 12345 -g dinstall -m -d /home/dmdba -s /bin/bash dmdba
echo "Dameng@1qaz2ws" | passwd --stdin dmdba
(8)创建数据库部署目录
##创建core文件生成路径
mkdir -p /dmdb/core
chown -R dmdba.dinstall /dmdb/
(9)重启操作系统
reboot
2.2 安装数据库软件
(1)上传数据库安装到/software 目录
[root@DM03 software]# ll
总用量 617428
-rw-r--r-- 1 root root 632242176 2月 8 2025 dm7_20240903_x86_kylin10_64.iso
-rw-r--r-- 1 root root 100 2月 8 2025 dm7_20240903_x86_kylin10_64.iso_SHA256.txt
[root@DM03 software]#
(2)安装软件
[dmdba@DM01 ~]$ /mnt/DMInstall.bin -i
请选择安装语言(C/c:中文 E/e:英文) [C/c]:c
解压安装程序.......... 欢迎使用达梦数据库安装程序
是否输入Key文件路径? (Y/y:是 N/n:否) [Y/y]:n
是否设置时区? (Y/y:是 N/n:否) [Y/y]:y
设置时区:
[ 1]: GTM-12=日界线西
[ 2]: GTM-11=萨摩亚群岛
[ 3]: GTM-10=夏威夷
[ 4]: GTM-09=阿拉斯加
[ 5]: GTM-08=太平洋时间(美国和加拿大)
[ 6]: GTM-07=亚利桑那
[ 7]: GTM-06=中部时间(美国和加拿大)
[ 8]: GTM-05=东部部时间(美国和加拿大)
[ 9]: GTM-04=大西洋时间(美国和加拿大)
[10]: GTM-03=巴西利亚
[11]: GTM-02=中大西洋
[12]: GTM-01=亚速尔群岛
[13]: GTM=格林威治标准时间
[14]: GTM+01=萨拉热窝
[15]: GTM+02=开罗
[16]: GTM+03=莫斯科
[17]: GTM+04=阿布扎比
[18]: GTM+05=伊斯兰堡
[19]: GTM+06=达卡
[20]: GTM+07=曼谷,河内
[21]: GTM+08=中国标准时间
[22]: GTM+09=汉城
[23]: GTM+10=关岛
[24]: GTM+11=所罗门群岛
[25]: GTM+12=斐济
[26]: GTM+13=努库阿勒法
[27]: GTM+14=基里巴斯
请选择设置时区 [21]:21
安装类型:
1 典型安装
2 服务器
3 客户端
4 自定义
请选择安装类型的数字序号 [1 典型安装]:1
所需空间: 1365M
请选择安装目录 [/home/dmdba/dmdbms]:/opt/app/dmdbms
可用空间: 60G
是否确认安装路径(/opt/app/dmdbms)? (Y/y:是 N/n:否) [Y/y]:y
安装前小结
安装位置: /opt/app/dmdbms
所需空间: 1365M
可用空间: 60G
版本信息: 有效日期: 安装类型: 典型安装
是否确认安装? (Y/y:是 N/n:否):y
2025-12-12 12:54:07
[INFO] 安装达梦数据库...
2025-12-12 12:54:07
[INFO] 安装 基础 模块...
2025-12-12 12:54:12
[INFO] 安装 服务器 模块...
2025-12-12 12:54:12
[INFO] 安装 客户端 模块...
2025-12-12 12:54:13
[INFO] 安装 驱动 模块...
2025-12-12 12:54:14
[INFO] 安装 手册 模块...
2025-12-12 12:54:14
[INFO] 安装 服务 模块...
2025-12-12 12:54:15
[INFO] 移动ant日志文件。
2025-12-12 12:54:15
[INFO] 安装达梦数据库完成。
请以root系统用户执行命令:
/opt/app/dmdbms/script/root/root_installer.sh
安装结束
[dmdba@DM01 ~]$ exit
注销
[root@DM01 opt]# /opt/app/dmdbms/script/root/root_installer.sh
移动 /opt/app/dmdbms/bin/dm_svc.conf 到/etc目录
创建DmAPService服务
Created symlink /etc/systemd/system/multi-user.target.wants/DmAPService.service →
/usr/lib/systemd/system/DmAPService.service.
创建服务(DmAPService)完成
启动DmAPService服务
[root@DM01 opt]# su - dmdba
上一次登录: 五 12月 12 12:48:02 CST 2025 pts/0 上
[dmdba@DM01 ~]$ ll
总用量 0
(3)初始化数据库
vi .bash_profile
export PATH=$PATH:$DM_HOME/bin:$DM_HOME/tool
export PS1="[\u@\h:\w]$ "
export LANG=zh_CN.UTF-8
alias dmbin="cd $DM_HOME/bin"
alias dmlog="cd $DM_HOME/log"
export JAVA_HOME=$DM_HOME/jdk
export PATH=$PATH:$JAVA_HOME/bin
-- 数据库初始化命令 SYSDBA_PWD='shi9daDBA' SYSAUDITOR_PWD='shi9daDBA' LOG_PATH=/dmdb/redo_dm7a
dminit
PATH=/dmdb/data_dm7a LOG_PATH=/dmdb/redo_dm7a/DM_DM7A/DM7A01.log LOG_PATH=/dmdb/redo_dm7a/DM_DM7A/DM7A02.l
LOG_SIZE=500 PORT_NUM=5236 DB_NAME=DM_DM7A EXTENT_SIZE=32 PAGE_SIZE=32
LOG_SIZE=2048 CASE_SENSITIVE=0 CHARSET=1 LENGTH_IN_CHAR=0
(4)主库备份,备库还原
su - dmdba
cd /opt/app/dmdbms/bin
-- 正常关闭数据库.
/opt/app/dmdbms/bin/dmserver /dmdb/data_dm7a/DM_DM7A/dm.ini
shutdown immediate;
-- 进行脱机备份
cd /opt/app/dmdbms/bin/
./dmrman CTLSTMT="BACKUP DATABASE '/dmdb/data_dm7a/DM_DM7A/dm.ini' BACKUPSET
'/dmdb/backup_dm7a/DM_DM7A/BACKUP_FILE_01'"
--拷贝备份文件到备机
scp -r /dmdb/backup_dm7a/DM_DM7A/BACKUP_FILE_01 192.168.3.133:/dmdb/backup_dm7a/DM_DM7A
scp -r /dmdb/backup_dm7a/DM_DM7A/BACKUP_FILE_01 192.168.3.134:/dmdb/backup_dm7a/DM_DM7A
-- 133、134节点数据库还原
su - dmdba
cd /opt/app/dmdbms/bin
./dmrman CTLSTMT="restore database '/dmdb/data_dm7a/DM_DM7A/dm.ini' from backupset
'/dmdb/backup_dm7a/DM_DM7A/BACKUP_FILE_01'"
./dmrman CTLSTMT="recover database '/dmdb/data_dm7a/DM_DM7A/dm.ini' from backupset
'/dmdb/backup_dm7a/DM_DM7A/BACKUP_FILE_01'"
./dmrman CTLSTMT="recover database '/dmdb/data_dm7a/DM_DM7A/dm.ini' update DB_MAGIC "
例如:
[dmdba@DM02:/opt/app/dmdbms/bin]$ dmrman CTLSTMT="recover database
'/dmdb/data_dm7a/DM_DM7A/dm.ini' from backupset '/dmdb/backup_dm7a/DM_DM7A/BACKUP_FILE_01'"
dmrman V7
recover database '/dmdb/data_dm7a/DM_DM7A/dm.ini' from backupset
'/dmdb/backup_dm7a/DM_DM7A/BACKUP_FILE_01'
file dm.key not found, use default license!
checking if the database under system path [/dmdb/data_dm7a/DM_DM7A] is running...[4].
checking if the database under system path [/dmdb/data_dm7a/DM_DM7A] is running...[3].
checking if the database under system path [/dmdb/data_dm7a/DM_DM7A] is running...[2].
checking if the database under system path [/dmdb/data_dm7a/DM_DM7A] is running...[1].
checking if the database under system path [/dmdb/data_dm7a/DM_DM7A] is running...[0].
checking if the database under system path [/dmdb/data_dm7a/DM_DM7A] is running, write dmrman
info.
EP[0] max_lsn: 45124
RESTORE RLOG CHECK......
CMD END.CODE:[603],DESC:[备份集[/dmdb/backup_dm7a/DM_DM7A/BACKUP_FILE_01]备份过程中未产生日志]
备份集[/dmdb/backup_dm7a/DM_DM7A/BACKUP_FILE_01]备份过程中未产生日志
recover successfully!
time used: 7067.345(ms)
-- dm7 不用执行。
[dmdba@DM02:/opt/app/dmdbms/bin]$ dmrman CTLSTMT="recover database
'/dmdb/data_dm7a/DM_DM7A/dm.ini' update DB_MAGIC "
dmrman V7
recover database '/dmdb/data_dm7a/DM_DM7A/dm.ini' update DB_MAGIC
file dm.key not found, use default license!
checking if the database under system path [/dmdb/data_dm7a/DM_DM7A] is running...[4].
checking if the database under system path [/dmdb/data_dm7a/DM_DM7A] is running...[3].
checking if the database under system path [/dmdb/data_dm7a/DM_DM7A] is running...[2].
checking if the database under system path [/dmdb/data_dm7a/DM_DM7A] is running...[1].
checking if the database under system path [/dmdb/data_dm7a/DM_DM7A] is running...[0].
checking if the database under system path [/dmdb/data_dm7a/DM_DM7A] is running, write dmrman
info.
EP[0] max_lsn: 45124
[-8305]:未执行还原操作,禁止更新magic或者从备份集恢复
-- 检查数据一致性
select file_LSN, cur_LSN from v$rlog;
select permanent_magic;
(5)修改dm.ini 参数
vi dm.in
BAK_PATH = /dmdb/backup_dm7a/DM_DM7A
INSTANCE_NAME = DM_DM7A01/DM_DM7A02/DM_DM7A03
DW_PORT = 5536
ALTER_MODE_STATUS = 0
ENABLE_OFFLINE_TS = 2 #Whether tablespace can be offline
MAL_INI = 1 #dmmal.ini
ARCH_INI = 1 #dmarch.ini
(6)生成dmwatcher.ctl 文件
./dmctlcvt TYPE=3 SRC=/dmdb/data_dm7a/DM_DM7A/dmwatcher.ini DEST=/dmdb/data_dm7a
复制dmwatcher.ctl 到备份节点
(7)添加dmmal.ini
[dmdba@DM01:/dmdb/data_dm7a/DM_DM7A]$ more dmmal.ini
MAL_CHECK_INTERVAL = 60 #MAL 链路检测时间间隔
MAL_CONN_FAIL_INTERVAL = 15 #判定 MAL 链路断开的时间
[MAL_INST1]
MAL_INST_NAME = DM_DM7A01 #实例名,和 dm.ini 中的 INSTANCE_NAME 一致
MAL_HOST = 192.168.3.132 #MAL 系统监听 TCP 连接的 IP 地址
MAL_PORT = 5336 #MAL 系统监听 TCP 连接的端口
MAL_INST_HOST = 192.168.3.132 #实例的对外服务 IP 地址
MAL_INST_PORT = 5236 #实例的对外服务端口,和 dm.ini 中的 PORT_NUM 一致
MAL_DW_PORT = 5436 #实例本地的守护进程监听 TCP 连接的端口
#MAL_INST_DW_PORT = 5536 #实例监听守护进程 TCP 连接的端口
[MAL_INST2]
MAL_INST_NAME = DM_DM7A02
MAL_HOST = 192.168.3.133
MAL_PORT = 5336
MAL_INST_HOST = 192.168.3.133
MAL_INST_PORT = 5236
MAL_DW_PORT = 5436
#MAL_INST_DW_PORT = 5536
[MAL_INST3]
MAL_INST_NAME = DM_DM7A03
MAL_HOST = 192.168.3.134
MAL_PORT = 5336
MAL_INST_HOST = 192.168.3.1345336
MAL_INST_PORT = 5236
MAL_DW_PORT = 5436
#MAL_INST_DW_PORT = 5536
(8)添加dmarch.ini
[dmdba@DM01:/dmdb/data_dm7a/DM_DM7A]$ cat dmarch.ini
ARCH_WAIT_APPLY = 0 #0:高性能 1:事务一致
[ARCHIVE_REALTIME]
ARCH_TYPE = REALTIME #实时归档类型
ARCH_DEST = DM_DM7A02 #实时归档目标实例名
[ARCHIVE_REALTIME2]
ARCH_TYPE = REALTIME #实时归档类型
ARCH_DEST = DM_DM7A03 #实时归档目标实例名
[ARCHIVE_LOCAL1]
ARCH_TYPE = LOCAL #本地归档类型
ARCH_DEST = /dmdb/archive_dm7a/DM_DM7A #本地归档文件存放路径
ARCH_FILE_SIZE = 2048 #单位 Mb,本地单个归档文件最大值
ARCH_SPACE_LIMIT = 0 #单位 Mb,0 表示无限制,范围 1024~4294967294M 20G
(9)启动数据库并修改参数
[启动数据库主库,修改oguid]
/opt/app/dmdbms/bin/dmserver /dmdb/data_dm7a/DM_DM7A/dm.ini mount
SQL>SP_SET_PARA_VALUE(1, 'ALTER_MODE_STATUS', 1);
SQL>sp_set_oguid(453331);
SQL>alter database primary;
SQL>SP_SET_PARA_VALUE(1, 'ALTER_MODE_STATUS', 0);
[启动数据库备库,修改oguid]
/opt/app/dmdbms/bin/dmserver /dmdb/data_dm7a/DM_DM7A/dm.ini mount
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);
(10)注册服务
##[主库]
/opt/app/dmdbms/script/root/dm_service_installer.sh -t dmserver -m mount -
i /dmdb/data_dm7a/DM_DM7A/dm.ini -p DM_7A01
/opt/app/dmdbms/script/root/dm_service_installer.sh -t dmwatcher -i
/dmdb/data_dm7a/DM_DM7A/dmwatcher.ini -p DM_7A01
##[备库]
/opt/app/dmdbms/script/root/dm_service_installer.sh -t dmserver -m mount -i
/dmdb/data_dm7a/DM_DM7A/dm.ini -p DM_7A02
/opt/app/dmdbms/script/root/dm_service_installer.sh -t dmwatcher -i
/dmdb/data_dm7a/DM_DM7A/dmwatcher.ini -p DM_7A02
##[备库]
/opt/app/dmdbms/script/root/dm_service_installer.sh -t dmserver -m mount -i
/dmdb/data_dm7a/DM_DM7A/dm.ini -p DM_7A03
/opt/app/dmdbms/script/root/dm_service_installer.sh -t dmwatcher -i
/dmdb/data_dm7a/DM_DM7A/dmwatcher.ini -p DM_7A03
3.数据库监控
show
2025-12-12 16:52:24
#================================================================================#
GROUP OGUID MON_CONFIRM MODE MPP_FLAG
DM_DM7A 453331 FALSE AUTO FALSE
IP INST_PORT MAL_DW_PORT WTIME WTYPE WCTLSTAT WSTATUS INST_OK I
192.168.3.132 5236 5436 2025-12-12
16:52:24 GLOBAL VALID OPEN OK DM_DM7A01 OPEN PRIMARY REALTIME VAL
192.168.3.133 5236 5436 2025-12-12
16:52:24 GLOBAL VALID OPEN OK DM_DM7A02 OPEN STANDBY REALTIME VAL
192.168.3.134 5236 5436 2025-12-12
16:52:24 GLOBAL VALID OPEN OK DM_DM7A03 OPEN STANDBY REALTIME VAL
文章
阅读量
获赞
