DM8数据库读写分离集群安装部署
本文介绍了达梦数据库(DM8)读写分离集群的安装部署流程。主要内容包括:1) 达梦数据库版本特性对比;2) 集群硬件配置、端口规划和目录结构设计;3) 详细的操作系统配置步骤,涵盖时间同步、防火墙设置、SELinux关闭、磁盘挂载、内核参数优化等;4) 用户权限及目录创建规范。部署方案采用3节点架构,提供完整的系统调优建议,为构建高可用数据库集群提供技术指导。相关配置文件和命令均已列出,适合DBA
DM8数据库读写分离集群安装部署
大家想学习达梦数据库或者解决报错问题,可以去达梦数据库社区(https://eco.dameng.com)
文章目录
1 前言
达梦数据库管理系统(以下简称 DM)是基于客户/服务器方式的数据库管理系统,可以安装在多种计算机操作系统平台上,本文主要介绍 DM 数据库读写分离集群的安装部署流程。
DM 安装成功后,可在安装目录的 doc 子目录下找到 DM 的其他用户手册和技术文档。
- DM 标准版:包含基础数据库功能,资源受限,无高级集群与安全特性,性价比高、可升级。
- DM 企业版:功能完整、无资源限制,支持各类集群、高级特性,适配各类企业业务场景。
- DM 安全版:包含企业版全部能力,强化安全机制,支持四权分立,高安全等级、适配敏感业务。
2 系统设计规划
2.1 硬件配置
本次部署的数据库节点硬件配置如下:
| 节点IP | 主机名 | 操作系统 | CPU | 内存 | 硬盘 |
|---|---|---|---|---|---|
| 192.168.157.141~143 | node1~3 | Kylin V10 | 2 | 8GB | 40GB |
2.2 端口配置
数据库使用的默认端口号如下,如冲突可调整:
| 参数 | node1 | node2 | node3 |
|---|---|---|---|
| 实例端口 | 5236 | 5236 | 5236 |
| MAL 端口 | 5336 | 5336 | 5336 |
| MAL 守护进程端口 | 5436 | 5436 | 5436 |
| 守护进程端口 | 5536 | 5536 | 5536 |
| OGUID | 45331 | 45331 | 45331 |
| 守护组 | GRP1 | GRP1 | GRP1 |
| 归档上限(MB) | 51200 | 51200 | 51200 |
2.3 目录规划
软件安装使用以下路径,也可按需调整:
| 目录名称 | 所属用户 | 目录路径 | 权限 |
|---|---|---|---|
| 数据库软件目录 | dmdba | /home/dmdba/dmdbms | 755 |
| 数据库实例目录 | dmdba | /dmdata/data | 755 |
| 数据库备份目录 | dmdba | /dmdata/dmbak | 755 |
| 数据库归档目录 | dmdba | /dmdata/arch | 755 |
3 数据库部署
3.1 操作系统配置
3.1.1 配置时间同步
检查并确保时间配置正常:
ll /etc/localtime
date
hwclock --show
若时区非 Asia/Shanghai,修正时区:
timedatectl set-timezone 'Asia/Shanghai'
集群各节点应保持时间同步,使用 chronyd 服务:
yum install -y chrony
systemctl disable ntpd && systemctl stop ntpd
注意:CentOS/RedHat 环境下,
chronyd与ntpd冲突,只能二选一,推荐chronyd。
方式一:对接外部时间服务器(192.168.100.5)
vim /etc/chrony.conf
server 192.168.100.5 prefer
maxdistance 1800.0
方式二:集群自建时间服务器(以 192.168.100.1 为例)
- 主节点配置:
allow all
local stratum 10
- 其他节点配置:
server 192.168.100.1 prefer
maxdistance 1800.0
启动并开机自启:
systemctl start chronyd
systemctl enable chronyd
systemctl status chronyd
检查时间同步:
chronyc sources -v
同步系统时间到硬件:
hwclock -w
3.1.2 防火墙设置
关闭防火墙
systemctl status firewalld.service
systemctl stop firewalld.service
systemctl disable firewalld
开放端口
firewall-cmd --zone=public --permanent --add-port=5236/tcp
firewall-cmd --reload
firewall-cmd --list-port
3.1.3 SELINUX 设置
- 查看状态:
getenforce
- 临时关闭:
setenforce 0
- 永久关闭:
vim /etc/selinux/config
SELINUX=disabled
修改后重启:reboot
3.1.4 磁盘挂载(LVM)
# 创建物理卷
pvcreate /dev/sdb
# 创建卷组
vgcreate datavg /dev/sdb
# 创建逻辑卷
lvcreate -l 100%VG -n datalv datavg
# 格式化
mkfs.xfs /dev/datavg/datalv
# 获取 UUID
blkid
# 写入 fstab
vim /etc/fstab
UUID=f68eca84-e311-4ad1-99de-a16f061c460c /data xfs defaults 0 0
3.1.5 磁盘调度算法
达梦建议设为 deadline;NVMe 设备默认 none,无需设置。
查看:
cat /sys/block/sda/queue/scheduler
临时修改:
echo deadline > /sys/block/vdc/queue/scheduler
永久修改(内核参数):
vim /boot/grub/menu.lst
在内核行添加:
elevator=deadline
3.1.6 关闭透明大页(THP)
创建系统服务:
vim /etc/systemd/system/disable-thp.service
[Unit]
Description=Disable Transparent Huge Pages (THP)
[Service]
Type=simple
ExecStart=/bin/sh -c "echo 'never' > /sys/kernel/mm/transparent_hugepage/enabled && echo 'never' > /sys/kernel/mm/transparent_hugepage/defrag"
[Install]
WantedBy=multi-user.target
生效:
systemctl daemon-reload
systemctl start disable-thp
systemctl enable disable-thp
3.1.7 内核参数调整
vim /etc/sysctl.conf
vm.overcommit_memory = 0
生效:
sysctl -p
参数说明:
- 0:内核校验内存充足才允许申请
- 1:允许分配全部物理内存
- 2:允许超物理内存+交换空间总和分配
3.1.8 修改资源限制(limits.conf)
vim /etc/security/limits.conf
dmdba soft nice 0
dmdba hard nice 0
dmdba soft as unlimited
dmdba hard as unlimited
dmdba soft fsize unlimited
dmdba hard fsize unlimited
dmdba soft nproc 65536
dmdba hard nproc 65536
dmdba soft nofile 65536
dmdba hard nofile 65536
dmdba soft core unlimited
dmdba hard core unlimited
dmdba soft data unlimited
dmdba hard data unlimited
3.1.9 调整 system.conf
vim /etc/systemd/system.conf
DefaultLimitNOFILE=65536
DefaultLimitNPROC=10240
3.1.10 创建用户与目录
# 创建用户组与用户
groupadd dinstall -g 2001
useradd -G dinstall -m -d /home/dmdba -s /bin/bash -u 2001 dmdba
passwd dmdba
# 密码永不过期
chage -m 0 -M 99999 -E -1 dmdba
# 创建目录
mkdir -p /dmdata/data
mkdir -p /dmdata/arch
mkdir -p /dmdata/dmbak
# 授权
chown -R dmdba:dinstall /dmdata/*
chmod -R 755 /dmdata/*
3.1.11 RemoveIPC 参数设置
echo "RemoveIPC=no" >> /etc/systemd/logind.conf
echo "RemoveIPC=no" >> /usr/lib/systemd/system/systemd-logind.service
systemctl daemon-reload
systemctl stop systemd-logind
systemctl start systemd-logind
3.1.12 调整 login(PAM)
vim /etc/pam.d/login
session required /lib64/security/pam_limits.so
session required pam_limits.so
3.2 数据库安装
挂载镜像:
mount dm8_20260317_x86_kylin10_sp3_64.iso /mnt/
安装参考:《DM 数据库单节点安装部署.docx》
安装完成后,root 执行脚本:
/home/dmdba/dmdbms/script/root/root_installer.sh
3.3 配置 node1 机器
3.3.1 初始化实例并备份数据
初始化实例
su - dmdba
cd /home/dmdba/dmdbms/bin
./dminit PATH=/dmdata/data INSTANCE_NAME=GRP1_RWW_01 SYSDBA_PWD='Linux123!@#' SYSAUDITOR_PWD='Linux123!@#'
前台启动
./dmserver /dmdata/data/DAMENG/dm.ini -NOCONSOLE &
登录 disql
disql SYSDBA/'"Linux123!@#"'@127.0.0.1:5236
开启归档
ALTER DATABASE MOUNT;
ALTER DATABASE ARCHIVELOG;
ALTER DATABASE ADD ARCHIVELOG 'DEST=/dmdata/arch, TYPE=LOCAL, FILE_SIZE=1024, SPACE_LIMIT=51200';
ALTER DATABASE OPEN;
全库备份
BACKUP DATABASE BACKUPSET '/dmdata/dmbak/';
修改 dm.ini(动态参数)
SP_SET_PARA_VALUE(2,'PORT_NUM',5236);
SP_SET_PARA_VALUE(2,'DW_INACTIVE_INTERVAL',60);
SP_SET_PARA_VALUE(2,'ALTER_MODE_STATUS',0);
SP_SET_PARA_VALUE(2,'ENABLE_OFFLINE_TS',2);
SP_SET_PARA_VALUE(2,'MAL_INI',1);
SP_SET_PARA_VALUE(2,'RLOG_SEND_APPLY_MON',64);
关闭前台实例后,配置集群文件。
3.3.2 dmarch.ini
vim /dmdata/data/DAMENG/dmarch.ini
ARCH_WAIT_APPLY = 0
[ARCHIVE_LOCAL]
ARCH_TYPE = LOCAL
ARCH_DEST = /dmdata/arch/
ARCH_FILE_SIZE = 1024
ARCH_SPACE_LIMIT = 51200
[ARCHIVE_REALTIME1]
ARCH_TYPE = REALTIME
ARCH_DEST = GRP1_RWW_02
[ARCHIVE_REALTIME2]
ARCH_TYPE = REALTIME
ARCH_DEST = GRP1_RWW_03
3.3.3 dmmal.ini
vim /dmdata/data/DAMENG/dmmal.ini
MAL_CHECK_INTERVAL = 10
MAL_CONN_FAIL_INTERVAL = 10
MAL_TEMP_PATH = /home/dmdba/dmdbms/malpath/
MAL_BUF_SIZE = 512
MAL_SYS_BUF_SIZE = 2048
MAL_COMPRESS_LEVEL = 0
[MAL_INST1]
MAL_INST_NAME = GRP1_RWW_01
MAL_HOST = 192.168.157.141
MAL_PORT = 5336
MAL_INST_HOST = 192.168.157.141
MAL_INST_PORT = 5236
MAL_DW_PORT = 5436
MAL_INST_DW_PORT = 5536
[MAL_INST2]
MAL_INST_NAME = GRP1_RWW_02
MAL_HOST = 192.168.157.142
MAL_PORT = 5336
MAL_INST_HOST = 192.168.157.142
MAL_INST_PORT = 5236
MAL_DW_PORT = 5436
MAL_INST_DW_PORT = 5536
[MAL_INST3]
MAL_INST_NAME = GRP1_RWW_03
MAL_HOST = 192.168.157.143
MAL_PORT = 5336
MAL_INST_HOST = 192.168.157.143
MAL_INST_PORT = 5236
MAL_DW_PORT = 5436
MAL_INST_DW_PORT = 5536
3.3.4 dmwatcher.ini
vim /dmdata/data/DAMENG/dmwatcher.ini
[GRP1]
DW_TYPE = GLOBAL
DW_MODE = AUTO
DW_ERROR_TIME = 20
INST_ERROR_TIME = 20
INST_RECOVER_TIME = 60
INST_OGUID = 45331
INST_INI = /dmdata/data/DAMENG/dm.ini
INST_AUTO_RESTART = 1
INST_STARTUP_CMD = /home/dmdba/dmdbms/bin/dmserver
RLOG_SEND_THRESHOLD = 0
RLOG_APPLY_THRESHOLD = 0
3.3.5 拷贝备份文件
su - dmdba
scp -r /dmdata/dmbak/ dmdba@192.168.157.142:/dmdata/
scp -r /dmdata/dmbak/ dmdba@192.168.157.143:/dmdata/
3.3.6 注册服务
# root
/home/dmdba/dmdbms/script/root/dm_service_installer.sh -t dmserver -p GRP1_RWW_01 -dm_ini /dmdata/data/DAMENG/dm.ini -m mount
/home/dmdba/dmdbms/script/root/dm_service_installer.sh -t dmwatcher -p Watcher -watcher_ini /dmdata/data/DAMENG/dmwatcher.ini
3.4 配置 node2 机器
3.4.1 初始化实例并恢复数据
初始化
su - dmdba
cd /home/dmdba/dmdbms/bin
./dminit PATH=/dmdata/data INSTANCE_NAME=GRP1_RWW_02 SYSDBA_PWD='Linux123!@#' SYSAUDITOR_PWD='Linux123!@#'
恢复
dmrman CTLSTMT="RESTORE DATABASE '/dmdata/data/DAMENG/dm.ini' FROM BACKUPSET '/dmdata/dmbak/'"
dmrman CTLSTMT="RECOVER DATABASE '/dmdata/data/DAMENG/dm.ini' FROM BACKUPSET '/dmdata/dmbak/'"
dmrman CTLSTMT="RECOVER DATABASE '/dmdata/data/DAMENG/dm.ini' UPDATE DB_MAGIC"
3.4.2 dmarch.ini(备库)
vim /dmdata/data/DAMENG/dmarch.ini
ARCH_WAIT_APPLY = 0
[ARCHIVE_LOCAL]
ARCH_TYPE = LOCAL
ARCH_DEST = /dmdata/arch/
ARCH_FILE_SIZE = 1024
ARCH_SPACE_LIMIT = 51200
[ARCHIVE_REALTIME1]
ARCH_TYPE = REALTIME
ARCH_DEST = GRP1_RWW_01
[ARCHIVE_REALTIME2]
ARCH_TYPE = REALTIME
ARCH_DEST = GRP1_RWW_03
3.4.3 dmmal.ini(同 node1)
直接复制 node1 的 dmmal.ini,内容完全一致。
3.4.4 dmwatcher.ini(同 node1)
内容同 node1。
3.4.5 注册服务
# root
/home/dmdba/dmdbms/script/root/dm_service_installer.sh -t dmserver -p GRP1_RWW_02 -dm_ini /dmdata/data/DAMENG/dm.ini -m mount
/home/dmdba/dmdbms/script/root/dm_service_installer.sh -t dmwatcher -p Watcher -watcher_ini /dmdata/data/DAMENG/dmwatcher.ini
3.5 配置 node3 机器
流程同 node2,仅实例名改为 GRP1_RWW_03。
3.6 启动数据库并修改参数
3.6.1 node1(主库)
/home/dmdba/dmdbms/bin/DmServiceGRP1_RWW_01 start
disql SYSDBA/'"Linux123!@#"'@127.0.0.1:5236
SP_SET_PARA_VALUE(1, 'ALTER_MODE_STATUS', 1);
SP_SET_OGUID(45331);
ALTER DATABASE PRIMARY;
SP_SET_PARA_VALUE(1, 'ALTER_MODE_STATUS', 0);
3.6.2 node2(备库)
/home/dmdba/dmdbms/bin/DmServiceGRP1_RWW_02 start
disql SYSDBA/'"Linux123!@#"'@127.0.0.1:5236
SP_SET_PARA_VALUE(1, 'ALTER_MODE_STATUS', 1);
SP_SET_OGUID(45331);
ALTER DATABASE STANDBY;
SP_SET_PARA_VALUE(1, 'ALTER_MODE_STATUS', 0);
3.6.3 node3(备库)
/home/dmdba/dmdbms/bin/DmServiceGRP1_RWW_03 start
disql SYSDBA/'"Linux123!@#"'@127.0.0.1:5236
SP_SET_PARA_VALUE(1, 'ALTER_MODE_STATUS', 1);
SP_SET_OGUID(45331);
ALTER DATABASE STANDBY;
SP_SET_PARA_VALUE(1, 'ALTER_MODE_STATUS', 0);
查看状态
select INSTANCE_NAME,STATUS$,MODE$ from v$instance;
3.6.4 启动守护进程
su - dmdba
cd /home/dmdba/dmdbms/bin
./DmWatcherServiceWatcher start
3.7 配置确认监视器
3.7.1 dmmonitor.ini(确认模式)
vim /home/dmdba/dmdbms/bin/dmmonitor.ini
MON_DW_CONFIRM = 1
MON_LOG_PATH = ../log
MON_LOG_INTERVAL = 60
MON_LOG_FILE_SIZE = 512
MON_LOG_SPACE_LIMIT = 2048
[GRP1]
MON_INST_OGUID = 45331
MON_DW_IP = 192.168.157.141:5436
MON_DW_IP = 192.168.157.142:5436
MON_DW_IP = 192.168.157.143:5436
注册并启动:
# root
/home/dmdba/dmdbms/script/root/dm_service_installer.sh -t dmmonitor -p Monitor -monitor_ini /home/dmdba/dmdbms/bin/dmmonitor.ini
# dmdba
/home/dmdba/dmdbms/bin/DmMonitorServiceMonitor start
3.7.2 dmmonitor_manual.ini(非确认/手动切换)
vim /home/dmdba/dmdbms/bin/dmmonitor_manual.ini
MON_DW_CONFIRM = 0
MON_LOG_PATH = ../log
MON_LOG_INTERVAL = 60
MON_LOG_FILE_SIZE = 512
MON_LOG_SPACE_LIMIT = 2048
[GRP1]
MON_INST_OGUID = 45331
MON_DW_IP = 192.168.157.141:5436
MON_DW_IP = 192.168.157.142:5436
MON_DW_IP = 192.168.157.143:5436
前台运行:
./dmmonitor dmmonitor_manual.ini
常用命令:
tip
show
choose switchover GRP1
switchover GRP1.GRP1_RWW_02
4 dm_svc.conf 配置(客户端)
文件放在客户端,实现读写分离、负载均衡、高可用。
# 全局配置
TIME_ZONE=(480)
LANGUAGE=(cn)
DMRW=(192.168.157.141:5236,192.168.157.142:5236,192.168.157.143:5236)
# 服务配置
[DMRW]
LOGIN_MODE=(1)
RW_SEPARATE=(1)
RW_PERCENT=(30)
SWITCH_TIMES=(60)
SWITCH_INTERVAL=(1000)
openEuler 是由开放原子开源基金会孵化的全场景开源操作系统项目,面向数字基础设施四大核心场景(服务器、云计算、边缘计算、嵌入式),全面支持 ARM、x86、RISC-V、loongArch、PowerPC、SW-64 等多样性计算架构
更多推荐

所有评论(0)